@@ -97,6 +97,79 @@ void Hello() { }
97
97
await VerifyCS . VerifyAnalyzerAsync ( source ) ;
98
98
}
99
99
100
+ [ Fact ]
101
+ public async Task DuplicateRoutes_SwitchStatement_NoDiagnostics ( )
102
+ {
103
+ // Arrange
104
+ var source = @"
105
+ using System;
106
+ using Microsoft.AspNetCore.Builder;
107
+ var app = WebApplication.Create();
108
+ switch (Random.Shared.Next())
109
+ {
110
+ case 0:
111
+ app.MapGet(""/"", () => Hello());
112
+ return;
113
+ case 1:
114
+ app.MapGet(""/"", () => Hello());
115
+ return;
116
+ }
117
+ void Hello() { }
118
+ " ;
119
+
120
+ // Act & Assert
121
+ await VerifyCS . VerifyAnalyzerAsync ( source ) ;
122
+ }
123
+
124
+ [ Fact ]
125
+ public async Task DuplicateRoutes_InsideSwitchStatement_HasDiagnostics ( )
126
+ {
127
+ // Arrange
128
+ var source = @"
129
+ using System;
130
+ using Microsoft.AspNetCore.Builder;
131
+ var app = WebApplication.Create();
132
+ switch (Random.Shared.Next())
133
+ {
134
+ case 0:
135
+ app.MapGet({|#0:""/""|}, () => Hello());
136
+ app.MapGet({|#1:""/""|}, () => Hello());
137
+ return;
138
+
139
+ }
140
+ void Hello() { }
141
+ " ;
142
+
143
+ var expectedDiagnostics = new [ ] {
144
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
145
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
146
+ } ;
147
+
148
+ // Act & Assert
149
+ await VerifyCS . VerifyAnalyzerAsync ( source , expectedDiagnostics ) ;
150
+ }
151
+
152
+ [ Fact ]
153
+ public async Task DuplicateRoutes_SwitchExpression_NoDiagnostics ( )
154
+ {
155
+ // Arrange
156
+ var source = @"
157
+ using System;
158
+ using Microsoft.AspNetCore.Builder;
159
+ var app = WebApplication.Create();
160
+ _ = Random.Shared.Next() switch
161
+ {
162
+ 0 => app.MapGet(""/"", () => Hello()),
163
+ 1 => app.MapGet(""/"", () => Hello()),
164
+ _ => throw new Exception()
165
+ };
166
+ void Hello() { }
167
+ " ;
168
+
169
+ // Act & Assert
170
+ await VerifyCS . VerifyAnalyzerAsync ( source ) ;
171
+ }
172
+
100
173
[ Fact ]
101
174
public async Task DuplicateRoutes_NullCoalescing_NoDiagnostics ( )
102
175
{
@@ -166,6 +239,30 @@ void Hello() { }
166
239
await VerifyCS . VerifyAnalyzerAsync ( source ) ;
167
240
}
168
241
242
+ [ Fact ]
243
+ public async Task DuplicateMapGetRoutes_DuplicatesInsideConditional_NoDiagnostics ( )
244
+ {
245
+ // Arrange
246
+ var source = @"
247
+ using Microsoft.AspNetCore.Builder;
248
+ var app = WebApplication.Create();
249
+ if (true)
250
+ {
251
+ app.MapGet({|#0:""/""|}, () => Hello());
252
+ app.MapGet({|#1:""/""|}, () => Hello());
253
+ }
254
+ void Hello() { }
255
+ " ;
256
+
257
+ var expectedDiagnostics = new [ ] {
258
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
259
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
260
+ } ;
261
+
262
+ // Act & Assert
263
+ await VerifyCS . VerifyAnalyzerAsync ( source , expectedDiagnostics ) ;
264
+ }
265
+
169
266
[ Fact ]
170
267
public async Task DuplicateRoutes_UnknownUsageOfEndConventionBuilderExtension_NoDiagnostics ( )
171
268
{
0 commit comments