1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Collections.Generic; 6 using Xunit; 7 8 namespace System.Tests 9 { 10 public class DBNullTests 11 { 12 [Fact] ToString_Invoke_ReturnsEmptyString()13 public void ToString_Invoke_ReturnsEmptyString() 14 { 15 Assert.Equal(string.Empty, DBNull.Value.ToString()); 16 } 17 18 [Fact] ToBoolean_Invoke_ThrowsInvalidCastException()19 public void ToBoolean_Invoke_ThrowsInvalidCastException() 20 { 21 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToBoolean(null)); 22 } 23 24 [Fact] ToChar_Invoke_ThrowsInvalidCastException()25 public void ToChar_Invoke_ThrowsInvalidCastException() 26 { 27 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToChar(null)); 28 } 29 30 [Fact] ToSByte_Invoke_ThrowsInvalidCastException()31 public void ToSByte_Invoke_ThrowsInvalidCastException() 32 { 33 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToSByte(null)); 34 } 35 36 [Fact] ToByte_Invoke_ThrowsInvalidCastException()37 public void ToByte_Invoke_ThrowsInvalidCastException() 38 { 39 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToByte(null)); 40 } 41 42 [Fact] ToInt16_Invoke_ThrowsInvalidCastException()43 public void ToInt16_Invoke_ThrowsInvalidCastException() 44 { 45 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToInt16(null)); 46 } 47 48 [Fact] ToUInt16_Invoke_ThrowsInvalidCastException()49 public void ToUInt16_Invoke_ThrowsInvalidCastException() 50 { 51 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToUInt16(null)); 52 } 53 54 [Fact] ToInt32_Invoke_ThrowsInvalidCastException()55 public void ToInt32_Invoke_ThrowsInvalidCastException() 56 { 57 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToInt32(null)); 58 } 59 60 [Fact] ToUInt32_Invoke_ThrowsInvalidCastException()61 public void ToUInt32_Invoke_ThrowsInvalidCastException() 62 { 63 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToUInt32(null)); 64 } 65 66 [Fact] ToInt64_Invoke_ThrowsInvalidCastException()67 public void ToInt64_Invoke_ThrowsInvalidCastException() 68 { 69 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToInt64(null)); 70 } 71 72 [Fact] ToUInt64_Invoke_ThrowsInvalidCastException()73 public void ToUInt64_Invoke_ThrowsInvalidCastException() 74 { 75 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToUInt64(null)); 76 } 77 78 [Fact] ToSingle_Invoke_ThrowsInvalidCastException()79 public void ToSingle_Invoke_ThrowsInvalidCastException() 80 { 81 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToSingle(null)); 82 } 83 84 [Fact] ToDouble_Invoke_ThrowsInvalidCastException()85 public void ToDouble_Invoke_ThrowsInvalidCastException() 86 { 87 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToDouble(null)); 88 } 89 90 [Fact] ToDecimal_Invoke_ThrowsInvalidCastException()91 public void ToDecimal_Invoke_ThrowsInvalidCastException() 92 { 93 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToDecimal(null)); 94 } 95 96 [Fact] ToDateTime_Invoke_ThrowsInvalidCastException()97 public void ToDateTime_Invoke_ThrowsInvalidCastException() 98 { 99 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToDateTime(null)); 100 } 101 102 [Fact] GetTypeCode_Invoke_ReturnsDBNull()103 public static void GetTypeCode_Invoke_ReturnsDBNull() 104 { 105 Assert.Equal(TypeCode.DBNull, DBNull.Value.GetTypeCode()); 106 } 107 Equals_TestData()108 public static IEnumerable<object[]> Equals_TestData() 109 { 110 yield return new object[] { DBNull.Value, DBNull.Value, true }; 111 yield return new object[] { Convert.DBNull, DBNull.Value, true }; 112 yield return new object[] { DBNull.Value, null, false }; 113 } 114 115 [Theory] 116 [MemberData(nameof(Equals_TestData))] Equals_Other_ReturnsExpected(DBNull dbNull, object other, bool expected)117 public void Equals_Other_ReturnsExpected(DBNull dbNull, object other, bool expected) 118 { 119 Assert.Equal(expected, dbNull.Equals(other)); 120 } 121 122 [Fact] ToType_ValidType_ReturnsEmptyString()123 public void ToType_ValidType_ReturnsEmptyString() 124 { 125 Assert.Equal(string.Empty, ((IConvertible)DBNull.Value).ToType(typeof(string), null)); 126 } 127 128 [Fact] ToType_InvalidType_ThrowsInvalidCastException()129 public void ToType_InvalidType_ThrowsInvalidCastException() 130 { 131 Assert.Throws<InvalidCastException>(() => ((IConvertible)DBNull.Value).ToType(typeof(int), null)); 132 } 133 IsDBNull_TestData()134 public static IEnumerable<object[]> IsDBNull_TestData() 135 { 136 yield return new object[] { DBNull.Value, true }; 137 yield return new object[] { 6689, false }; 138 yield return new object[] { new object(), false }; 139 } 140 141 [Theory] 142 [MemberData(nameof(IsDBNull_TestData))] Convert_IsDBNull_ReturnsExpected(object value, bool expected)143 public void Convert_IsDBNull_ReturnsExpected(object value, bool expected) 144 { 145 Assert.Equal(expected, Convert.IsDBNull(value)); 146 } 147 } 148 } 149