@@ -18,10 +18,13 @@ describe('state', function () {
18
18
D = { params : [ 'x' , 'y' ] } ,
19
19
DD = { parent : D , params : [ 'x' , 'y' , 'z' ] } ,
20
20
E = { params : [ 'i' ] } ,
21
+ H = { data : { propA : 'propA' , propB : 'propB' } } ,
22
+ HH = { parent : H } ,
23
+ HHH = { parent : HH , data : { propA : 'overriddenA' , propC : 'propC' } }
21
24
AppInjectable = { } ;
22
25
23
26
beforeEach ( module ( function ( $stateProvider , $provide ) {
24
- angular . forEach ( [ A , B , C , D , DD , E ] , function ( state ) {
27
+ angular . forEach ( [ A , B , C , D , DD , E , H , HH , HHH ] , function ( state ) {
25
28
state . onEnter = callbackLogger ( 'onEnter' ) ;
26
29
state . onExit = callbackLogger ( 'onExit' ) ;
27
30
} ) ;
@@ -33,6 +36,9 @@ describe('state', function () {
33
36
. state ( 'D' , D )
34
37
. state ( 'DD' , DD )
35
38
. state ( 'E' , E )
39
+ . state ( 'H' , H )
40
+ . state ( 'HH' , HH )
41
+ . state ( 'HHH' , HHH )
36
42
37
43
. state ( 'home' , { url : "/" } )
38
44
. state ( 'home.item' , { url : "front/:id" } )
@@ -275,4 +281,30 @@ describe('state', function () {
275
281
expect ( $state . href ( "about.person.item" , { person : "bob" , id : null } ) ) . toEqual ( "/about/bob/" ) ;
276
282
} ) ) ;
277
283
} ) ;
284
+
285
+ describe ( ' "data" property inheritance/override' , function ( ) {
286
+ it ( '"data" property should stay immutable for if state doesn\'t have parent' , inject ( function ( $state ) {
287
+ initStateTo ( H ) ;
288
+ expect ( $state . current . name ) . toEqual ( 'H' ) ;
289
+ expect ( $state . current . data . propA ) . toEqual ( H . data . propA ) ;
290
+ expect ( $state . current . data . propB ) . toEqual ( H . data . propB ) ;
291
+ } ) ) ;
292
+
293
+ it ( '"data" property should be inherited from parent if state doesn\'t define it' , inject ( function ( $state ) {
294
+ initStateTo ( HH ) ;
295
+ expect ( $state . current . name ) . toEqual ( 'HH' ) ;
296
+ expect ( $state . current . data . propA ) . toEqual ( H . data . propA ) ;
297
+ expect ( $state . current . data . propB ) . toEqual ( H . data . propB ) ;
298
+ } ) ) ;
299
+
300
+ it ( '"data" property should be overridden/extended if state defines it' , inject ( function ( $state ) {
301
+ initStateTo ( HHH ) ;
302
+ expect ( $state . current . name ) . toEqual ( 'HHH' ) ;
303
+ expect ( $state . current . data . propA ) . toEqual ( HHH . data . propA ) ;
304
+ expect ( $state . current . data . propB ) . toEqual ( H . data . propB ) ;
305
+ expect ( $state . current . data . propB ) . toEqual ( HH . data . propB ) ;
306
+ expect ( $state . current . data . propC ) . toEqual ( HHH . data . propC ) ;
307
+ } ) ) ;
308
+ } ) ;
309
+
278
310
} ) ;
0 commit comments