Fix #428 nested if else rendering

The program equality checker was not taking children into account
when determining equality, causing breakages under similar cases.
This commit is contained in:
kpdecker
2013-02-16 16:18:17 -06:00
parent 1f00504d25
commit d6f146f8a5
3 changed files with 35 additions and 0 deletions
+11
View File
@@ -897,6 +897,17 @@ Compiler.prototype = {
}
}
}
len = this.children.length;
if (other.children.length !== len) {
return false;
}
for (i = 0; i < len; i++) {
if (!this.children[i].equals(other.children[i])) {
return false;
}
}
return true;
},
+11
View File
@@ -59,6 +59,17 @@ Compiler.prototype = {
}
}
}
len = this.children.length;
if (other.children.length !== len) {
return false;
}
for (i = 0; i < len; i++) {
if (!this.children[i].equals(other.children[i])) {
return false;
}
}
return true;
},
+13
View File
@@ -1384,3 +1384,16 @@ test('GH-408: Multiple loops fail', function() {
var result = template(context);
equals(result, "John DoeJane DoeJohn DoeJane DoeJohn DoeJane Doe", 'It should output multiple times');
});
test('GS-428: Nested if else rendering', function() {
var succeedingTemplate = '{{#inverse}} {{#blk}} Unexpected {{/blk}} {{else}} {{#blk}} Expected {{/blk}} {{/inverse}}';
var failingTemplate = '{{#inverse}} {{#blk}} Unexpected {{/blk}} {{else}} {{#blk}} Expected {{/blk}} {{/inverse}}';
var helpers = {
blk: function(block) { return block.fn(''); },
inverse: function(block) { return block.inverse(''); }
};
shouldCompileTo(succeedingTemplate, [{}, helpers], ' Expected ');
shouldCompileTo(failingTemplate, [{}, helpers], ' Expected ');
});