@@ -20,7 +20,8 @@ public async Task DuplicateRoutes_SameHttpMethod_HasDiagnostics()
20
20
void Hello() { }
21
21
" ;
22
22
23
- var expectedDiagnostics = new [ ] {
23
+ var expectedDiagnostics = new [ ]
24
+ {
24
25
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
25
26
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
26
27
} ;
@@ -43,7 +44,8 @@ public async Task DuplicateRoutes_SameHttpMethod_HasRequestDelegate_HasDiagnosti
43
44
void Hello() { }
44
45
" ;
45
46
46
- var expectedDiagnostics = new [ ] {
47
+ var expectedDiagnostics = new [ ]
48
+ {
47
49
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
48
50
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
49
51
} ;
@@ -71,7 +73,8 @@ void RegisterEndpoints(IEndpointRouteBuilder builder)
71
73
void Hello() { }
72
74
" ;
73
75
74
- var expectedDiagnostics = new [ ] {
76
+ var expectedDiagnostics = new [ ]
77
+ {
75
78
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
76
79
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
77
80
} ;
@@ -140,7 +143,8 @@ public async Task DuplicateRoutes_InsideSwitchStatement_HasDiagnostics()
140
143
void Hello() { }
141
144
" ;
142
145
143
- var expectedDiagnostics = new [ ] {
146
+ var expectedDiagnostics = new [ ]
147
+ {
144
148
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
145
149
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
146
150
} ;
@@ -254,7 +258,8 @@ public async Task DuplicateMapGetRoutes_DuplicatesInsideConditional_NoDiagnostic
254
258
void Hello() { }
255
259
" ;
256
260
257
- var expectedDiagnostics = new [ ] {
261
+ var expectedDiagnostics = new [ ]
262
+ {
258
263
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
259
264
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
260
265
} ;
@@ -361,6 +366,110 @@ void Hello() { }
361
366
await VerifyCS . VerifyAnalyzerAsync ( source ) ;
362
367
}
363
368
369
+ [ Fact ]
370
+ public async Task DuplicateRoutes_MultipleGroups_DirectInvocation_NoDiagnostics ( )
371
+ {
372
+ // Arrange
373
+ var source = @"
374
+ using Microsoft.AspNetCore.Builder;
375
+ var app = WebApplication.Create();
376
+ app.MapGroup(""/group1"").MapGet(""/"", () => { });
377
+ app.MapGroup(""/group2"").MapGet(""/"", () => { });
378
+ " ;
379
+
380
+ // Act & Assert
381
+ await VerifyCS . VerifyAnalyzerAsync ( source ) ;
382
+ }
383
+
384
+ [ Fact ]
385
+ public async Task DuplicateRoutes_SingleGroup_DifferentBuilderVariable_DirectInvocation_NoDiagnostics ( )
386
+ {
387
+ // Arrange
388
+ var source = @"
389
+ using Microsoft.AspNetCore.Builder;
390
+ var app1 = WebApplication.Create();
391
+ var app2 = app1;
392
+ app1.MapGroup(""/group1"").MapGet(""/"", () => { });
393
+ app2.MapGroup(""/group1"").MapGet(""/"", () => { });
394
+ " ;
395
+
396
+ // Act & Assert
397
+ await VerifyCS . VerifyAnalyzerAsync ( source ) ;
398
+ }
399
+
400
+ [ Fact ]
401
+ public async Task DuplicateRoutes_SingleGroup_DirectInvocation_HasDiagnostics ( )
402
+ {
403
+ // Arrange
404
+ var source = @"
405
+ using Microsoft.AspNetCore.Builder;
406
+ var app = WebApplication.Create();
407
+ app.MapGroup(""/group1"").MapGet({|#0:""/""|}, () => { });
408
+ app.MapGroup(""/group1"").MapGet({|#1:""/""|}, () => { });
409
+ " ;
410
+
411
+ // Act & Assert
412
+ var expectedDiagnostics = new [ ]
413
+ {
414
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
415
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
416
+ } ;
417
+
418
+ await VerifyCS . VerifyAnalyzerAsync ( source , expectedDiagnostics ) ;
419
+ }
420
+
421
+ [ Fact ]
422
+ public async Task DuplicateRoutes_SingleGroup_DirectInvocation_InMethod_HasDiagnostics ( )
423
+ {
424
+ // Arrange
425
+ var source = @"
426
+ using Microsoft.AspNetCore.Builder;
427
+ using Microsoft.AspNetCore.Routing;
428
+ var app = WebApplication.Create();
429
+ void RegisterEndpoints(IEndpointRouteBuilder builder)
430
+ {
431
+ builder.MapGroup(""/group1"").MapGet({|#0:""/""|}, () => { });
432
+ builder.MapGroup(""/group1"").MapGet({|#1:""/""|}, () => { });
433
+ }
434
+
435
+ RegisterEndpoints(app);
436
+
437
+ void Hello() { }
438
+ " ;
439
+
440
+ var expectedDiagnostics = new [ ]
441
+ {
442
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
443
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
444
+ } ;
445
+
446
+ // Act & Assert
447
+ await VerifyCS . VerifyAnalyzerAsync ( source , expectedDiagnostics ) ;
448
+ }
449
+
450
+ [ Fact ]
451
+ public async Task DuplicateRoutes_SingleGroup_RoutePattern_DirectInvocation_HasDiagnostics ( )
452
+ {
453
+ // Arrange
454
+ var source = @"
455
+ using Microsoft.AspNetCore.Builder;
456
+ using Microsoft.AspNetCore.Routing.Patterns;
457
+ var routePattern = RoutePatternFactory.Parse(""/group1"");
458
+ var app = WebApplication.Create();
459
+ app.MapGroup(routePattern).MapGet({|#0:""/""|}, () => { });
460
+ app.MapGroup(routePattern).MapGet({|#1:""/""|}, () => { });
461
+ " ;
462
+
463
+ // Act & Assert
464
+ var expectedDiagnostics = new [ ]
465
+ {
466
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
467
+ new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
468
+ } ;
469
+
470
+ await VerifyCS . VerifyAnalyzerAsync ( source , expectedDiagnostics ) ;
471
+ }
472
+
364
473
[ Fact ]
365
474
public async Task DuplicateRoutes_EndpointsOnGroup_HasDiagnostics ( )
366
475
{
@@ -377,7 +486,8 @@ void Hello() { }
377
486
" ;
378
487
379
488
// Act & Assert
380
- var expectedDiagnostics = new [ ] {
489
+ var expectedDiagnostics = new [ ]
490
+ {
381
491
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
382
492
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
383
493
} ;
@@ -409,7 +519,8 @@ public async Task DuplicateRoutes_AllowedBuilderExtensionMethods_HasDiagnostics(
409
519
void Hello() { }
410
520
" ;
411
521
412
- var expectedDiagnostics = new [ ] {
522
+ var expectedDiagnostics = new [ ]
523
+ {
413
524
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 0 ) ,
414
525
new DiagnosticResult ( DiagnosticDescriptors . AmbiguousRouteHandlerRoute ) . WithArguments ( "/" ) . WithLocation ( 1 )
415
526
} ;
@@ -440,4 +551,3 @@ void Hello() { }
440
551
await VerifyCS . VerifyAnalyzerAsync ( source ) ;
441
552
}
442
553
}
443
-
0 commit comments