1010using Microsoft . Extensions . DependencyInjection ;
1111using Microsoft . Extensions . Logging ;
1212using Microsoft . Extensions . Logging . Abstractions ;
13- using Moq ;
1413using Xunit ;
15- using Microsoft . AspNetCore . Components ;
1614
1715namespace Microsoft . AspNetCore . Components . Test . Routing
1816{
@@ -42,109 +40,61 @@ public async Task CanRunOnNavigateAsync()
4240 {
4341 // Arrange
4442 var called = false ;
45- async Task OnNavigateAsync ( NavigationContext args )
43+ Action < NavigationContext > OnNavigateAsync = async ( NavigationContext args ) =>
4644 {
4745 await Task . CompletedTask ;
4846 called = true ;
49- }
50- _router . OnNavigateAsync = OnNavigateAsync ;
51-
52- // Act
53- await _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
54-
55- // Assert
56- Assert . True ( called ) ;
57- }
58-
59- [ Fact ]
60- public async Task CanHandleSingleFailedOnNavigateAsync ( )
61- {
62- // Arrange
63- var called = false ;
64- async Task OnNavigateAsync ( NavigationContext args )
65- {
66- called = true ;
67- await Task . CompletedTask ;
68- throw new Exception ( "This is an uncaught exception." ) ;
69- }
70- _router . OnNavigateAsync = OnNavigateAsync ;
47+ } ;
48+ _router . OnNavigateAsync = new EventCallback < NavigationContext > ( null , OnNavigateAsync ) ;
7149
7250 // Act
73- await _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
51+ await _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/jan" , false ) ) ;
7452
7553 // Assert
7654 Assert . True ( called ) ;
77- Assert . Single ( _renderer . HandledExceptions ) ;
78- var unhandledException = _renderer . HandledExceptions [ 0 ] ;
79- Assert . Equal ( "This is an uncaught exception." , unhandledException . Message ) ;
8055 }
8156
8257 [ Fact ]
8358 public async Task CanceledFailedOnNavigateAsyncDoesNothing ( )
8459 {
8560 // Arrange
8661 var onNavigateInvoked = 0 ;
87- async Task OnNavigateAsync ( NavigationContext args )
62+ Action < NavigationContext > OnNavigateAsync = async ( NavigationContext args ) =>
8863 {
8964 onNavigateInvoked += 1 ;
9065 if ( args . Path . EndsWith ( "jan" ) )
9166 {
9267 await Task . Delay ( Timeout . Infinite , args . CancellationToken ) ;
9368 throw new Exception ( "This is an uncaught exception." ) ;
9469 }
95- }
96- var refreshCalled = false ;
70+ } ;
71+ var refreshCalled = 0 ;
9772 _renderer . OnUpdateDisplay = ( renderBatch ) =>
9873 {
99- if ( ! refreshCalled )
100- {
101- refreshCalled = true ;
102- return ;
103- }
104- Assert . True ( false , "OnUpdateDisplay called more than once." ) ;
74+ refreshCalled += 1 ;
75+ return ;
10576 } ;
106- _router . OnNavigateAsync = OnNavigateAsync ;
77+ _router . OnNavigateAsync = new EventCallback < NavigationContext > ( null , OnNavigateAsync ) ;
10778
10879 // Act
109- var janTask = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
110- var febTask = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/feb" , false ) ) ;
80+ var janTask = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/jan" , false ) ) ;
81+ var febTask = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/feb" , false ) ) ;
11182
11283 await janTask ;
11384 await febTask ;
11485
11586 // Assert that we render the second route component and don't throw an exception
11687 Assert . Empty ( _renderer . HandledExceptions ) ;
11788 Assert . Equal ( 2 , onNavigateInvoked ) ;
118- }
119-
120- [ Fact ]
121- public async Task CanHandleSingleCancelledOnNavigateAsync ( )
122- {
123- // Arrange
124- async Task OnNavigateAsync ( NavigationContext args )
125- {
126- var tcs = new TaskCompletionSource < int > ( ) ;
127- tcs . TrySetCanceled ( ) ;
128- await tcs . Task ;
129- }
130- _renderer . OnUpdateDisplay = ( renderBatch ) => Assert . True ( false , "OnUpdateDisplay called more than once." ) ;
131- _router . OnNavigateAsync = OnNavigateAsync ;
132-
133- // Act
134- await _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
135-
136- // Assert
137- Assert . Single ( _renderer . HandledExceptions ) ;
138- var unhandledException = _renderer . HandledExceptions [ 0 ] ;
139- Assert . Equal ( "OnNavigateAsync can only be cancelled via NavigateContext.CancellationToken." , unhandledException . Message ) ;
89+ Assert . Equal ( 2 , refreshCalled ) ;
14090 }
14191
14292 [ Fact ]
14393 public async Task AlreadyCanceledOnNavigateAsyncDoesNothing ( )
14494 {
14595 // Arrange
14696 var triggerCancel = new TaskCompletionSource ( ) ;
147- async Task OnNavigateAsync ( NavigationContext args )
97+ Action < NavigationContext > OnNavigateAsync = async ( NavigationContext args ) =>
14898 {
14999 if ( args . Path . EndsWith ( "jan" ) )
150100 {
@@ -153,7 +103,7 @@ async Task OnNavigateAsync(NavigationContext args)
153103 tcs . TrySetCanceled ( ) ;
154104 await tcs . Task ;
155105 }
156- }
106+ } ;
157107 var refreshCalled = false ;
158108 _renderer . OnUpdateDisplay = ( renderBatch ) =>
159109 {
@@ -164,11 +114,11 @@ async Task OnNavigateAsync(NavigationContext args)
164114 }
165115 Assert . True ( false , "OnUpdateDisplay called more than once." ) ;
166116 } ;
167- _router . OnNavigateAsync = OnNavigateAsync ;
117+ _router . OnNavigateAsync = new EventCallback < NavigationContext > ( null , OnNavigateAsync ) ;
168118
169119 // Act (start the operations then await them)
170- var jan = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
171- var feb = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/feb" , false ) ) ;
120+ var jan = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/jan" , false ) ) ;
121+ var feb = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/feb" , false ) ) ;
172122 triggerCancel . TrySetResult ( ) ;
173123
174124 await jan ;
@@ -180,16 +130,16 @@ public void CanCancelPreviousOnNavigateAsync()
180130 {
181131 // Arrange
182132 var cancelled = "" ;
183- async Task OnNavigateAsync ( NavigationContext args )
133+ Action < NavigationContext > OnNavigateAsync = async ( NavigationContext args ) =>
184134 {
185135 await Task . CompletedTask ;
186136 args . CancellationToken . Register ( ( ) => cancelled = args . Path ) ;
187137 } ;
188- _router . OnNavigateAsync = OnNavigateAsync ;
138+ _router . OnNavigateAsync = new EventCallback < NavigationContext > ( null , OnNavigateAsync ) ;
189139
190140 // Act
191- _ = _router . RunOnNavigateWithRefreshAsync ( "jan" , false ) ;
192- _ = _router . RunOnNavigateWithRefreshAsync ( "feb" , false ) ;
141+ _ = _router . RunOnNavigateAsync ( "jan" , false ) ;
142+ _ = _router . RunOnNavigateAsync ( "feb" , false ) ;
193143
194144 // Assert
195145 var expected = "jan" ;
@@ -200,7 +150,7 @@ async Task OnNavigateAsync(NavigationContext args)
200150 public async Task RefreshesOnceOnCancelledOnNavigateAsync ( )
201151 {
202152 // Arrange
203- async Task OnNavigateAsync ( NavigationContext args )
153+ Action < NavigationContext > OnNavigateAsync = async ( NavigationContext args ) =>
204154 {
205155 if ( args . Path . EndsWith ( "jan" ) )
206156 {
@@ -217,11 +167,11 @@ async Task OnNavigateAsync(NavigationContext args)
217167 }
218168 Assert . True ( false , "OnUpdateDisplay called more than once." ) ;
219169 } ;
220- _router . OnNavigateAsync = OnNavigateAsync ;
170+ _router . OnNavigateAsync = new EventCallback < NavigationContext > ( null , OnNavigateAsync ) ;
221171
222172 // Act
223- var jan = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ) ;
224- var feb = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateWithRefreshAsync ( "http://example.com/feb" , false ) ) ;
173+ var jan = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/jan" , false ) ) ;
174+ var feb = _renderer . Dispatcher . InvokeAsync ( ( ) => _router . RunOnNavigateAsync ( "http://example.com/feb" , false ) ) ;
225175
226176 await jan ;
227177 await feb ;
0 commit comments