diff options
| author | Misko Hevery | 2011-11-02 21:37:06 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2011-11-14 16:39:33 -0800 | 
| commit | 16597e8b52bdfe34b2239a5ab86a839fa8e980d6 (patch) | |
| tree | fba1654a5f60fce0a21e3d9ed7d1c09cf6c2efbd | |
| parent | f684f20c9982768b6c6d2c0e0797a626c0627773 (diff) | |
| download | angular.js-16597e8b52bdfe34b2239a5ab86a839fa8e980d6.tar.bz2 | |
refactor($service): removed almost all references to scope.$service
- still need to remove from factory
| -rw-r--r-- | src/angular-mocks.js | 2 | ||||
| -rw-r--r-- | src/directives.js | 6 | ||||
| -rw-r--r-- | src/service/scope.js | 2 | ||||
| -rw-r--r-- | test/BinderSpec.js | 4 | ||||
| -rw-r--r-- | test/ResourceSpec.js | 5 | ||||
| -rw-r--r-- | test/directivesSpec.js | 4 | ||||
| -rw-r--r-- | test/service/routeSpec.js | 26 | ||||
| -rw-r--r-- | test/widget/inputSpec.js | 44 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 68 | 
9 files changed, 92 insertions, 69 deletions
diff --git a/src/angular-mocks.js b/src/angular-mocks.js index b4b2fd19..8ce3011d 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -561,7 +561,7 @@ angular.mock.TzDate = function (offset, timestamp) {      self[methodName] = function() {        throw {          name: "MethodNotImplemented", -        message: "Method '" + methodName + "' is not implemented in the TzDate mock" +          message: "Method '" + methodName + "' is not implemented in the TzDate mock"        };      };    }); diff --git a/src/directives.js b/src/directives.js index ee88e2a5..daa42048 100644 --- a/src/directives.js +++ b/src/directives.js @@ -236,7 +236,7 @@ angularDirective("ng:controller", function(expression){  angularDirective("ng:bind", function(expression, element){    element.addClass('ng-binding');    var exprFn = parser(expression).statements(); -  return function(element) { +  return ['$exceptionHandler', '$element', function($exceptionHandler, element) {      var lastValue = Number.NaN;      this.$watch(function(scope) {        // TODO(misko): remove error handling https://github.com/angular/angular.js/issues/347 @@ -269,7 +269,7 @@ angularDirective("ng:bind", function(expression, element){            }          }        } catch (e) { -        scope.$service('$exceptionHandler')(e); +        $exceptionHandler(e);        } finally {          if (hadOwnElement) {            scope.$element = oldElement; @@ -278,7 +278,7 @@ angularDirective("ng:bind", function(expression, element){          }        }      }); -  }; +  }];  });  var bindTemplateCache = {}; diff --git a/src/service/scope.js b/src/service/scope.js index f78ac448..8c7926de 100644 --- a/src/service/scope.js +++ b/src/service/scope.js @@ -312,7 +312,7 @@ function $RootScopeProvider(){                try {                  current.$eval(asyncQueue.shift());                } catch (e) { -                current.$service('$exceptionHandler')(e); +                $exceptionHandler(e);                }              }              if ((watchers = current.$$watchers)) { diff --git a/test/BinderSpec.js b/test/BinderSpec.js index 6ab94401..01e61b57 100644 --- a/test/BinderSpec.js +++ b/test/BinderSpec.js @@ -189,7 +189,7 @@ describe('Binder', function() {      assertTrue(html.indexOf('action="foo();"') > 0 );    }); -  it('RepeaterAdd', inject(function($rootScope, $compile) { +  it('RepeaterAdd', inject(function($rootScope, $compile, $browser) {      var element = $compile('<div><input type="text" ng:model="item.x" ng:repeat="item in items"></div>')($rootScope);      $rootScope.items = [{x:'a'}, {x:'b'}];      $rootScope.$apply(); @@ -200,7 +200,7 @@ describe('Binder', function() {      first.val('ABC');      browserTrigger(first, 'keydown'); -    $rootScope.$service('$browser').defer.flush(); +    $browser.defer.flush();      expect($rootScope.items[0].x).toEqual('ABC');    })); diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js index f648eb1b..2091a936 100644 --- a/test/ResourceSpec.js +++ b/test/ResourceSpec.js @@ -230,10 +230,9 @@ describe("resource", function() {      expect(person.name).toEqual('misko');    })); -  it('should return the same object when verifying the cache', inject(function($rootScope, $compile) { +  it('should return the same object when verifying the cache', +      inject(function($rootScope, $compile, $browser, $resource) {      $compile('<div></div>')($rootScope); -    var $browser = $rootScope.$service('$browser'); -    var $resource = $rootScope.$service('$resource');      var Person = $resource('/Person/:id', null, {query: {method:'GET', isArray: true, verifyCache: true}});      $browser.xhr.expectGET('/Person/123').respond('[\n{\n"name":\n"misko"\n}\n]');      var person = Person.query({id:123}); diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 96d0993b..7acf87bc 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -512,12 +512,12 @@ describe("directive", function() {        expect(element.text()).toEqual('hey dude!');      })); -    it('should infer injection arguments', inject(function($rootScope, $compile) { +    it('should infer injection arguments', inject(function($rootScope, $compile, $xhr) {        temp.MyController = function($xhr){          this.$root.someService = $xhr;        };        var element = $compile('<div ng:controller="temp.MyController"></div>')($rootScope); -      expect($rootScope.someService).toBe($rootScope.$service('$xhr')); +      expect($rootScope.someService).toBe($xhr);      }));    }); diff --git a/test/service/routeSpec.js b/test/service/routeSpec.js index 26ae17e5..fed3faef 100644 --- a/test/service/routeSpec.js +++ b/test/service/routeSpec.js @@ -10,7 +10,8 @@ describe('$route', function() {        log += '<init>;';      } -    $route.when('/Book/:book/Chapter/:chapter', {controller: BookChapter, template: 'Chapter.html'}); +    $route.when('/Book/:book/Chapter/:chapter', +      {controller: BookChapter, template: 'Chapter.html'});      $route.when('/Blank');      $rootScope.$on('$beforeRouteChange', function(event, next, current) {        log += 'before();'; @@ -50,7 +51,8 @@ describe('$route', function() {    })); -  it('should match a route that contains special chars in the path', inject(function($route, $location, $rootScope) { +  it('should match a route that contains special chars in the path', +      inject(function($route, $location, $rootScope) {      $route.when('/$test.23/foo(bar)/:baz', {template: 'test.html'});      $location.path('/test'); @@ -71,7 +73,8 @@ describe('$route', function() {    })); -  it('should change route even when only search param changes', inject(function($route, $location, $rootScope) { +  it('should change route even when only search param changes', +      inject(function($route, $location, $rootScope) {      var callback = jasmine.createSpy('onRouteChange');      $route.when('/test', {template: 'test.html'}); @@ -105,7 +108,8 @@ describe('$route', function() {    })); -  it('should handle unknown routes with "otherwise" route definition', inject(function($route, $location, $rootScope) { +  it('should handle unknown routes with "otherwise" route definition', +      inject(function($route, $location, $rootScope) {      var onChangeSpy = jasmine.createSpy('onChange');      function NotFoundCtrl() {this.notFoundProp = 'not found!';} @@ -229,7 +233,8 @@ describe('$route', function() {      })); -    it('should allow custom redirectTo function to be used', inject(function($route, $location, $rootScope) { +    it('should allow custom redirectTo function to be used', +        inject(function($route, $location, $rootScope) {        $route.when('/bar/:id/:subid/:subsubid', {template: 'bar.html'});        $route.when('/foo/:id', {redirectTo: customRedirectFn}); @@ -267,9 +272,8 @@ describe('$route', function() {    describe('reloadOnSearch', function() {      it('should reload a route when reloadOnSearch is enabled and .search() changes', -        inject(function($route, $location, $rootScope) { -      var $routeParams = $rootScope.$service('$routeParams'), -          reloaded = jasmine.createSpy('route reload'); +        inject(function($route, $location, $rootScope, $routeParams) { +      var reloaded = jasmine.createSpy('route reload');        $route.when('/foo', {controller: FooCtrl});        $rootScope.$on('$beforeRouteChange', reloaded); @@ -399,9 +403,9 @@ describe('$route', function() {      describe('reload', function() { -      it('should reload even if reloadOnSearch is false', inject(function($route, $location, $rootScope) { -        var $routeParams = $rootScope.$service('$routeParams'), -            count = 0; +      it('should reload even if reloadOnSearch is false', +          inject(function($route, $location, $rootScope, $routeParams) { +        var count = 0;          $route.when('/bar/:barId', {controller: FooCtrl, reloadOnSearch: false}); diff --git a/test/widget/inputSpec.js b/test/widget/inputSpec.js index cd70cea4..8a35407b 100644 --- a/test/widget/inputSpec.js +++ b/test/widget/inputSpec.js @@ -5,8 +5,9 @@ describe('widget: input', function() {    var $compile = null;    var doc = null; -  beforeEach(inject(function($rootScope, $compile) { +  beforeEach(inject(function($rootScope, $compile, $browser) {      scope = $rootScope; +    defer = $browser.defer;      set$compile($compile);      element = null;      compile = function(html, parent) { @@ -18,7 +19,6 @@ describe('widget: input', function() {        }        $compile(element)(scope);        scope.$apply(); -      defer = scope.$service('$browser').defer;        return scope;      };    })); @@ -88,7 +88,7 @@ describe('widget: input', function() {        };        inputElement.val(' a ');        browserTrigger(inputElement); -      scope.$service('$browser').defer.flush(); +      defer.flush();        expect(scope.name).toEqual('a');        expect(log).toEqual('change();');      }); @@ -128,7 +128,7 @@ describe('widget: input', function() {          element.val('Kai');          browserTrigger(element, 'change'); -        scope.$service('$browser').defer.flush(); +        defer.flush();          expect(scope.name).toEqual('Kai');        }); @@ -140,7 +140,7 @@ describe('widget: input', function() {          expect(scope.name).toEqual("Misko");          expect(scope.count).toEqual(0);          browserTrigger(element, 'keydown'); -        scope.$service('$browser').defer.flush(); +        defer.flush();          expect(scope.name).toEqual("Misko");          expect(scope.count).toEqual(0);        }); @@ -166,7 +166,7 @@ describe('widget: input', function() {            element.val('1, 2, 3');            browserTrigger(element); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.list).toEqual(['1', '2', '3']);          }); @@ -191,7 +191,7 @@ describe('widget: input', function() {            } catch (e){}            scope.$element.val('123X');            browserTrigger(scope.$element, 'change'); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.$element.val()).toEqual('123X');            expect(scope.age).toEqual(123);            expect(scope.$element).toBeInvalid(); @@ -206,25 +206,25 @@ describe('widget: input', function() {            scope.$element.val('a ');            browserTrigger(scope.$element, 'change'); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.$element.val()).toEqual('a ');            expect(scope.list).toEqual(['a']);            scope.$element.val('a ,');            browserTrigger(scope.$element, 'change'); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.$element.val()).toEqual('a ,');            expect(scope.list).toEqual(['a']);            scope.$element.val('a , ');            browserTrigger(scope.$element, 'change'); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.$element.val()).toEqual('a , ');            expect(scope.list).toEqual(['a']);            scope.$element.val('a , b');            browserTrigger(scope.$element, 'change'); -          scope.$service('$browser').defer.flush(); +          defer.flush();            expect(scope.$element.val()).toEqual('a , b');            expect(scope.list).toEqual(['a', 'b']);          }); @@ -293,9 +293,9 @@ describe('widget: input', function() {      }); -    it("should process required", function() { +    it("should process required", inject(function($formFactory) {        compile('<input type="text" ng:model="price" name="p" required/>', jqLite(document.body)); -      expect(scope.$service('$formFactory').rootForm.p.$required).toBe(true); +      expect($formFactory.rootForm.p.$required).toBe(true);        expect(element.hasClass('ng-invalid')).toBeTruthy();        scope.price = 'xxx'; @@ -304,9 +304,9 @@ describe('widget: input', function() {        element.val('');        browserTrigger(element); -      scope.$service('$browser').defer.flush(); +      defer.flush();        expect(element.hasClass('ng-invalid')).toBeTruthy(); -    }); +    }));      it('should allow bindings on ng:required', function() { @@ -328,7 +328,7 @@ describe('widget: input', function() {        element.val('abc');        browserTrigger(element); -      scope.$service('$browser').defer.flush(); +      defer.flush();        expect(element).toBeValid();      }); @@ -458,18 +458,18 @@ describe('widget: input', function() {    describe('scope declaration', function() { -    it('should read the declaration from scope', inject(function($rootScope, $compile) { -      var input, $formFactory; +    it('should read the declaration from scope', inject(function($rootScope, $compile, $formFactory) { +      var input, formFactory;        var element = angular.element('<input type="@MyType" ng:model="abc">');        $rootScope.MyType = function($f, i) {          input = i; -        $formFactory = $f; +        formFactory = $f;        };        $rootScope.MyType.$inject = ['$formFactory', '$element'];        $compile(element)($rootScope); -      expect($formFactory).toBe($rootScope.$service('$formFactory')); +      expect(formFactory).toBe($formFactory);        expect(input[0]).toBe(element[0]);      })); @@ -523,7 +523,7 @@ describe('widget: input', function() {            if (value != undefined) {              scope.$element.val(value);              browserTrigger(element, 'keydown'); -            scope.$service('$browser').defer.flush(); +            defer.flush();            }            scope.$digest();          } @@ -587,7 +587,7 @@ describe('widget: input', function() {        el.val('xx');        browserTrigger(el, 'keydown'); -      expect(function() { $rootScope.$service('$browser').defer.flush(); }). +      expect(function() { defer.flush(); }).          toThrow('Expected fooRegexp to be a RegExp but was undefined');        dealoc(el); diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index fc898f83..63182374 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -1,6 +1,10 @@  'use strict';  describe("widget", function() { +  beforeEach(inject(function($provide){ +    $provide.factory('$xhrCache', ['$xhr.cache', identity]); +  })); +    describe('ng:switch', inject(function($rootScope, $compile) {      it('should switch on value change', inject(function($rootScope, $compile) {        var element = $compile( @@ -56,25 +60,26 @@ describe("widget", function() {    describe('ng:include', inject(function($rootScope, $compile) { -    it('should include on external file', inject(function($rootScope, $compile) { +    it('should include on external file', inject(function($rootScope, $compile, $xhrCache) {        var element = jqLite('<ng:include src="url" scope="childScope"></ng:include>');        var element = $compile(element)($rootScope);        $rootScope.childScope = $rootScope.$new();        $rootScope.childScope.name = 'misko';        $rootScope.url = 'myUrl'; -      $rootScope.$service('$xhr.cache').data.myUrl = {value:'{{name}}'}; +      $xhrCache.data.myUrl = {value:'{{name}}'};        $rootScope.$digest();        expect(element.text()).toEqual('misko');      })); -    it('should remove previously included text if a falsy value is bound to src', inject(function($rootScope, $compile) { +    it('should remove previously included text if a falsy value is bound to src', +        inject(function($rootScope, $compile, $xhrCache) {        var element = jqLite('<ng:include src="url" scope="childScope"></ng:include>');        var element = $compile(element)($rootScope);        $rootScope.childScope = $rootScope.$new();        $rootScope.childScope.name = 'igor';        $rootScope.url = 'myUrl'; -      $rootScope.$service('$xhr.cache').data.myUrl = {value:'{{name}}'}; +      $xhrCache.data.myUrl = {value:'{{name}}'};        $rootScope.$digest();        expect(element.text()).toEqual('igor'); @@ -86,11 +91,11 @@ describe("widget", function() {      })); -    it('should allow this for scope', inject(function($rootScope, $compile) { +    it('should allow this for scope', inject(function($rootScope, $compile, $xhrCache) {        var element = jqLite('<ng:include src="url" scope="this"></ng:include>');        var element = $compile(element)($rootScope);        $rootScope.url = 'myUrl'; -      $rootScope.$service('$xhr.cache').data.myUrl = {value:'{{"abc"}}'}; +      $xhrCache.data.myUrl = {value:'{{"abc"}}'};        $rootScope.$digest();        // TODO(misko): because we are using scope==this, the eval gets registered        // during the flush phase and hence does not get called. @@ -102,28 +107,29 @@ describe("widget", function() {      })); -    it('should evaluate onload expression when a partial is loaded', inject(function($rootScope, $compile) { +    it('should evaluate onload expression when a partial is loaded', +        inject(function($rootScope, $compile, $xhrCache) {        var element = jqLite('<ng:include src="url" onload="loaded = true"></ng:include>');        var element = $compile(element)($rootScope);        expect($rootScope.loaded).not.toBeDefined();        $rootScope.url = 'myUrl'; -      $rootScope.$service('$xhr.cache').data.myUrl = {value:'my partial'}; +      $xhrCache.data.myUrl = {value:'my partial'};        $rootScope.$digest();        expect(element.text()).toEqual('my partial');        expect($rootScope.loaded).toBe(true);      })); -    it('should destroy old scope', inject(function($rootScope, $compile) { +    it('should destroy old scope', inject(function($rootScope, $compile, $xhrCache) {        var element = jqLite('<ng:include src="url"></ng:include>');        var element = $compile(element)($rootScope);        expect($rootScope.$$childHead).toBeFalsy();        $rootScope.url = 'myUrl'; -      $rootScope.$service('$xhr.cache').data.myUrl = {value:'my partial'}; +      $xhrCache.data.myUrl = {value:'my partial'};        $rootScope.$digest();        expect($rootScope.$$childHead).toBeTruthy(); @@ -135,7 +141,8 @@ describe("widget", function() {    describe('a', inject(function($rootScope, $compile) { -    it('should prevent default action to be executed when href is empty', inject(function($rootScope, $compile) { +    it('should prevent default action to be executed when href is empty', +        inject(function($rootScope, $compile) {        var orgLocation = document.location.href,            preventDefaultCalled = false,            event; @@ -152,7 +159,8 @@ describe("widget", function() {        } else {          event = document.createEvent('MouseEvent'); -        event.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); +        event.initMouseEvent( +          'click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);          event.preventDefaultOrg = event.preventDefault;          event.preventDefault = function() { @@ -231,7 +239,8 @@ describe("widget", function() {        $log.error.logs.shift();      })); -    it('should expose iterator offset as $index when iterating over arrays', inject(function($rootScope, $compile) { +    it('should expose iterator offset as $index when iterating over arrays', +        inject(function($rootScope, $compile) {        var element = $compile(          '<ul>' +            '<li ng:repeat="item in items" ng:bind="item + $index + \'|\'"></li>' + @@ -241,7 +250,8 @@ describe("widget", function() {        expect(element.text()).toEqual('misko0|shyam1|frodo2|');      })); -    it('should expose iterator offset as $index when iterating over objects', inject(function($rootScope, $compile) { +    it('should expose iterator offset as $index when iterating over objects', +        inject(function($rootScope, $compile) {        var element = $compile(          '<ul>' +            '<li ng:repeat="(key, val) in items" ng:bind="key + \':\' + val + $index + \'|\'"></li>' + @@ -251,7 +261,8 @@ describe("widget", function() {        expect(element.text()).toEqual('frodo:f0|misko:m1|shyam:s2|');      })); -    it('should expose iterator position as $position when iterating over arrays', inject(function($rootScope, $compile) { +    it('should expose iterator position as $position when iterating over arrays', +        inject(function($rootScope, $compile) {        var element = $compile(          '<ul>' +            '<li ng:repeat="item in items" ng:bind="item + \':\' + $position + \'|\'"></li>' + @@ -270,7 +281,8 @@ describe("widget", function() {        expect(element.text()).toEqual('misko:first|shyam:last|');      })); -    it('should expose iterator position as $position when iterating over objects', inject(function($rootScope, $compile) { +    it('should expose iterator position as $position when iterating over objects', +        inject(function($rootScope, $compile) {        var element = $compile(          '<ul>' +            '<li ng:repeat="(key, val) in items" ng:bind="key + \':\' + val + \':\' + $position + \'|\'">' + @@ -309,7 +321,8 @@ describe("widget", function() {        expect(element.text()).toEqual('a|b|Xc|d|X');      })); -    it('should ignore non-array element properties when iterating over an array', inject(function($rootScope, $compile) { +    it('should ignore non-array element properties when iterating over an array', +        inject(function($rootScope, $compile) {        var element = $compile('<ul><li ng:repeat="item in array">{{item}}|</li></ul>')($rootScope);        $rootScope.array = ['a', 'b', 'c'];        $rootScope.array.foo = '23'; @@ -319,7 +332,8 @@ describe("widget", function() {        expect(element.text()).toBe('a|b|c|');      })); -    it('should iterate over non-existent elements of a sparse array', inject(function($rootScope, $compile) { +    it('should iterate over non-existent elements of a sparse array', +        inject(function($rootScope, $compile) {        var element = $compile('<ul><li ng:repeat="item in array">{{item}}|</li></ul>')($rootScope);        $rootScope.array = ['a', 'b'];        $rootScope.array[4] = 'c'; @@ -382,7 +396,8 @@ describe("widget", function() {          expect(newElements[3]).toEqual(lis[3]);        })); -      it('should remove last item when one duplicate instance is removed', inject(function($rootScope, $compile) { +      it('should remove last item when one duplicate instance is removed', +          inject(function($rootScope, $compile) {          $rootScope.items = [a, a, a];          $rootScope.$digest();          lis = element.find('li'); @@ -395,7 +410,8 @@ describe("widget", function() {          expect(newElements[1]).toEqual(lis[1]);        })); -      it('should reverse items when the collection is reversed', inject(function($rootScope, $compile) { +      it('should reverse items when the collection is reversed', +          inject(function($rootScope, $compile) {          $rootScope.items = [a, b, c];          $rootScope.$digest();          lis = element.find('li'); @@ -413,7 +429,8 @@ describe("widget", function() {    describe('@ng:non-bindable', function() { -    it('should prevent compilation of the owning element and its children', inject(function($rootScope, $compile) { +    it('should prevent compilation of the owning element and its children', +        inject(function($rootScope, $compile) {        var element = $compile('<div ng:non-bindable><span ng:bind="name"></span></div>')($rootScope);        $rootScope.name =  'misko';        $rootScope.$digest(); @@ -429,14 +446,16 @@ describe("widget", function() {      })); -    it('should do nothing when no routes are defined', inject(function($rootScope, $compile, $location) { +    it('should do nothing when no routes are defined', +        inject(function($rootScope, $compile, $location) {        $location.path('/unknown');        $rootScope.$digest();        expect(element.text()).toEqual('');      })); -    it('should load content via xhr when route changes', inject(function($rootScope, $compile, $browser, $location, $route) { +    it('should load content via xhr when route changes', +        inject(function($rootScope, $compile, $browser, $location, $route) {        $route.when('/foo', {template: 'myUrl1'});        $route.when('/bar', {template: 'myUrl2'}); @@ -624,7 +643,8 @@ describe("widget", function() {          })); -        it('should show single/plural strings with mal-formed inputs', inject(function($rootScope, $compile) { +        it('should show single/plural strings with mal-formed inputs', +            inject(function($rootScope, $compile) {            $rootScope.email = '';            $rootScope.$digest();            expect(element.text()).toBe('');  | 
