diff options
| author | petrovalex | 2012-05-25 23:58:34 +0300 |
|---|---|---|
| committer | Misko Hevery | 2012-09-06 15:49:48 -0700 |
| commit | 0d52ff0f10157aa7d93a77abc78f6a6a6c3f6e45 (patch) | |
| tree | 6b4a57e85c60420816e0cdc0094c0ca309411a96 | |
| parent | baf52e902d92cee39d2e2060a49d9e740da7f0ec (diff) | |
| download | angular.js-0d52ff0f10157aa7d93a77abc78f6a6a6c3f6e45.tar.bz2 | |
fix($parser): string concatination with undefined model
Closes #988
| -rw-r--r-- | src/ng/parse.js | 10 | ||||
| -rw-r--r-- | test/ng/interpolateSpec.js | 26 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/ng/parse.js b/src/ng/parse.js index be17e6ca..97aba113 100644 --- a/src/ng/parse.js +++ b/src/ng/parse.js @@ -5,7 +5,15 @@ var OPERATORS = { 'true':function(){return true;}, 'false':function(){return false;}, undefined:noop, - '+':function(self, locals, a,b){a=a(self, locals); b=b(self, locals); return (isDefined(a)?a:0)+(isDefined(b)?b:0);}, + '+':function(self, locals, a,b){ + a=a(self, locals); b=b(self, locals); + if (isDefined(a)) { + if (isDefined(b)) { + return a + b; + } + return a; + } + return isDefined(b)?b:undefined;}, '-':function(self, locals, a,b){a=a(self, locals); b=b(self, locals); return (isDefined(a)?a:0)-(isDefined(b)?b:0);}, '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, diff --git a/test/ng/interpolateSpec.js b/test/ng/interpolateSpec.js index 20214445..2f4d4645 100644 --- a/test/ng/interpolateSpec.js +++ b/test/ng/interpolateSpec.js @@ -15,6 +15,7 @@ describe('$interpolate', function() { it('should suppress falsy objects', inject(function($interpolate) { expect($interpolate('{{undefined}}')()).toEqual(''); + expect($interpolate('{{undefined+undefined}}')()).toEqual(''); expect($interpolate('{{null}}')()).toEqual(''); expect($interpolate('{{a.b}}')()).toEqual(''); })); @@ -32,6 +33,31 @@ describe('$interpolate', function() { })); + it('should ignore undefined model', inject(function($interpolate) { + expect($interpolate("Hello {{'World' + foo}}")()).toEqual('Hello World'); + })); + + + it('should ignore undefined return value', inject(function($interpolate, $rootScope) { + $rootScope.foo = function() {return undefined}; + expect($interpolate("Hello {{'World' + foo()}}")($rootScope)).toEqual('Hello World'); + })); + + + describe('provider', function() { + beforeEach(module(function($interpolateProvider) { + $interpolateProvider.startSymbol('--'); + $interpolateProvider.endSymbol('--'); + })); + + it('should not get confused with same markers', inject(function($interpolate) { + expect($interpolate('---').parts).toEqual(['---']); + expect($interpolate('----')()).toEqual(''); + expect($interpolate('--1--')()).toEqual('1'); + })); + }); + + describe('parseBindings', function() { it('should Parse Text With No Bindings', inject(function($interpolate) { var parts = $interpolate("a").parts; |
