4
4
using System ;
5
5
using System . Collections . Generic ;
6
6
using System . Linq ;
7
+ using System . Reflection ;
8
+ using System . Threading ;
7
9
using System . Threading . Tasks ;
8
10
using Microsoft . AspNetCore . Components ;
9
11
using Microsoft . AspNetCore . Components . Routing ;
10
12
using Microsoft . AspNetCore . Components . Test . Helpers ;
11
13
using Microsoft . Extensions . DependencyModel ;
14
+ using Moq ;
12
15
using Xunit ;
13
16
14
17
namespace Microsoft . AspNetCore . Components . Test . Routing
15
18
{
16
19
public class RouterTest
17
20
{
18
21
[ Fact ]
19
- public void CanRunOnNavigateViaLocationChangeAsync ( )
22
+ public void CanRunOnNavigateAsync ( )
20
23
{
21
24
// Arrange
22
25
var router = CreateMockRouter ( ) ;
@@ -26,10 +29,10 @@ async Task OnNavigateAsync(NavigationContext args)
26
29
await Task . CompletedTask ;
27
30
called = true ;
28
31
}
29
- router . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
32
+ router . Object . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
30
33
31
34
// Act
32
- router . OnLocationChanged ( null , new LocationChangedEventArgs ( "http://example.com/jan" , false ) ) ;
35
+ router . Object . RunOnNavigateWithRefreshAsync ( "http://example.com/jan" , false ) ;
33
36
34
37
// Assert
35
38
Assert . True ( called ) ;
@@ -46,54 +49,43 @@ async Task OnNavigateAsync(NavigationContext args)
46
49
await Task . CompletedTask ;
47
50
args . CancellationToken . Register ( ( ) => cancelled = args . Path ) ;
48
51
} ;
49
- router . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
52
+ router . Object . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
50
53
51
54
// Act
52
- router . OnLocationChanged ( null , new LocationChangedEventArgs ( "http://example.com/ jan", false ) ) ;
53
- router . OnLocationChanged ( null , new LocationChangedEventArgs ( "http://example.com/ feb", false ) ) ;
55
+ router . Object . RunOnNavigateWithRefreshAsync ( " jan", false ) ;
56
+ router . Object . RunOnNavigateWithRefreshAsync ( " feb", false ) ;
54
57
55
58
// Assert
56
59
var expected = "jan" ;
57
60
Assert . Equal ( cancelled , expected ) ;
58
61
}
59
62
60
63
[ Fact ]
61
- public async Task RefreshesOnceOnCancelledOnNavigateAsync ( )
64
+ public void RefreshesOnceOnCancelledOnNavigateAsync ( )
62
65
{
63
66
// Arrange
64
67
var router = CreateMockRouter ( ) ;
65
68
async Task OnNavigateAsync ( NavigationContext args )
66
69
{
67
70
if ( args . Path . EndsWith ( "jan" ) )
68
71
{
69
- await Task . Delay ( 5000 ) ;
70
- }
71
- if ( args . Path . EndsWith ( "feb" ) )
72
- {
73
- await Task . CompletedTask ;
72
+ await Task . Delay ( Timeout . Infinite ) ;
74
73
}
75
74
} ;
76
- router . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
75
+ router . Object . OnNavigateAsync = new EventCallbackFactory ( ) . Create < NavigationContext > ( router , OnNavigateAsync ) ;
77
76
78
77
// Act
79
- var janTask = router . RunOnNavigateAsync ( "jan" ) ;
80
- var febTask = router . RunOnNavigateAsync ( "feb" ) ;
78
+ router . Object . RunOnNavigateWithRefreshAsync ( "jan" , false ) ;
79
+ router . Object . RunOnNavigateWithRefreshAsync ( "feb" , false ) ;
81
80
82
- await janTask ;
83
- await febTask ;
84
-
85
- // Assert
86
- Assert . False ( janTask . Result ) ;
87
- Assert . True ( febTask . Result ) ;
81
+ // Assert refresh should've only been called once for the second route
82
+ router . Verify ( x => x . Refresh ( It . IsAny < bool > ( ) ) , Times . Once ( ) ) ;
88
83
}
89
84
90
- private Router CreateMockRouter ( )
85
+ private Mock < Router > CreateMockRouter ( )
91
86
{
92
- var router = new Router ( ) ;
93
- var renderer = new TestRenderer ( ) ;
94
- router . _renderHandle = new RenderHandle ( renderer , 0 ) ;
95
- router . Routes = RouteTableFactory . Create ( new [ ] { typeof ( JanComponent ) , typeof ( FebComponent ) } ) ;
96
- router . NavigationManager = new TestNavigationManager ( ) ;
87
+ var router = new Mock < Router > ( ) { CallBase = true } ;
88
+ router . Setup ( x => x . Refresh ( It . IsAny < bool > ( ) ) ) . Verifiable ( ) ;
97
89
return router ;
98
90
}
99
91
@@ -102,23 +94,5 @@ private class JanComponent : ComponentBase { }
102
94
103
95
[ Route ( "feb" ) ]
104
96
private class FebComponent : ComponentBase { }
105
-
106
- private class TestNavigationManager : NavigationManager
107
- {
108
- public TestNavigationManager ( )
109
- {
110
- Initialize ( "http://example.com/" , "http://example.com/months" ) ;
111
- }
112
-
113
- public new void Initialize ( string baseUri , string uri )
114
- {
115
- base . Initialize ( baseUri , uri ) ;
116
- }
117
-
118
- protected override void NavigateToCore ( string uri , bool forceLoad )
119
- {
120
- throw new System . NotImplementedException ( ) ;
121
- }
122
- }
123
97
}
124
98
}
0 commit comments