'use strict'; var NavigationStateUtils=require('../NavigationStateUtils'); describe('NavigationStateUtils',function(){ it('gets route',function(){ var state={index:0,routes:[{key:'a'}]}; expect(NavigationStateUtils.get(state,'a')).toEqual({key:'a'}); expect(NavigationStateUtils.get(state,'b')).toBe(null); }); it('gets route index',function(){ var state={index:1,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.indexOf(state,'a')).toBe(0); expect(NavigationStateUtils.indexOf(state,'b')).toBe(1); expect(NavigationStateUtils.indexOf(state,'c')).toBe(-1); }); it('has a route',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.has(state,'b')).toBe(true); expect(NavigationStateUtils.has(state,'c')).toBe(false); }); it('pushes a route',function(){ var state={index:0,routes:[{key:'a'}]}; var newState={index:1,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.push(state,{key:'b'})).toEqual(newState); }); it('does not push duplicated route',function(){ var state={index:0,routes:[{key:'a'}]}; expect(function(){return NavigationStateUtils.push(state,{key:'a'});}).toThrow(); }); it('pops route',function(){ var state={index:1,routes:[{key:'a'},{key:'b'}]}; var newState={index:0,routes:[{key:'a'}]}; expect(NavigationStateUtils.pop(state)).toEqual(newState); }); it('does not pop route if not applicable',function(){ var state={index:0,routes:[{key:'a'}]}; expect(NavigationStateUtils.pop(state)).toBe(state); }); it('jumps to new index',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.jumpToIndex(state,0)).toBe(state); expect(NavigationStateUtils.jumpToIndex(state,1)).toEqual(newState); }); it('throws if jumps to invalid index',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; expect(function(){return NavigationStateUtils.jumpToIndex(state,2);}).toThrow(); }); it('jumps to new key',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.jumpTo(state,'a')).toBe(state); expect(NavigationStateUtils.jumpTo(state,'b')).toEqual(newState); }); it('throws if jumps to invalid key',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; expect(function(){return NavigationStateUtils.jumpTo(state,'c');}).toThrow(); }); it('move backwards',function(){ var state={index:1,routes:[{key:'a'},{key:'b'}]}; var newState={index:0,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.back(state)).toEqual(newState); expect(NavigationStateUtils.back(newState)).toBe(newState); }); it('move forwards',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'a'},{key:'b'}]}; expect(NavigationStateUtils.forward(state)).toEqual(newState); expect(NavigationStateUtils.forward(newState)).toBe(newState); }); it('Replaces by key',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'a'},{key:'c'}]}; expect( NavigationStateUtils.replaceAt( state, 'b', {key:'c'})). toEqual(newState); }); it('Replaces by index',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'a'},{key:'c'}]}; expect( NavigationStateUtils.replaceAtIndex( state, 1, {key:'c'})). toEqual(newState); }); it('Resets routes',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:1,routes:[{key:'x'},{key:'y'}]}; expect( NavigationStateUtils.reset( state, [{key:'x'},{key:'y'}])). toEqual(newState); expect(function(){ NavigationStateUtils.reset(state,[]); }).toThrow(); }); it('Resets routes with index',function(){ var state={index:0,routes:[{key:'a'},{key:'b'}]}; var newState={index:0,routes:[{key:'x'},{key:'y'}]}; expect( NavigationStateUtils.reset( state, [{key:'x'},{key:'y'}], 0)). toEqual(newState); expect(function(){ NavigationStateUtils.reset(state,[{key:'x'},{key:'y'}],100); }).toThrow(); }); });