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