1
- using Microsoft . CodeAnalysis ;
1
+ using System ;
2
+ using System . IO ;
3
+ using Microsoft . CodeAnalysis ;
2
4
using Microsoft . CodeAnalysis . Diagnostics ;
3
5
using Microsoft . VisualStudio . TestTools . UnitTesting ;
4
6
using TestHelper ;
@@ -40,7 +42,7 @@ static void Main(string[] args)
40
42
}
41
43
42
44
[ TestMethod ]
43
- public void UsageOfImplicitConversionInComparison_ProducesWarningMessage ( )
45
+ public void UsageOfImplicitConversionInComparison_DateTimeToDateTimeOffset_ProducesWarningMessage ( )
44
46
{
45
47
string source = @"
46
48
using System;
@@ -53,15 +55,42 @@ internal class Program
53
55
static void Main(string[] args)
54
56
{
55
57
DateTime first = DateTime.Now;
58
+ DateTimeOffset second = DateTimeOffset.Now;
59
+ _ = first < second
60
+ }
61
+ }
62
+ }" ;
56
63
57
- Thread.Sleep(10);
64
+ VerifyCSharpDiagnostic ( source ,
65
+ new DiagnosticResult
66
+ {
67
+ Id = "INTL0202" ,
68
+ Severity = DiagnosticSeverity . Warning ,
69
+ Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
70
+ Locations =
71
+ new [ ] {
72
+ new DiagnosticResultLocation ( "Test0.cs" , 13 , 17 )
73
+ }
74
+ } ) ;
58
75
59
- DateTimeOffset second = DateTimeOffset.Now;
76
+ }
60
77
61
- if (first < second)
62
- {
63
- Console.WriteLine(""Time has passed..."");
64
- }
78
+ [ TestMethod ]
79
+ public void UsageOfImplicitConversionInComparison_DateTimeOffsetToDateTime_ProducesWarningMessage ( )
80
+ {
81
+ string source = @"
82
+ using System;
83
+ using System.Threading;
84
+
85
+ namespace ConsoleApp1
86
+ {
87
+ internal class Program
88
+ {
89
+ static void Main(string[] args)
90
+ {
91
+ DateTimeOffset first = DateTimeOffset.Now;
92
+ DateTime second = DateTime.Now;
93
+ _ = first < second
65
94
}
66
95
}
67
96
}" ;
@@ -74,12 +103,70 @@ static void Main(string[] args)
74
103
Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
75
104
Locations =
76
105
new [ ] {
77
- new DiagnosticResultLocation ( "Test0.cs" , 17 , 17 )
106
+ new DiagnosticResultLocation ( "Test0.cs" , 13 , 25 )
78
107
}
79
108
} ) ;
80
109
81
110
}
82
111
112
+ [ TestMethod ]
113
+ public void UsageOfImplicitConversionInComparison_NullableDateTimeOffsetToDateTime_ProducesWarningMessage ( )
114
+ {
115
+ string source = @"
116
+ using System;
117
+ using System.Threading;
118
+
119
+ namespace ConsoleApp1
120
+ {
121
+ internal class Program
122
+ {
123
+ static void Main(string[] args)
124
+ {
125
+ DateTimeOffset? first = DateTimeOffset.Now;
126
+ DateTime second = DateTime.Now;
127
+ _ = first < second
128
+ }
129
+ }
130
+ }" ;
131
+
132
+ VerifyCSharpDiagnostic (
133
+ source ,
134
+ new DiagnosticResult
135
+ {
136
+ Id = "INTL0202" ,
137
+ Severity = DiagnosticSeverity . Warning ,
138
+ Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
139
+ Locations = new [ ] {
140
+ new DiagnosticResultLocation ( "Test0.cs" , 13 , 25 )
141
+ }
142
+ }
143
+ ) ;
144
+
145
+ }
146
+
147
+ [ TestMethod ]
148
+ public void UsageOfImplicitConversion_InLinq_ProducesWarningMessage ( )
149
+ {
150
+ string dir = Directory . GetParent ( Environment . CurrentDirectory ) . Parent . Parent . FullName ;
151
+ string path = Path . Combine ( dir , "Data" , "DateTime_ImplicitConversion_InLinq.cs" ) ;
152
+ string source = File . ReadAllText ( path ) ;
153
+
154
+ VerifyCSharpDiagnostic (
155
+ source ,
156
+ new DiagnosticResult
157
+ {
158
+ Id = "INTL0202" ,
159
+ Severity = DiagnosticSeverity . Warning ,
160
+ Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
161
+ Locations =
162
+ new [ ] {
163
+ new DiagnosticResultLocation ( "Test0.cs" , 17 , 25 )
164
+ }
165
+ }
166
+ ) ;
167
+ }
168
+
169
+
83
170
[ TestMethod ]
84
171
public void UsageOfExplicitConversion_ProducesNothing ( )
85
172
{
0 commit comments