@@ -15,9 +15,9 @@ import {
1515 xit
1616} from 'angular2/test_lib' ;
1717
18- import { Injector , bind } from 'angular2/di' ;
18+ import { Injector , Inject , bind } from 'angular2/di' ;
1919import { Component , View } from 'angular2/metadata' ;
20- import { CONST , NumberWrapper , isPresent } from 'angular2/src/facade/lang' ;
20+ import { CONST , NumberWrapper , isPresent , Json } from 'angular2/src/facade/lang' ;
2121import {
2222 Promise ,
2323 PromiseWrapper ,
@@ -28,7 +28,7 @@ import {
2828
2929import { RootRouter } from 'angular2/src/router/router' ;
3030import { Pipeline } from 'angular2/src/router/pipeline' ;
31- import { Router , RouterOutlet , RouterLink , RouteParams } from 'angular2/router' ;
31+ import { Router , RouterOutlet , RouterLink , RouteParams , ROUTE_DATA } from 'angular2/router' ;
3232import {
3333 RouteConfig ,
3434 Route ,
@@ -253,6 +253,91 @@ export function main() {
253253 } ) ;
254254 } ) ) ;
255255
256+ it ( 'should inject RouteData into component' , inject ( [ AsyncTestCompleter ] , ( async ) => {
257+ compile ( )
258+ . then ( ( _ ) => rtr . config ( [
259+ new Route ( { path : '/route-data' , component : RouteDataCmp , data : { 'isAdmin' : true } } )
260+ ] ) )
261+ . then ( ( _ ) => rtr . navigate ( '/route-data' ) )
262+ . then ( ( _ ) => {
263+ rootTC . detectChanges ( ) ;
264+ expect ( rootTC . nativeElement ) . toHaveText ( Json . stringify ( { 'isAdmin' : true } ) ) ;
265+ async . done ( ) ;
266+ } ) ;
267+ } ) ) ;
268+
269+ it ( 'should inject RouteData into component with AsyncRoute' ,
270+ inject ( [ AsyncTestCompleter ] , ( async ) => {
271+ compile ( )
272+ . then ( ( _ ) => rtr . config ( [
273+ new AsyncRoute (
274+ { path : '/route-data' , loader : AsyncRouteDataCmp , data : { isAdmin : true } } )
275+ ] ) )
276+ . then ( ( _ ) => rtr . navigate ( '/route-data' ) )
277+ . then ( ( _ ) => {
278+ rootTC . detectChanges ( ) ;
279+ expect ( rootTC . nativeElement ) . toHaveText ( Json . stringify ( { 'isAdmin' : true } ) ) ;
280+ async . done ( ) ;
281+ } ) ;
282+ } ) ) ;
283+
284+ it ( 'should inject nested RouteData into component' , inject ( [ AsyncTestCompleter ] , ( async ) => {
285+ compile ( )
286+ . then ( ( _ ) => rtr . config ( [
287+ new Route ( {
288+ path : '/route-data-nested' ,
289+ component : RouteDataCmp ,
290+ data : { 'isAdmin' : true , 'test' : { 'moreData' : 'testing' } }
291+ } )
292+ ] ) )
293+ . then ( ( _ ) => rtr . navigate ( '/route-data-nested' ) )
294+ . then ( ( _ ) => {
295+ rootTC . detectChanges ( ) ;
296+ expect ( rootTC . nativeElement )
297+ . toHaveText ( Json . stringify ( { 'isAdmin' : true , 'test' : { 'moreData' : 'testing' } } ) ) ;
298+ async . done ( ) ;
299+ } ) ;
300+ } ) ) ;
301+
302+ it ( 'should inject null if the route has no data property' ,
303+ inject ( [ AsyncTestCompleter ] , ( async ) => {
304+ compile ( )
305+ . then ( ( _ ) => rtr . config (
306+ [ new Route ( { path : '/route-data-default' , component : RouteDataCmp } ) ] ) )
307+ . then ( ( _ ) => rtr . navigate ( '/route-data-default' ) )
308+ . then ( ( _ ) => {
309+ rootTC . detectChanges ( ) ;
310+ expect ( rootTC . nativeElement ) . toHaveText ( 'null' ) ;
311+ async . done ( ) ;
312+ } ) ;
313+ } ) ) ;
314+
315+ it ( 'should allow an array as the route data' , inject ( [ AsyncTestCompleter ] , ( async ) => {
316+ compile ( )
317+ . then ( ( _ ) => rtr . config ( [
318+ new Route ( { path : '/route-data-array' , component : RouteDataCmp , data : [ 1 , 2 , 3 ] } )
319+ ] ) )
320+ . then ( ( _ ) => rtr . navigate ( '/route-data-array' ) )
321+ . then ( ( _ ) => {
322+ rootTC . detectChanges ( ) ;
323+ expect ( rootTC . nativeElement ) . toHaveText ( Json . stringify ( [ 1 , 2 , 3 ] ) ) ;
324+ async . done ( ) ;
325+ } ) ;
326+ } ) ) ;
327+
328+ it ( 'should allow a string as the route data' , inject ( [ AsyncTestCompleter ] , ( async ) => {
329+ compile ( )
330+ . then ( ( _ ) => rtr . config ( [
331+ new Route (
332+ { path : '/route-data-string' , component : RouteDataCmp , data : 'hello world' } )
333+ ] ) )
334+ . then ( ( _ ) => rtr . navigate ( '/route-data-string' ) )
335+ . then ( ( _ ) => {
336+ rootTC . detectChanges ( ) ;
337+ expect ( rootTC . nativeElement ) . toHaveText ( Json . stringify ( 'hello world' ) ) ;
338+ async . done ( ) ;
339+ } ) ;
340+ } ) ) ;
256341
257342 describe ( 'lifecycle hooks' , ( ) => {
258343 it ( 'should call the onActivate hook' , inject ( [ AsyncTestCompleter ] , ( async ) => {
@@ -633,6 +718,19 @@ class B {
633718}
634719
635720
721+ function AsyncRouteDataCmp ( ) {
722+ return PromiseWrapper . resolve ( RouteDataCmp ) ;
723+ }
724+
725+ @Component ( { selector : 'data-cmp' } )
726+ @View ( { template : "{{myData}}" } )
727+ class RouteDataCmp {
728+ myData : string ;
729+ constructor ( @Inject ( ROUTE_DATA ) data : any ) {
730+ this . myData = isPresent ( data ) ? Json . stringify ( data ) : 'null' ;
731+ }
732+ }
733+
636734@Component ( { selector : 'user-cmp' } )
637735@View ( { template : "hello {{user}}" } )
638736class UserCmp {
0 commit comments