diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/AngularSpec.js | 14 | ||||
| -rw-r--r-- | test/auto/injectorSpec.js | 18 | ||||
| -rw-r--r-- | test/loaderSpec.js | 6 | ||||
| -rwxr-xr-x | test/ng/compileSpec.js | 9 | ||||
| -rw-r--r-- | test/ng/controllerSpec.js | 7 | ||||
| -rw-r--r-- | test/ng/directive/formSpec.js | 12 | ||||
| -rw-r--r-- | test/ng/directive/ngRepeatSpec.js | 8 | ||||
| -rw-r--r-- | test/ng/directive/selectSpec.js | 10 | ||||
| -rw-r--r-- | test/ng/parseSpec.js | 20 | ||||
| -rw-r--r-- | test/ngMock/angular-mocksSpec.js | 11 | ||||
| -rw-r--r-- | test/ngResource/resourceSpec.js | 7 |
11 files changed, 122 insertions, 0 deletions
diff --git a/test/AngularSpec.js b/test/AngularSpec.js index a97c7591..c1914947 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -417,6 +417,20 @@ describe('angular', function() { }); + it('should not break if obj is an array we override hasOwnProperty', function() { + var obj = []; + obj[0] = 1; + obj[1] = 2; + obj.hasOwnProperty = null; + var log = []; + forEach(obj, function(value, key) { + log.push(key + ':' + value); + }); + expect(log).toEqual(['0:1', '1:2']); + }); + + + it('should handle JQLite and jQuery objects like arrays', function() { var jqObject = jqLite("<p><span>s1</span><span>s2</span></p>").find("span"), log = []; diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index f010fc91..5c186cf1 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -295,6 +295,24 @@ describe('injector', function() { }); describe('$provide', function() { + + it('should throw an exception if we try to register a service called "hasOwnProperty"', function() { + createInjector([function($provide) { + expect(function() { + $provide.provider('hasOwnProperty', function() { }); + }).toThrowMinErr('ng', 'badname'); + }]); + }); + + it('should throw an exception if we try to register a constant called "hasOwnProperty"', function() { + createInjector([function($provide) { + expect(function() { + $provide.constant('hasOwnProperty', {}); + }).toThrowMinErr('ng', 'badname'); + }]); + }); + + describe('constant', function() { it('should create configuration injectable constants', function() { var log = []; diff --git a/test/loaderSpec.js b/test/loaderSpec.js index 302852cb..2a564115 100644 --- a/test/loaderSpec.js +++ b/test/loaderSpec.js @@ -72,4 +72,10 @@ describe('module loader', function() { "or forgot to load it. If registering a module ensure that you specify the dependencies as the second " + "argument."); }); + + it('should complain if a module is called "hasOwnProperty', function() { + expect(function() { + window.angular.module('hasOwnProperty', []); + }).toThrowMinErr('ng','badname', "hasOwnProperty is not a valid module name"); + }); }); diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 5e28c62b..1e6f6e26 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -117,6 +117,15 @@ describe('$compile', function() { expect(log).toEqual('pre1; pre2; post2; post1'); }); }); + + it('should throw an exception if a directive is called "hasOwnProperty"', function() { + module(function() { + expect(function() { + directive('hasOwnProperty', function() { }); + }).toThrowMinErr('ng','badname', "hasOwnProperty is not a valid directive name"); + }); + inject(function($compile) {}); + }); }); diff --git a/test/ng/controllerSpec.js b/test/ng/controllerSpec.js index 2a9922c6..4f94402f 100644 --- a/test/ng/controllerSpec.js +++ b/test/ng/controllerSpec.js @@ -57,6 +57,13 @@ describe('$controller', function() { expect(scope.foo).toBe('bar'); expect(ctrl instanceof FooCtrl).toBe(true); }); + + + it('should throw an exception if a controller is called "hasOwnProperty"', function () { + expect(function() { + $controllerProvider.register('hasOwnProperty', function($scope) {}); + }).toThrowMinErr('ng', 'badname', "hasOwnProperty is not a valid controller name"); + }); }); diff --git a/test/ng/directive/formSpec.js b/test/ng/directive/formSpec.js index fb64fdb3..53fd3d90 100644 --- a/test/ng/directive/formSpec.js +++ b/test/ng/directive/formSpec.js @@ -137,6 +137,18 @@ describe('form', function() { }); + it('should throw an exception if an input has name="hasOwnProperty"', function() { + doc = jqLite( + '<form name="form">'+ + '<input name="hasOwnProperty" ng-model="some" />'+ + '<input name="other" ng-model="someOther" />'+ + '</form>'); + expect(function() { + $compile(doc)(scope); + }).toThrowMinErr('ng', 'badname'); + }); + + describe('preventing default submission', function() { it('should prevent form submission', function() { diff --git a/test/ng/directive/ngRepeatSpec.js b/test/ng/directive/ngRepeatSpec.js index 72035566..4cf79dbf 100644 --- a/test/ng/directive/ngRepeatSpec.js +++ b/test/ng/directive/ngRepeatSpec.js @@ -137,6 +137,14 @@ describe('ngRepeat', function() { }); + it("should throw an exception if 'track by' evaluates to 'hasOwnProperty'", function() { + scope.items = {age:20}; + $compile('<div ng-repeat="(key, value) in items track by \'hasOwnProperty\'"></div>')(scope); + scope.$digest(); + expect($exceptionHandler.errors.shift().message).toMatch(/ng:badname/); + }); + + it('should track using build in $id function', function() { element = $compile( '<ul>' + diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index 584fe614..85acba19 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -1247,5 +1247,15 @@ describe('select', function() { expect(element.find('span').text()).toBe('success'); dealoc(element); })); + + it('should throw an exception if an option value interpolates to "hasOwnProperty"', function() { + scope.hasOwnPropertyOption = "hasOwnProperty"; + expect(function() { + compile('<select ng-model="x">'+ + '<option>{{hasOwnPropertyOption}}</option>'+ + '</select>'); + }).toThrowMinErr('ng','badname', 'hasOwnProperty is not a valid "option value" name'); + }); + }); }); diff --git a/test/ng/parseSpec.js b/test/ng/parseSpec.js index 87cc79af..19182332 100644 --- a/test/ng/parseSpec.js +++ b/test/ng/parseSpec.js @@ -351,6 +351,26 @@ describe('parser', function() { expect(scope.$eval('toString()', scope)).toBe('custom toString'); }); + it('should not break if hasOwnProperty is referenced in an expression', function() { + scope.obj = { value: 1}; + // By evaluating an expression that calls hasOwnProperty, the getterFnCache + // will store a property called hasOwnProperty. This is effectively: + // getterFnCache['hasOwnProperty'] = null + scope.$eval('obj.hasOwnProperty("value")'); + // If we rely on this property then evaluating any expression will fail + // because it is not able to find out if obj.value is there in the cache + expect(scope.$eval('obj.value')).toBe(1); + }); + + it('should not break if the expression is "hasOwnProperty"', function() { + scope.fooExp = 'barVal'; + // By evaluating hasOwnProperty, the $parse cache will store a getter for + // the scope's own hasOwnProperty function, which will mess up future cache look ups. + // i.e. cache['hasOwnProperty'] = function(scope) { return scope.hasOwnProperty; } + scope.$eval('hasOwnProperty'); + expect(scope.$eval('fooExp')).toBe('barVal'); + }); + it('should evaluate grouped expressions', function() { expect(scope.$eval("(1+2)*3")).toEqual((1+2)*3); }); diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index e506e608..1a4290e0 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -1,5 +1,7 @@ 'use strict'; +var msie = +((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]); + describe('ngMock', function() { var noop = angular.noop; @@ -448,6 +450,15 @@ describe('ngMock', function() { expect(d($rootScope)).toMatch(/Scope\(.*\): \{/); expect(d($rootScope)).toMatch(/{"abc":"123"}/); })); + + it('should serialize scope that has overridden "hasOwnProperty"', inject(function($rootScope){ + // MS IE8 just doesn't work for this kind of thing, since "for ... in" doesn't return + // things like hasOwnProperty even if it is explicitly defined on the actual object! + if (msie<=8) return; + $rootScope.hasOwnProperty = 'X'; + expect(d($rootScope)).toMatch(/Scope\(.*\): \{/); + expect(d($rootScope)).toMatch(/hasOwnProperty: "X"/); + })); }); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 550b4432..d13156b3 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -242,6 +242,13 @@ describe("resource", function() { }); + it('should throw an exception if a param is called "hasOwnProperty"', function() { + expect(function() { + $resource('/:hasOwnProperty').get(); + }).toThrowMinErr('$resource','badname', "hasOwnProperty is not a valid parameter name"); + }); + + it("should create resource", function() { $httpBackend.expect('POST', '/CreditCard', '{"name":"misko"}').respond({id: 123, name: 'misko'}); |
