@@ -12,116 +12,143 @@ import {
12
12
inject ,
13
13
beforeEachProviders ,
14
14
it ,
15
- xit
15
+ xit ,
16
+ fakeAsync ,
17
+ tick
16
18
} from 'angular2/testing_internal' ;
17
19
import { provide , Component , ComponentResolver } from 'angular2/core' ;
18
20
21
+
19
22
import {
20
23
Router ,
21
24
RouterOutletMap ,
22
25
RouteSegment ,
23
26
Route ,
24
27
ROUTER_DIRECTIVES ,
25
28
Routes ,
26
- RouterUrlParser ,
27
- DefaultRouterUrlParser ,
29
+ RouterUrlSerializer ,
30
+ DefaultRouterUrlSerializer ,
28
31
OnActivate
29
32
} from 'angular2/alt_router' ;
33
+ import { DOM } from 'angular2/src/platform/dom/dom_adapter' ;
30
34
31
35
export function main ( ) {
32
36
describe ( 'navigation' , ( ) => {
33
37
beforeEachProviders ( ( ) => [
34
- provide ( RouterUrlParser , { useClass : DefaultRouterUrlParser } ) ,
38
+ provide ( RouterUrlSerializer , { useClass : DefaultRouterUrlSerializer } ) ,
35
39
RouterOutletMap ,
36
40
provide ( Router ,
37
41
{
38
42
useFactory : ( resolver , urlParser , outletMap ) =>
39
43
new Router ( RootCmp , resolver , urlParser , outletMap ) ,
40
- deps : [ ComponentResolver , RouterUrlParser , RouterOutletMap ]
44
+ deps : [ ComponentResolver , RouterUrlSerializer , RouterOutletMap ]
41
45
} )
42
46
] ) ;
43
47
44
48
it ( 'should support nested routes' ,
45
- inject ( [ AsyncTestCompleter , Router , TestComponentBuilder ] , ( async , router , tcb ) => {
46
- let fixture ;
47
- compileRoot ( tcb )
48
- . then ( ( rtc ) => { fixture = rtc } )
49
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor' ) )
50
- . then ( ( _ ) => {
51
- fixture . detectChanges ( ) ;
52
- expect ( fixture . debugElement . nativeElement )
53
- . toHaveText ( 'team 22 { hello victor, aux: }' ) ;
54
- async . done ( ) ;
55
- } ) ;
56
- } ) ) ;
49
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
50
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
51
+
52
+ router . navigateByUrl ( '/team/22/user/victor' ) ;
53
+ advance ( fixture ) ;
54
+
55
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 22 { hello victor, aux: }' ) ;
56
+ } ) ) ) ;
57
57
58
58
it ( 'should support aux routes' ,
59
- inject ( [ AsyncTestCompleter , Router , TestComponentBuilder ] , ( async , router , tcb ) => {
60
- let fixture ;
61
- compileRoot ( tcb )
62
- . then ( ( rtc ) => { fixture = rtc } )
63
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor(/simple)' ) )
64
- . then ( ( _ ) => {
65
- fixture . detectChanges ( ) ;
66
- expect ( fixture . debugElement . nativeElement )
67
- . toHaveText ( 'team 22 { hello victor, aux: simple }' ) ;
68
- async . done ( ) ;
69
- } ) ;
70
- } ) ) ;
71
-
72
- it ( 'should unload outlets' ,
73
- inject ( [ AsyncTestCompleter , Router , TestComponentBuilder ] , ( async , router , tcb ) => {
74
- let fixture ;
75
- compileRoot ( tcb )
76
- . then ( ( rtc ) => { fixture = rtc } )
77
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor(/simple)' ) )
78
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor' ) )
79
- . then ( ( _ ) => {
80
- fixture . detectChanges ( ) ;
81
- expect ( fixture . debugElement . nativeElement )
82
- . toHaveText ( 'team 22 { hello victor, aux: }' ) ;
83
- async . done ( ) ;
84
- } ) ;
85
- } ) ) ;
59
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
60
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
61
+
62
+ router . navigateByUrl ( '/team/22/user/victor(/simple)' ) ;
63
+ advance ( fixture ) ;
64
+
65
+ expect ( fixture . debugElement . nativeElement )
66
+ . toHaveText ( 'team 22 { hello victor, aux: simple }' ) ;
67
+ } ) ) ) ;
68
+
69
+ it ( 'should unload outlets' , fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
70
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
71
+
72
+ router . navigateByUrl ( '/team/22/user/victor(/simple)' ) ;
73
+ advance ( fixture ) ;
74
+
75
+ router . navigateByUrl ( '/team/22/user/victor' ) ;
76
+ advance ( fixture ) ;
77
+
78
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 22 { hello victor, aux: }' ) ;
79
+ } ) ) ) ;
86
80
87
81
it ( 'should unload nested outlets' ,
88
- inject ( [ AsyncTestCompleter , Router , TestComponentBuilder ] , ( async , router , tcb ) => {
89
- let fixture ;
90
- compileRoot ( tcb )
91
- . then ( ( rtc ) => { fixture = rtc } )
92
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor(/simple)' ) )
93
- . then ( ( _ ) => router . navigateByUrl ( '/' ) )
94
- . then ( ( _ ) => {
95
- fixture . detectChanges ( ) ;
96
- expect ( fixture . debugElement . nativeElement ) . toHaveText ( '' ) ;
97
- async . done ( ) ;
98
- } ) ;
99
- } ) ) ;
82
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
83
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
84
+
85
+ router . navigateByUrl ( '/team/22/user/victor(/simple)' ) ;
86
+ advance ( fixture ) ;
87
+
88
+ router . navigateByUrl ( '/' ) ;
89
+ advance ( fixture ) ;
90
+
91
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( '' ) ;
92
+ } ) ) ) ;
100
93
101
94
it ( 'should update nested routes when url changes' ,
102
- inject ( [ AsyncTestCompleter , Router , TestComponentBuilder ] , ( async , router , tcb ) => {
103
- let fixture ;
104
- let team1 ;
105
- let team2 ;
106
- compileRoot ( tcb )
107
- . then ( ( rtc ) => { fixture = rtc } )
108
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/victor' ) )
109
- . then ( ( _ ) => { team1 = fixture . debugElement . children [ 1 ] . componentInstance ; } )
110
- . then ( ( _ ) => router . navigateByUrl ( '/team/22/user/fedor' ) )
111
- . then ( ( _ ) => { team2 = fixture . debugElement . children [ 1 ] . componentInstance ; } )
112
- . then ( ( _ ) => {
113
- fixture . detectChanges ( ) ;
114
- expect ( team1 ) . toBe ( team2 ) ;
115
- expect ( fixture . debugElement . nativeElement )
116
- . toHaveText ( 'team 22 { hello fedor, aux: }' ) ;
117
- async . done ( ) ;
118
- } ) ;
119
- } ) ) ;
120
-
121
- // unload unused nodes
95
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
96
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
97
+
98
+ router . navigateByUrl ( '/team/22/user/victor' ) ;
99
+ advance ( fixture ) ;
100
+ let team1 = fixture . debugElement . children [ 1 ] . componentInstance ;
101
+
102
+ router . navigateByUrl ( '/team/22/user/fedor' ) ;
103
+ advance ( fixture ) ;
104
+ let team2 = fixture . debugElement . children [ 1 ] . componentInstance ;
105
+
106
+ expect ( team1 ) . toBe ( team2 ) ;
107
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 22 { hello fedor, aux: }' ) ;
108
+ } ) ) ) ;
109
+
110
+ it ( "should support router links" ,
111
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
112
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
113
+ advance ( fixture ) ;
114
+
115
+ router . navigateByUrl ( '/team/22/link' ) ;
116
+ advance ( fixture ) ;
117
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 22 { link, aux: }' ) ;
118
+
119
+ let native = DOM . querySelector ( fixture . debugElement . nativeElement , "a" ) ;
120
+ expect ( DOM . getAttribute ( native , "href" ) ) . toEqual ( "/team/33/simple" ) ;
121
+ DOM . dispatchEvent ( native , DOM . createMouseEvent ( 'click' ) ) ;
122
+ advance ( fixture ) ;
123
+
124
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 33 { simple, aux: }' ) ;
125
+ } ) ) ) ;
126
+
127
+ it ( "should update router links when router changes" ,
128
+ fakeAsync ( inject ( [ Router , TestComponentBuilder ] , ( router , tcb ) => {
129
+ let fixture = tcb . createFakeAsync ( RootCmp ) ;
130
+ advance ( fixture ) ;
131
+
132
+ router . navigateByUrl ( '/team/22/link(simple)' ) ;
133
+ advance ( fixture ) ;
134
+ expect ( fixture . debugElement . nativeElement ) . toHaveText ( 'team 22 { link, aux: simple }' ) ;
135
+
136
+ let native = DOM . querySelector ( fixture . debugElement . nativeElement , "a" ) ;
137
+ expect ( DOM . getAttribute ( native , "href" ) ) . toEqual ( "/team/33/simple(aux:simple)" ) ;
138
+
139
+ router . navigateByUrl ( '/team/22/link(simple2)' ) ;
140
+ advance ( fixture ) ;
141
+
142
+ expect ( DOM . getAttribute ( native , "href" ) ) . toEqual ( "/team/33/simple(aux:simple2)" ) ;
143
+ } ) ) ) ;
122
144
} ) ;
123
145
}
124
146
147
+ function advance ( fixture : ComponentFixture ) : void {
148
+ tick ( ) ;
149
+ fixture . detectChanges ( ) ;
150
+ }
151
+
125
152
function compileRoot ( tcb : TestComponentBuilder ) : Promise < ComponentFixture > {
126
153
return tcb . createAsync ( RootCmp ) ;
127
154
}
@@ -136,14 +163,28 @@ class UserCmp implements OnActivate {
136
163
class SimpleCmp {
137
164
}
138
165
166
+ @Component ( { selector : 'simple2-cmp' , template : `simple2` } )
167
+ class Simple2Cmp {
168
+ }
169
+
170
+ @Component ( {
171
+ selector : 'link-cmp' ,
172
+ template : `<a [routerLink]="['team', '33', 'simple']">link</a>` ,
173
+ directives : ROUTER_DIRECTIVES
174
+ } )
175
+ class LinkCmp {
176
+ }
177
+
139
178
@Component ( {
140
179
selector : 'team-cmp' ,
141
180
template : `team {{id}} { <router-outlet></router-outlet>, aux: <router-outlet name="aux"></router-outlet> }` ,
142
181
directives : [ ROUTER_DIRECTIVES ]
143
182
} )
144
183
@Routes ( [
145
184
new Route ( { path : 'user/:name' , component : UserCmp } ) ,
146
- new Route ( { path : 'simple' , component : SimpleCmp } )
185
+ new Route ( { path : 'simple' , component : SimpleCmp } ) ,
186
+ new Route ( { path : 'simple2' , component : Simple2Cmp } ) ,
187
+ new Route ( { path : 'link' , component : LinkCmp } )
147
188
] )
148
189
class TeamCmp implements OnActivate {
149
190
id : string ;
0 commit comments