diff options
| author | Misko Hevery | 2011-03-23 09:33:29 -0700 |
|---|---|---|
| committer | Vojta Jina | 2011-08-02 01:00:03 +0200 |
| commit | 8f0dcbab804180828d6859b1340c86cf161209fb (patch) | |
| tree | d13d47d47a1889cb7c96a87cecacd2e25307d51c /test/service/routeSpec.js | |
| parent | 1f4b417184ce53af15474de065400f8a686430c5 (diff) | |
| download | angular.js-8f0dcbab804180828d6859b1340c86cf161209fb.tar.bz2 | |
feat(scope): new and improved scope implementation
- Speed improvements (about 4x on flush phase)
- Memory improvements (uses no function closures)
- Break $eval into $apply, $dispatch, $flush
- Introduced $watch and $observe
Breaks angular.equals() use === instead of ==
Breaks angular.scope() does not take parent as first argument
Breaks scope.$watch() takes scope as first argument
Breaks scope.$set(), scope.$get are removed
Breaks scope.$config is removed
Breaks $route.onChange callback has not "this" bounded
Diffstat (limited to 'test/service/routeSpec.js')
| -rw-r--r-- | test/service/routeSpec.js | 71 |
1 files changed, 52 insertions, 19 deletions
diff --git a/test/service/routeSpec.js b/test/service/routeSpec.js index fc2c7f9d..6c6c0868 100644 --- a/test/service/routeSpec.js +++ b/test/service/routeSpec.js @@ -18,7 +18,7 @@ describe('$route', function() { $location, $route; function BookChapter() { - this.log = '<init>'; + log += '<init>'; } scope = compile('<div></div>')(); $location = scope.$service('$location'); @@ -28,28 +28,28 @@ describe('$route', function() { $route.onChange(function(){ log += 'onChange();'; }); + $location.update('http://server#/Book/Moby/Chapter/Intro?p=123'); - scope.$eval(); - expect(log).toEqual('onChange();'); + scope.$digest(); + expect(log).toEqual('onChange();<init>'); expect($route.current.params).toEqual({book:'Moby', chapter:'Intro', p:'123'}); - expect($route.current.scope.log).toEqual('<init>'); var lastId = $route.current.scope.$id; log = ''; $location.update('http://server#/Blank?ignore'); - scope.$eval(); + scope.$digest(); expect(log).toEqual('onChange();'); expect($route.current.params).toEqual({ignore:true}); expect($route.current.scope.$id).not.toEqual(lastId); log = ''; $location.update('http://server#/NONE'); - scope.$eval(); + scope.$digest(); expect(log).toEqual('onChange();'); expect($route.current).toEqual(null); $route.when('/NONE', {template:'instant update'}); - scope.$eval(); + scope.$digest(); expect($route.current.template).toEqual('instant update'); }); @@ -75,7 +75,7 @@ describe('$route', function() { expect(onChangeSpy).not.toHaveBeenCalled(); $location.updateHash('/foo'); - scope.$eval(); + scope.$digest(); expect($route.current.template).toEqual('foo.html'); expect($route.current.controller).toBeUndefined(); @@ -98,7 +98,7 @@ describe('$route', function() { expect(onChangeSpy).not.toHaveBeenCalled(); $location.updateHash('/unknownRoute'); - scope.$eval(); + scope.$digest(); expect($route.current.template).toBe('404.html'); expect($route.current.controller).toBe(NotFoundCtrl); @@ -107,7 +107,7 @@ describe('$route', function() { onChangeSpy.reset(); $location.updateHash('/foo'); - scope.$eval(); + scope.$digest(); expect($route.current.template).toEqual('foo.html'); expect($route.current.controller).toBeUndefined(); @@ -115,6 +115,39 @@ describe('$route', function() { expect(onChangeSpy).toHaveBeenCalled(); }); + it('should $destroy old routes', function(){ + var scope = angular.scope(), + $location = scope.$service('$location'), + $route = scope.$service('$route'); + + $route.when('/foo', {template: 'foo.html', controller: function(){ this.name = 'FOO';}}); + $route.when('/bar', {template: 'bar.html', controller: function(){ this.name = 'BAR';}}); + $route.when('/baz', {template: 'baz.html'}); + + expect(scope.$childHead).toEqual(null); + + $location.updateHash('/foo'); + scope.$digest(); + expect(scope.$$childHead).toBeTruthy(); + expect(scope.$$childHead).toEqual(scope.$$childTail); + + $location.updateHash('/bar'); + scope.$digest(); + expect(scope.$$childHead).toBeTruthy(); + expect(scope.$$childHead).toEqual(scope.$$childTail); + return + + $location.updateHash('/baz'); + scope.$digest(); + expect(scope.$$childHead).toBeTruthy(); + expect(scope.$$childHead).toEqual(scope.$$childTail); + + $location.updateHash('/'); + scope.$digest(); + expect(scope.$$childHead).toEqual(null); + expect(scope.$$childTail).toEqual(null); + }); + describe('redirection', function() { @@ -134,7 +167,7 @@ describe('$route', function() { expect($route.current).toBeNull(); expect(onChangeSpy).not.toHaveBeenCalled(); - scope.$eval(); //triggers initial route change - match the redirect route + scope.$digest(); //triggers initial route change - match the redirect route $browser.defer.flush(); //triger route change - match the route we redirected to expect($location.hash).toBe('/foo'); @@ -143,7 +176,7 @@ describe('$route', function() { onChangeSpy.reset(); $location.updateHash(''); - scope.$eval(); //match the redirect route + update $browser + scope.$digest(); //match the redirect route + update $browser $browser.defer.flush(); //match the route we redirected to expect($location.hash).toBe('/foo'); @@ -152,7 +185,7 @@ describe('$route', function() { onChangeSpy.reset(); $location.updateHash('/baz'); - scope.$eval(); //match the redirect route + update $browser + scope.$digest(); //match the redirect route + update $browser $browser.defer.flush(); //match the route we redirected to expect($location.hash).toBe('/bar'); @@ -170,10 +203,10 @@ describe('$route', function() { $route.when('/foo/:id/foo/:subid/:extraId', {redirectTo: '/bar/:id/:subid/23'}); $route.when('/bar/:id/:subid/:subsubid', {template: 'bar.html'}); - scope.$eval(); + scope.$digest(); $location.updateHash('/foo/id1/foo/subid3/gah'); - scope.$eval(); //triggers initial route change - match the redirect route + scope.$digest(); //triggers initial route change - match the redirect route $browser.defer.flush(); //triger route change - match the route we redirected to expect($location.hash).toBe('/bar/id1/subid3/23?extraId=gah'); @@ -190,10 +223,10 @@ describe('$route', function() { $route.when('/bar/:id/:subid/:subsubid', {template: 'bar.html'}); $route.when('/foo/:id/:extra', {redirectTo: '/bar/:id/:subid/99'}); - scope.$eval(); + scope.$digest(); $location.hash = '/foo/id3/eId?subid=sid1&appended=true'; - scope.$eval(); //triggers initial route change - match the redirect route + scope.$digest(); //triggers initial route change - match the redirect route $browser.defer.flush(); //triger route change - match the route we redirected to expect($location.hash).toBe('/bar/id3/sid1/99?appended=true&extra=eId'); @@ -210,10 +243,10 @@ describe('$route', function() { $route.when('/bar/:id/:subid/:subsubid', {template: 'bar.html'}); $route.when('/foo/:id', {redirectTo: customRedirectFn}); - scope.$eval(); + scope.$digest(); $location.hash = '/foo/id3?subid=sid1&appended=true'; - scope.$eval(); //triggers initial route change - match the redirect route + scope.$digest(); //triggers initial route change - match the redirect route $browser.defer.flush(); //triger route change - match the route we redirected to expect($location.hash).toBe('custom'); |
