@@ -142,7 +142,7 @@ public async Task CastOperator()
142142 IEnumerable<object> items = [];
143143 var query = items
144144 .Where([Throws(typeof(FormatException), typeof(OverflowException))] (x) => x is not null)
145- .Cast<string>();
145+ .Cast<string>();
146146
147147 foreach (var item in query) { }
148148 """ ;
@@ -156,9 +156,157 @@ public async Task CastOperator()
156156 var expected3 = Verifier . UnhandledException ( "InvalidCastException" )
157157 . WithSpan ( 11 , 22 , 11 , 27 ) ;
158158
159+ var expected4 = Verifier . UnhandledException ( "FormatException" )
160+ . WithSpan ( 8 , 6 , 8 , 94 ) ;
161+
162+ var expected5 = Verifier . UnhandledException ( "OverflowException" )
163+ . WithSpan ( 8 , 6 , 8 , 94 ) ;
164+
159165 await Verifier . VerifyAnalyzerAsync ( test , setup : o =>
160166 {
161- o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 ) ;
167+ o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 , expected4 , expected5 ) ;
168+ } , executable : true ) ;
169+ }
170+
171+ [ Fact ]
172+ public async Task QueryAsArgument ( )
173+ {
174+ var test = /* lang=c#-test */ """
175+ #nullable enable
176+ using System;
177+ using System.Collections.Generic;
178+ using System.Linq;
179+
180+ IEnumerable<string> items = [];
181+ void Consume(IEnumerable<string> q) { }
182+ Consume(items.Where(x => int.Parse(x) > 0));
183+ """ ;
184+
185+ var expected = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "FormatException" )
186+ . WithSpan ( 8 , 15 , 8 , 43 ) ;
187+
188+ var expected2 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "OverflowException" )
189+ . WithSpan ( 8 , 15 , 8 , 43 ) ;
190+
191+ var expected3 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
192+ . WithArguments ( "FormatException" )
193+ . WithSpan ( 8 , 30 , 8 , 38 ) ;
194+
195+ var expected4 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
196+ . WithArguments ( "OverflowException" )
197+ . WithSpan ( 8 , 30 , 8 , 38 ) ;
198+
199+ await Verifier . VerifyAnalyzerAsync ( test , setup : o =>
200+ {
201+ o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 , expected4 ) ;
202+ } , executable : true ) ;
203+ }
204+
205+ [ Fact ]
206+ public async Task EnumerableAsArgument ( )
207+ {
208+ var test = /* lang=c#-test */ """
209+ #nullable enable
210+ using System;
211+ using System.Collections.Generic;
212+ using System.Linq;
213+
214+ IEnumerable<string> items = [];
215+ void Consume(IEnumerable<string> q) { }
216+ var query = items.Where(x => int.Parse(x) > 0);
217+ Consume(query);
218+ """ ;
219+
220+ var expected = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
221+ . WithArguments ( "FormatException" )
222+ . WithSpan ( 8 , 34 , 8 , 42 ) ;
223+
224+ var expected2 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
225+ . WithArguments ( "OverflowException" )
226+ . WithSpan ( 8 , 34 , 8 , 42 ) ;
227+
228+ var expected3 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "FormatException" )
229+ . WithSpan ( 9 , 9 , 9 , 14 ) ;
230+
231+ var expected4 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "OverflowException" )
232+ . WithSpan ( 9 , 9 , 9 , 14 ) ;
233+
234+ await Verifier . VerifyAnalyzerAsync ( test , setup : o =>
235+ {
236+ o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 , expected4 ) ;
237+ } , executable : true ) ;
238+ }
239+
240+ [ Fact ]
241+ public async Task ReturnQuery ( )
242+ {
243+ var test = /* lang=c#-test */ """
244+ #nullable enable
245+ using System;
246+ using System.Collections.Generic;
247+ using System.Linq;
248+
249+ IEnumerable<string> items = [];
250+ IEnumerable<string> Get()
251+ {
252+ return items.Where(x => int.Parse(x) > 0);
253+ }
254+ """ ;
255+
256+ var expected = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "FormatException" )
257+ . WithSpan ( 9 , 18 , 9 , 46 ) ;
258+
259+ var expected2 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "OverflowException" )
260+ . WithSpan ( 9 , 18 , 9 , 46 ) ;
261+
262+ var expected3 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
263+ . WithArguments ( "FormatException" )
264+ . WithSpan ( 9 , 33 , 9 , 41 ) ;
265+
266+ var expected4 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
267+ . WithArguments ( "OverflowException" )
268+ . WithSpan ( 9 , 33 , 9 , 41 ) ;
269+
270+ await Verifier . VerifyAnalyzerAsync ( test , setup : o =>
271+ {
272+ o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 , expected4 ) ;
273+ } , executable : true ) ;
274+ }
275+
276+ [ Fact ]
277+ public async Task ReturnEnumerable ( )
278+ {
279+ var test = /* lang=c#-test */ """
280+ #nullable enable
281+ using System;
282+ using System.Collections.Generic;
283+ using System.Linq;
284+
285+ IEnumerable<string> items = [];
286+ IEnumerable<string> Get()
287+ {
288+ var query = items.Where(x => int.Parse(x) > 0);
289+ return query;
290+ }
291+ """ ;
292+
293+ var expected = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
294+ . WithArguments ( "FormatException" )
295+ . WithSpan ( 9 , 38 , 9 , 46 ) ;
296+
297+ var expected2 = Verifier . Diagnostic ( CheckedExceptionsAnalyzer . DiagnosticIdImplicitlyDeclaredException )
298+ . WithArguments ( "OverflowException" )
299+ . WithSpan ( 9 , 38 , 9 , 46 ) ;
300+
301+ var expected3 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "FormatException" )
302+ . WithSpan ( 10 , 12 , 10 , 17 ) ;
303+
304+ var expected4 = Verifier . UnhandledExceptionBoundary ( "IEnumerable<string>" , "OverflowException" )
305+ . WithSpan ( 10 , 12 , 10 , 17 ) ;
306+
307+ await Verifier . VerifyAnalyzerAsync ( test , setup : o =>
308+ {
309+ o . ExpectedDiagnostics . AddRange ( expected , expected2 , expected3 , expected4 ) ;
162310 } , executable : true ) ;
163311 }
164312}
0 commit comments