diff --git a/src/ng/parse.js b/src/ng/parse.js index 58ddca7e1e46..76f73a1b2915 100644 --- a/src/ng/parse.js +++ b/src/ng/parse.js @@ -86,7 +86,9 @@ forEach({ 'null': function() { return null; }, 'true': function() { return true; }, 'false': function() { return false; }, - 'undefined': function() {} + 'undefined': function() {}, + 'Infinity': function() { return Infinity; }, + 'NaN': function() { return NaN; } }, function(constantGetter, name) { constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true; CONSTANTS[name] = constantGetter; diff --git a/test/ng/parseSpec.js b/test/ng/parseSpec.js index cc36b35a483b..c5be169e28d7 100644 --- a/test/ng/parseSpec.js +++ b/test/ng/parseSpec.js @@ -632,6 +632,38 @@ describe('parser', function() { expect(scope.a).not.toBeDefined(); }); + it('should evaluate Infinity', function() { + expect(scope.$eval("Infinity")).toBe(Infinity); + expect(scope.$eval("a=Infinity")).toBe(Infinity); + expect(scope.a).toBe(Infinity); + }); + + it('should evaluate -Infinity', function() { + expect(scope.$eval("-Infinity")).toBe(-Infinity); + expect(scope.$eval("a=-Infinity")).toBe(-Infinity); + expect(scope.a).toBe(-Infinity); + }); + + it('should dereference object properties named "Infinity"', function() { + scope.obj = { 'Infinity': 42 }; + expect(scope.$eval("obj.Infinity")).toBe(42); + expect(scope.$eval("obj.Infinity = 43")).toBe(43); + expect(scope.obj.Infinity).toBe(43); + }); + + it('should evaluate NaN', function() { + expect(scope.$eval("NaN")).toBeNaN(); + expect(scope.$eval("a=NaN")).toBeNaN(); + expect(scope.a).toBeNaN(); + }); + + it('should dereference object properties named "NaN"', function() { + scope.obj = { 'NaN': 42 }; + expect(scope.$eval("obj.NaN")).toBe(42); + expect(scope.$eval("obj.NaN = 43")).toBe(43); + expect(scope.obj.NaN).toBe(43); + }); + it('should allow assignment after array dereference', function() { scope.obj = [{}]; scope.$eval('obj[0].name=1');