11using System . Threading . Tasks ;
2- using Microsoft . CodeAnalysis ;
2+ using Microsoft . CodeAnalysis . CSharp . Testing ;
33using Microsoft . CodeAnalysis . Testing ;
4+ using Microsoft . CodeAnalysis . Testing . Verifiers ;
45using Xunit ;
5- using VerifyCS = Microsoft . CodeAnalysis . CSharp . Testing . XUnit . AnalyzerVerifier < Bunit . Analyzers . PreferGenericFindAnalyzer > ;
66
77namespace Bunit . Analyzers . Tests ;
88
@@ -12,206 +12,218 @@ public class PreferGenericFindAnalyzerTests
1212 public async Task NoDiagnostic_WhenUsingGenericFind ( )
1313 {
1414 const string code = @"
15- namespace TestNamespace
15+ namespace TestNamespace;
16+
17+ public class TestClass
1618{
17- public class TestClass
19+ public void TestMethod()
1820 {
19- public void TestMethod()
20- {
21- var cut = new TestHelper();
22- var elem = cut.Find<string>(""a"");
23- }
21+ var cut = new TestHelper();
22+ var elem = cut.Find<string>(""a"");
2423 }
24+ }
2525
26- public class TestHelper
27- {
28- public T Find<T>(string selector) => default(T);
29- }
30- } ";
26+ public class TestHelper
27+ {
28+ public T Find<T>(string selector) => default(T);
29+ }
30+ " ;
3131
32- await VerifyCS . VerifyAnalyzerAsync ( code ) ;
32+ await VerifyAnalyzerAsync ( code ) ;
3333 }
3434
3535 [ Fact ]
3636 public async Task NoDiagnostic_WhenCastingNonFindMethod ( )
3737 {
3838 const string code = @"
39- namespace TestNamespace
39+ namespace TestNamespace;
40+
41+ public class TestClass
4042{
41- public class TestClass
43+ public void TestMethod()
4244 {
43- public void TestMethod()
44- {
45- var obj = new TestHelper();
46- var elem = (string)obj.GetSomething();
47- }
45+ var obj = new TestHelper();
46+ var elem = (string)obj.GetSomething();
4847 }
48+ }
4949
50- public class TestHelper
51- {
52- public object GetSomething() => null;
53- }
54- } ";
50+ public class TestHelper
51+ {
52+ public object GetSomething() => null;
53+ }
54+ " ;
5555
56- await VerifyCS . VerifyAnalyzerAsync ( code ) ;
56+ await VerifyAnalyzerAsync ( code ) ;
5757 }
5858
5959 [ Fact ]
6060 public async Task NoDiagnostic_WhenFindIsNotFromRenderedComponent ( )
6161 {
6262 const string code = @"
63- namespace TestNamespace
63+ namespace TestNamespace;
64+
65+ public class TestClass
6466{
65- public class TestClass
67+ public void TestMethod()
6668 {
67- public void TestMethod()
68- {
69- var helper = new UnrelatedHelper();
70- var result = (string)helper.Find(""test"");
71- }
69+ var helper = new UnrelatedHelper();
70+ var result = (string)helper.Find(""test"");
7271 }
72+ }
7373
74- public class UnrelatedHelper
75- {
76- public object Find(string selector) => null;
77- }
78- } ";
74+ public class UnrelatedHelper
75+ {
76+ public object Find(string selector) => null;
77+ }
78+ " ;
7979
80- await VerifyCS . VerifyAnalyzerAsync ( code ) ;
80+ await VerifyAnalyzerAsync ( code ) ;
8181 }
8282
8383 [ Fact ]
8484 public async Task Diagnostic_WhenCastingFindResultFromIRenderedComponent ( )
8585 {
8686 const string code = @"
87- namespace TestNamespace
88- {
89- public interface IMyElement { }
87+ namespace TestNamespace;
9088
91- public class TestClass
92- {
93- public void TestMethod()
94- {
95- var cut = new MockRenderedComponent();
96- IMyElement elem = {|#0:(IMyElement)cut.Find(""a"")|};
97- }
98- }
89+ public interface IMyElement { }
9990
100- public interface IRenderedComponent
91+ public class TestClass
92+ {
93+ public void TestMethod()
10194 {
102- object Find(string selector);
95+ var cut = new MockRenderedComponent();
96+ IMyElement elem = {|#0:(IMyElement)cut.Find(""a"")|};
10397 }
98+ }
10499
105- public class MockRenderedComponent : IRenderedComponent
106- {
107- public object Find(string selector) => null;
108- }
109- }" ;
100+ public interface IRenderedComponent
101+ {
102+ object Find(string selector);
103+ }
110104
111- var expected = VerifyCS . Diagnostic ( DiagnosticDescriptors . PreferGenericFind . Id )
105+ public class MockRenderedComponent : IRenderedComponent
106+ {
107+ public object Find(string selector) => null;
108+ }
109+ " ;
110+
111+ var expected = new DiagnosticResult ( DiagnosticDescriptors . PreferGenericFind )
112112 . WithLocation ( 0 )
113113 . WithArguments ( "IMyElement" , "\" a\" " ) ;
114114
115- await VerifyCS . VerifyAnalyzerAsync ( code , expected ) ;
115+ await VerifyAnalyzerAsync ( code , expected ) ;
116116 }
117117
118118 [ Fact ]
119119 public async Task Diagnostic_WhenCastingFindResultFromRenderedComponent ( )
120120 {
121121 const string code = @"
122- namespace TestNamespace
123- {
124- public interface IMyElement { }
122+ namespace TestNamespace;
125123
126- public class TestClass
127- {
128- public void TestMethod()
129- {
130- var cut = new MockRenderedComponent();
131- var elem = {|#0:(IMyElement)cut.Find(""div"")|};
132- }
133- }
124+ public interface IMyElement { }
134125
135- public interface IRenderedComponent
126+ public class TestClass
127+ {
128+ public void TestMethod()
136129 {
137- object Find(string selector);
130+ var cut = new MockRenderedComponent();
131+ var elem = {|#0:(IMyElement)cut.Find(""div"")|};
138132 }
133+ }
139134
140- public class MockRenderedComponent : IRenderedComponent
141- {
142- public object Find(string selector) => null;
143- }
144- }" ;
135+ public interface IRenderedComponent
136+ {
137+ object Find(string selector);
138+ }
139+
140+ public class MockRenderedComponent : IRenderedComponent
141+ {
142+ public object Find(string selector) => null;
143+ }
144+ " ;
145145
146- var expected = VerifyCS . Diagnostic ( DiagnosticDescriptors . PreferGenericFind . Id )
146+ var expected = new DiagnosticResult ( DiagnosticDescriptors . PreferGenericFind )
147147 . WithLocation ( 0 )
148148 . WithArguments ( "IMyElement" , "\" div\" " ) ;
149149
150- await VerifyCS . VerifyAnalyzerAsync ( code , expected ) ;
150+ await VerifyAnalyzerAsync ( code , expected ) ;
151151 }
152152
153153 [ Fact ]
154154 public async Task Diagnostic_WhenCastingFindResultFromRenderedComponentType ( )
155155 {
156156 const string code = @"
157- namespace TestNamespace
158- {
159- public interface IMyElement { }
157+ namespace TestNamespace;
160158
161- public class TestClass
162- {
163- public void TestMethod()
164- {
165- var cut = new RenderedComponent();
166- var button = {|#0:(IMyElement)cut.Find(""button"")|};
167- }
168- }
159+ public interface IMyElement { }
169160
170- public class RenderedComponent
161+ public class TestClass
162+ {
163+ public void TestMethod()
171164 {
172- public object Find(string selector) => null;
165+ var cut = new RenderedComponent();
166+ var button = {|#0:(IMyElement)cut.Find(""button"")|};
173167 }
174- }" ;
168+ }
169+
170+ public class RenderedComponent
171+ {
172+ public object Find(string selector) => null;
173+ }
174+ " ;
175175
176- var expected = VerifyCS . Diagnostic ( DiagnosticDescriptors . PreferGenericFind . Id )
176+ var expected = new DiagnosticResult ( DiagnosticDescriptors . PreferGenericFind )
177177 . WithLocation ( 0 )
178178 . WithArguments ( "IMyElement" , "\" button\" " ) ;
179179
180- await VerifyCS . VerifyAnalyzerAsync ( code , expected ) ;
180+ await VerifyAnalyzerAsync ( code , expected ) ;
181181 }
182182
183183 [ Fact ]
184184 public async Task Diagnostic_WithComplexSelector ( )
185185 {
186186 const string code = @"
187- namespace TestNamespace
188- {
189- public interface IMyElement { }
187+ namespace TestNamespace;
190188
191- public class TestClass
192- {
193- public void TestMethod()
194- {
195- var cut = new MockRenderedComponent();
196- var link = {|#0:(IMyElement)cut.Find(""a.nav-link[href='/home']"")|};
197- }
198- }
189+ public interface IMyElement { }
199190
200- public interface IRenderedComponent
191+ public class TestClass
192+ {
193+ public void TestMethod()
201194 {
202- object Find(string selector);
195+ var cut = new MockRenderedComponent();
196+ var link = {|#0:(IMyElement)cut.Find(""a.nav-link[href='/home']"")|};
203197 }
198+ }
204199
205- public class MockRenderedComponent : IRenderedComponent
206- {
207- public object Find(string selector) => null;
208- }
209- }" ;
200+ public interface IRenderedComponent
201+ {
202+ object Find(string selector);
203+ }
210204
211- var expected = VerifyCS . Diagnostic ( DiagnosticDescriptors . PreferGenericFind . Id )
205+ public class MockRenderedComponent : IRenderedComponent
206+ {
207+ public object Find(string selector) => null;
208+ }
209+ " ;
210+
211+ var expected = new DiagnosticResult ( DiagnosticDescriptors . PreferGenericFind )
212212 . WithLocation ( 0 )
213213 . WithArguments ( "IMyElement" , "\" a.nav-link[href='/home']\" " ) ;
214214
215- await VerifyCS . VerifyAnalyzerAsync ( code , expected ) ;
215+ await VerifyAnalyzerAsync ( code , expected ) ;
216+ }
217+
218+ private static Task VerifyAnalyzerAsync ( string source , params DiagnosticResult [ ] expected )
219+ {
220+ var test = new CSharpAnalyzerTest < PreferGenericFindAnalyzer , DefaultVerifier >
221+ {
222+ TestCode = source ,
223+ ReferenceAssemblies = ReferenceAssemblies . Net . Net80
224+ } ;
225+
226+ test . ExpectedDiagnostics . AddRange ( expected ) ;
227+ return test . RunAsync ( ) ;
216228 }
217229}
0 commit comments