aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/parse.js10
-rw-r--r--test/ng/interpolateSpec.js26
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 a0a3e311..2877f92e 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('');
}));
@@ -55,6 +56,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;