var test_template = twig({data: '{% if test %}true{% endif%}'});
test_template.render({test: true}).should.equal("true" );
test_template.render({test: false}).should.equal("" );
var test_template = twig({data: '{% if test %}true{% endif%}'});
test_template.render({test: true}).should.equal("true" );
test_template.render({test: false}).should.equal("" );
var test_template = twig({data: '{% if test %}1{% elseif other %}2{%else%}3{% endif%}'});
test_template.render({test: true, other:false}).should.equal("1" );
test_template.render({test: true, other:true}).should.equal("1" );
test_template.render({test: false, other:true}).should.equal("2" );
test_template.render({test: false, other:false}).should.equal("3" );
var test_template = twig({data: '{% if test %}{% if test2 %}true{% else %}false{% endif%}{% else %}not{% endif%}'});
test_template.render({test: true, test2: true}).should.equal("true" );
test_template.render({test: true, test2: false}).should.equal("false" );
test_template.render({test: false, test2: true}).should.equal("not" );
test_template.render({test: false, test2: false}).should.equal("not" );
var test_template = twig({data: '{% for value in test %}{{ value }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("1234" );
test_template.render({test: []}).should.equal("" );
var test_template = twig({data: '{% for key,value in test %}{{key}}:{{ value }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("0:11:22:33:4" );
test_template.render({test: []}).should.equal("" );
var test_template = twig({data: '{% for value in test %}{{ value }}{% endfor %}'});
test_template.render({test: {one: 1, two: 2, three: 3}}).should.equal("123" );
test_template.render({test: {}}).should.equal("" );
var test_template = twig({data: '{% for key, value in test %}{{key}}:{{ value }}{% endfor %}'});
test_template.render({test: {one: 1, two: 2, three: 3}}).should.equal("one:1two:2three:3" );
test_template.render({test: {}}).should.equal("" );
var test_template = twig({data: '{% for key,value in test %}{{ value }}{% else %}else{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("1234" );
test_template.render({test: []}).should.equal("else" );
var test_template = twig({data: '{% for key,list in test %}{% for val in list %}{{ val }}{%endfor %}.{% else %}else{% endfor %}'});
test_template.render({test: [[1,2],[3,4],[5,6]]}).should.equal("12.34.56." );
test_template.render({test: []}).should.equal("else" );
var test_template = twig({data: '{% for key,value in test %}{{ loop.index }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("1234" );
test_template = twig({data: '{% for key,value in test %}{{ loop.index0 }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("0123" );
test_template = twig({data: '{% for key,value in test %}{{ loop.revindex }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("4321" );
test_template = twig({data: '{% for key,value in test %}{{ loop.revindex0 }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("3210" );
test_template = twig({data: '{% for key,value in test %}{{ loop.length }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("4444" );
test_template = twig({data: '{% for key,value in test %}{{ loop.first }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("truefalsefalsefalse" );
test_template = twig({data: '{% for key,value in test %}{{ loop.last }}{% endfor %}'});
test_template.render({test: [1,2,3,4]}).should.equal("falsefalsefalsetrue" );
var test_template = twig({data: '{% for key,value in test %}{{ loop.index }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("1234" );
test_template = twig({data: '{% for key,value in test %}{{ loop.index0 }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("0123" );
test_template = twig({data: '{% for key,value in test %}{{ loop.revindex }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("4321" );
test_template = twig({data: '{% for key,value in test %}{{ loop.revindex0 }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("3210" );
test_template = twig({data: '{% for key,value in test %}{{ loop.length }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("4444" );
test_template = twig({data: '{% for key,value in test %}{{ loop.first }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("truefalsefalsefalse" );
test_template = twig({data: '{% for key,value in test %}{{ loop.last }}{% endfor %}'});
test_template.render({test: {a:1,b:2,c:3,d:4}}).should.equal("falsefalsefalsetrue" );
// Define and save a template
twig({
id: 'test',
data: '{{ "test" }}'
});
// Load and render the template
twig({ref: 'test'}).render()
.should.equal("test");
// Really all we care about here is not throwing exceptions.
twig({data: '{{ "test" }}'}).render().should.equal("test");
twig({data: '{{ " }} " }}'}).render().should.equal(" }} ");
twig({data: '{{ " \\"}} " }}'}).render().should.equal(' "}} ');
twig({data: "{{ ' }} ' }}"}).render().should.equal(" }} ");
twig({data: "{{ ' \\'}} ' }}"}).render().should.equal(" '}} ");
twig({data: '{{ " \'}} " }}'}).render().should.equal(" '}} ");
twig({data: "{{ ' \"}} ' }}"}).render().should.equal(' "}} ');
twig({data: '{{ 12 }}'}).render().should.equal( "12" );
twig({data: '{{ 12.64 }}'}).render().should.equal( "12.64" );
twig({data: '{{ 0.64 }}'}).render().should.equal("0.64" );
twig({data: '{{ true }}'}).render().should.equal( "true" );
twig({data: '{{ false }}'}).render().should.equal( "false" );
twig({data: '{{ "double" }}'}).render().should.equal("double");
twig({data: "{{ 'single' }}"}).render().should.equal('single');
twig({data: '{{ "dou\'ble" }}'}).render().should.equal("dou'ble");
twig({data: "{{ 'sin\"gle' }}"}).render().should.equal('sin"gle');
twig({data: '{{ "dou\\"ble" }}'}).render().should.equal("dou\"ble");
twig({data: "{{ 'sin\\'gle' }}"}).render().should.equal("sin'gle");
twig({data: '{{ [1] }}'}).render().should.equal("1" );
twig({data: '{{ [1,2 ,3 ] }}'}).render().should.equal("1,2,3" );
twig({data: '{{ [1,2 ,3 , val ] }}'}).render({val: 4}).should.equal("1,2,3,4" );
twig({data: '{{ ["[to",\'the\' ,"string]" ] }}'}).render().should.equal('[to,the,string]' );
twig({data: '{{ ["[to",\'the\' ,"str\\"ing]" ] }}'}).render().should.equal('[to,the,str"ing]' );
twig({data: '{{ [1,2 ,1+2 ] }}'}).render().should.equal("1,2,3" );
twig({data: '{{ [1,2 ,3 , "-", [4,5, 6] ] }}'}).render({val: 4}).should.equal("1,2,3,-,4,5,6" );
twig({data: '{{ [a,b ,(1+2) * a ] }}'}).render({a:1,b:2}).should.equal("1,2,3" );
twig({data: '{{ orp }}'}).render({ orp: "test"}).should.equal("test");
twig({data: '{{ val }}'}).render({ val: function() {
return "test"
}}).should.equal("test");
twig({data: '{{ null == val }}'}).render({val: null}).should.equal( "true" );
twig({data: '{{ null == val }}'}).render({val: undefined}).should.equal( "true" );
twig({data: '{{ null == val }}'}).render({val: "test"}).should.equal( "false" );
twig({data: '{{ null == val }}'}).render({val: 0}).should.equal( "false" );
twig({data: '{{ null == val }}'}).render({val: false}).should.equal( "false" );
twig({data: '{% set at = {"foo": null} %}{{ at.foo == val }}'}).render({val: null}).should.equal( "true" );
twig({data: '{{ key.value }} {{ key.sub.test }}'}).render({
key: {
value: "test",
sub: {
test: "value"
}
}
}).should.equal("test value");
twig({data: '{{ key["value"] }} {{ key[\'sub\']["test"] }}'}).render({
key: {
value: "test",
sub: {
test: "value"
}
}
}).should.equal("test value");
twig({data: '{{ key["value"] }} {{ key.sub[key.value] }} {{ s.t["u"].v["w"] }}'}).render({
key: {
value: "test",
sub: {
test: "value"
}
},
s: { t: { u: { v: { w: 'x' } } } }
}).should.equal("test value x" );
var test_template = twig({data: '{{ key.fn().value }}'});
var output = test_template.render({
key: {
fn: function() {
return {
value: "test"
}
}
}
});
output.should.equal("test");
var test_template = twig({data: '{{ key.fn()["value"] }}'});
var output = test_template.render({
key: {
fn: function() {
return {
value: "test 2"
}
}
}
});
output.should.equal("test 2");
twig({data: '{{ obj.value }}'}).render({
obj: {
getValue: function() {
return "val";
},
isValue: function() {
return "not val";
}
}
}).should.equal("val");
twig({data: '{{ obj.value }}'}).render({
obj: {
isValue: function() {
return "val";
}
}
}).should.equal("val");
var object = {
getValue: function() {
return "val";
}
};
function Subobj() {};
Subobj.prototype = object;
var subobj = new Subobj();
twig({data: '{{ obj.value }}'}).render({
obj: subobj
}).should.equal("val");
twig({data: '{{ obj.value == null }}'}).render({
obj: {}
}).should.equal("true");
twig({data: '{{ obj["value"] == null }}'}).render({
obj: {}
}).should.equal("true");
var test_template = twig({data: '{{ a + b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal( (pair.a + pair.b).toString() );
});
var test_template = twig({data: '{{ a - b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal( (pair.a - pair.b).toString() );
});
var test_template = twig({data: '{{ a * b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a * pair.b).toString() );
});
var test_template = twig({data: '{{ a / b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a / pair.b).toString() );
});
var test_template = twig({data: '{{ a // b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
// Get expected truncated result
var c = parseInt(pair.a/pair.b);
output.should.equal(c.toString() );
});
var test_template = twig({data: '{{ a ** b }}'});
var pow_test_data = [
{a: 2, b:3, c: 8}
, {a: 4, b:.5, c: 2}
, {a: 5, b: 1, c: 5}
];
pow_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal(pair.c.toString() );
});
twig({data: '{{ "test" ~ a }}'}).render({a:1234}).should.equal("test1234");
twig({data: '{{ a ~ "test" ~ a }}'}).render({a:1234}).should.equal("1234test1234");
twig({data: '{{ "this" ~ "test" }}'}).render({a:1234}).should.equal("thistest");
// Test numbers
var test_template = twig({data: '{{ a ~ b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal(pair.a.toString() + pair.b.toString());
});
// Test strings
test_template = twig({data: '{{ a ~ b }}'});
string_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal(pair.a.toString() + pair.b.toString());
});
var data = {a: 4.5, b: 10, c: 12, d: -0.25, e:0, f: 65, g: 21, h: -0.0002};
var test_template = twig({data: '{{a/b+c*d-e+f/g*h}}'});
var output = test_template.render(data);
var expected = data.a / data.b + data.c * data.d - data.e + data.f / data.g * data.h;
output.should.equal(expected.toString());
var data = {a: 4.5, b: 10, c: 12, d: -0.25, e:0, f: 65, g: 21, h: -0.0002};
var test_template = twig({data: '{{a /(b+c )*d-(e+f)/(g*h)}}'});
var output = test_template.render(data);
var expected = data.a / (data.b + data.c) * data.d - (data.e + data.f) / (data.g * data.h);
output.should.equal(expected.toString());
var test_template = twig({data: '{{ a < b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a < pair.b).toString() );
});
var test_template = twig({data: '{{ a <= b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a <= pair.b).toString() );
});
var test_template = twig({data: '{{ a > b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a > pair.b).toString() );
});
var test_template = twig({data: '{{ a >= b }}'});
numeric_test_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a >= pair.b).toString() );
});
var test_template = twig({data: '{{ a == b }}'});
boolean_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a == pair.b).toString() );
});
equality_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a == pair.b).toString() );
});
var test_template = twig({data: '{{ a != b }}'});
boolean_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a != pair.b).toString() );
});
equality_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a != pair.b).toString() );
});
var test_template = twig({data: '{{ a or b }}'});
boolean_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a || pair.b).toString() );
});
var test_template = twig({data: '{{ a and b }}'});
boolean_data.forEach(function(pair) {
var output = test_template.render(pair);
output.should.equal((pair.a && pair.b).toString() );
});
var test_template = twig({data: '{{ not a }}'});
test_template.render({a:false}).should.equal(true.toString());
test_template.render({a:true}).should.equal(false.toString());
var test_template = twig({data: '{{ a ? b:c }}'})
, output_t = test_template.render({a: true, b: "one", c: "two"})
, output_f = test_template.render({a: false, b: "one", c: "two"});
output_t.should.equal( "one" );
output_f.should.equal( "two" );
var test_template2 = twig({data: '{{ (a ? {"a":e+f}:{"a":1}).a }}'})
, output2 = test_template2.render({a: true, b: false, e: 1, f: 2});
output2.should.equal( "3" );
var test_template2 = twig({data: '{{ {"b" : a or b ? {"a":e+f}:{"a":1} }.b.a }}'})
, output2 = test_template2.render({a: false, b: false, e: 1, f: 2});
output2.should.equal( "1" );
var test_template = twig({data: '{{ "a" in ["a", "b", "c"] }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ "d" in ["a", "b", "c"] }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "a" not in ["a", "b", "c"] }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "d" not in ["a", "b", "c"] }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ "at" in "hat" }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ "d" in "not" }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "at" not in "hat" }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "d" not in "not" }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ "value" in {"key" : "value", "2": "other"} }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ "d" in {"key_a" : "no"} }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "value" not in {"key" : "value", "2": "other"} }}'});
test_template.render().should.equal(false.toString());
var test_template = twig({data: '{{ "d" not in {"key_a" : "no"} }}'});
test_template.render().should.equal(true.toString());
var test_template = twig({data: '{{ ["a", "b", "c"]|keys|reverse }}' });
test_template.render().should.equal("2,1,0" );
var test_template = twig({data: '{{ "http://google.com/?q=twig.js"|url_encode() }}' });
test_template.render().should.equal("http%3A%2F%2Fgoogle.com%2F%3Fq%3Dtwig.js" );
var test_template = twig({data: '{{ test|json_encode }}' });
test_template.render({test:'value'}).should.equal('"value"' );
var test_template = twig({data: '{{ test|json_encode }}' });
test_template.render({test:21}).should.equal('21' );
var test_template = twig({data: '{{ [1,"b",3]|json_encode }}' });
test_template.render().should.equal('[1,"b",3]' );
var test_template = twig({data: '{{ {"a":[1,"b",3]}|json_encode }}' });
test_template.render().should.equal('{"a":[1,"b",3]}' );
var test_template = twig({data: '{{ "hello"|upper }}' });
test_template.render().should.equal("HELLO" );
var test_template = twig({data: '{{ "HELLO"|lower }}' });
test_template.render().should.equal("hello" );
var test_template = twig({data: '{{ "hello world"|capitalize }}' });
test_template.render().should.equal("Hello world" );
var test_template = twig({data: '{{ "hello world"|title }}' });
test_template.render().should.equal("Hello World" );
var test_template = twig({data: '{{ "test"|length }}' });
test_template.render().should.equal("4");
var test_template = twig({data: '{{ [1,2,4,76,"tesrt"]|length }}' });
test_template.render().should.equal("5");
var test_template = twig({data: '{{ {"a": "b", "c": "1", "test": "test"}|length }}' });
test_template.render().should.equal("3");
var test_template = twig({data: '{{ [1,5,2,7]|sort }}' });
test_template.render().should.equal("1,2,5,7" );
test_template = twig({data: '{{ ["test","abc",2,7]|sort }}' });
test_template.render().should.equal("2,7,abc,test" );
var test_template = twig({data: "{% set obj = {'c': 1,'d': 5,'t': 2,'e':7}|sort %}{% for key,value in obj|sort %}{{key}}:{{value}} {%endfor %}" });
test_template.render().should.equal("c:1 t:2 d:5 e:7 " );
test_template = twig({data: "{% set obj = {'m':'test','z':'abc','a':2,'y':7} %}{% for key,value in obj|sort %}{{key}}:{{value}} {%endfor %}" });
test_template.render().should.equal("a:2 y:7 z:abc m:test " );
var test_template = twig({data: '{{ ["a", "b", "c"]|reverse }}' });
test_template.render().should.equal("c,b,a" );
var test_template = twig({data: '{{ ["a", "b", "c"]|keys }}' });
test_template.render().should.equal("0,1,2" );
var test_template = twig({data: '{{ {"a": 1, "b": 4, "c": 5}|keys }}' });
test_template.render().should.equal("a,b,c" );
test_template = twig({data: '{{ {"0":"a", "1":"b", "2":"c"}|keys }}' });
test_template.render().should.equal("0,1,2" );
// Object merging
var test_template = twig({data: '{% set obj= {"a":"test", "b":"1"}|merge({"b":2,"c":3}) %}{% for key in obj|keys|sort %}{{key}}:{{obj[key]}} {%endfor %}' });
test_template.render().should.equal('a:test b:2 c:3 ' );
// Array merging
var test_template = twig({data: '{% set obj= ["a", "b"]|merge(["c", "d"]) %}{% for key in obj|keys|sort %}{{key}}:{{obj[key]}} {%endfor %}' });
test_template.render().should.equal('0:a 1:b 2:c 3:d ' );
// Mixed merging
var test_template = twig({data: '{% set obj= ["a", "b"]|merge({"a": "c", "3":4}, ["c", "d"]) %}{% for key in obj|keys|sort %}{{key}}:{{obj[key]}} {%endfor %}' });
test_template.render().should.equal('0:a 1:b 3:4 4:c 5:d a:c ' );
// Mixed merging(2)
test_template = twig({data: '{% set obj= {"1":"a", "a":"b"}|merge(["c", "d"]) %}{% for key in obj|keys %}{{key}}:{{obj[key]}} {%endfor %}' });
test_template.render().should.equal('1:a a:b 2:c 3:d ' );
var test_template = twig({data: '{{ {"a":"1", "b": "b", "c":test}|join("-") }}' });
test_template.render({"test": "t"}).should.equal("1-b-t" );
var test_template = twig({data: '{{ [1,2,4,76]|join }}' });
test_template.render().should.equal("12476" );
test_template = twig({data: '{{ [1+ 5,2,4,76]|join("-" ~ ".") }}' });
test_template.render().should.equal("6-.2-.4-.76" );
var test_template = twig({data: '{{ var|default("Not Defined") }}' });
test_template.render({"var":"value"}).should.equal("value" );
var test_template = twig({data: '{{ var|default("Not Defined") }}' });
test_template.render().should.equal("Not Defined" );
var test_template = twig({data: '{{ ""|default("Empty String") }}' });
test_template.render().should.equal("Empty String" );
test_template = twig({data: '{{ var.key|default("Empty Key") }}' });
test_template.render({'var':{}}).should.equal("Empty Key" );
var template = twig({data: '{{ 27571323556|date("d/m/Y @ H:i:s") }}'})
, date = new Date(27571323556000); // 13/09/2843 @ 08:59:16 EST
template.render().should.equal( stringDate(date) );
var template = twig({data: '{{ "Tue Aug 14 08:52:15 +0000 2007"|date("d/m/Y @ H:i:s") }}'})
, date = new Date(1187081535000); // 14/08/2007 @ 04:52:15 EST
template.render().should.equal( stringDate(date) );
var template = twig({data: '{{ "I like %this% and %that%."|replace({"%this%": foo, "%that%": "bar"}) }}'});
template.render({foo: "foo"}).should.equal("I like foo and bar." );
var template = twig({data: '{{ "I like %s and %s."|format(foo, "bar") }}'});
template.render({foo: "foo"}).should.equal("I like foo and bar." );
var template = twig({data: '{{ "<p>Test paragraph.</p><!-- Comment --> <a href=\\"#fragment\\">Other text</a>"|striptags }}'});
template.render().should.equal("Test paragraph. Other text" );
var template = twig({data: '{{ "<p>Test paragraph.</p><!-- Comment --> <a href=\'#fragment\'>Other text</a>"|escape }}'});
template.render().should.equal("<p>Test paragraph.</p><!-- Comment --> <a href='#fragment\'>Other text</a>" );
var template = twig({data: '{{ "<p>Test paragraph.</p><!-- Comment --> <a href=\'#fragment\'>Other text</a>"|e }}'});
template.render().should.equal("<p>Test paragraph.</p><!-- Comment --> <a href='#fragment\'>Other text</a>" );
var template = twig({data: '{{ test|nl2br }}'});
template.render({ test: 'Line 1\r\nLine 2\nLine 3\rLine 4\n\n' }).should.equal("Line 1<br />Line 2<br />Line 3<br />Line 4<br /><br />");
var template = twig({data: '{{ test|trim }}'});
template.render({ test: '\r\n Test\n ' }).should.equal("Test");
var template = twig({data: '{{ 1234.56|number_format }}'});
template.render().should.equal("1,235");
var template = twig({data: '{{ 1234.567890123|number_format(4) }}'});
template.render().should.equal("1,234.5679");
var template = twig({data: '{{ 1234.567890123|number_format(2,",") }}'});
template.render().should.equal("1,234,57");
var template = twig({data: '{{ 1234.5678|number_format(2,","," ") }}'});
template.render().should.equal("1 234,57");
twig({
id: 'fs-node-async',
path: 'test/templates/test.twig',
load: function(template) {
// Render the template
template.render({
test: "yes",
flag: true
}).should.equal("Test template = yes\n\nFlag set!");
done();
}
});
var template = twig({
id: 'fs-node-sync',
path: 'test/templates/test.twig',
async: false
});
// Render the template
template.render({
test: "yes",
flag: true
}).should.equal("Test template = yes\n\nFlag set!");
twig({
id: 'remote-no-extends',
path: 'test/templates/template.twig',
async: false
});
// Load the template
twig({ref: 'remote-no-extends'}).render({ }).should.equal( "Default Title - body" );
// Test loading a template from a remote endpoint
twig({
id: 'child-extends',
path: 'test/templates/child.twig',
load: function(template) {
template.render({ base: "template.twig" }).should.equal( "Other Title - child" );
done();
}
});
// Test loading a template from a remote endpoint
twig({
id: 'child-parent',
path: 'test/templates/child-parent.twig',
load: function(template) {
template.render({
base: "template.twig",
inner: ':value'
}).should.equal( "Other Title - body:value:child" );
done();
}
});
// Test horizontal reuse
twig({
id: 'use',
path: 'test/templates/use.twig',
load: function(template) {
// Load the template
template.render({ place: "diner" }).should.equal("Coming soon to a diner near you!" );
done();
}
});
// Test rendering and loading one block
twig({
id: 'blocks',
path: 'test/templates/blocks.twig',
load: function(template) {
// Render the template with the blocks parameter
template.render({ place: "block" }, {output: 'blocks'}).msg.should.equal("Coming soon to a block near you!" );
done();
}
});
twig({
id: 'include',
path: 'test/templates/include.twig',
async: false
});
// Load the template
twig({ref: 'include'}).render({test: 'tst'}).should.equal( "BeforeTest template = tst\n\nAfter" );
twig({
id: 'include-with',
path: 'test/templates/include-with.twig',
async: false
});
// Load the template
twig({ref: 'include-with'}).render({test: 'tst', a: 'pass'}).should.equal( "template: before,tst-mid-template: pass,tst" );
twig({
id: 'include-only',
path: 'test/templates/include-only.twig',
async: false
});
// Load the template
twig({ref: 'include-only'}).render({test: 'tst'}).should.equal( "template: before,-mid-template: after," );
twig({data: '{{ square(a) }}'}).render({a:4}).should.equal("16");
twig({data: '{{ square(a) + 4 }}'}).render({a:4}).should.equal("20");
twig({data: '{{ echo(a)|default("foo") }}'}).render().should.equal("foo");
twig({data: '{% for i in list(1, 2, 3) %}{{ i }},{% endfor %}'}).render().should.equal("1,2,3,");
twig({data: '{{ square ( square ) + square }}'}).render({square: 2}).should.equal("6");
twig({data: '{% if echo(true) or echo(false) %}yes{% endif %}'}).render().should.equal("yes");
twig({
data: '{{ value }}'
}).render({
value: function() {
return "test";
}
}).should.equal("test");
twig({
data: '{{ value }}'
}).render({
test: "value",
value: function() {
return this.test;
}
}).should.equal("value");
twig({
data: '{{ value(1, "test") }}'
}).render({
value: function(a, b, c) {
return a + "-" + b + "-" + (c===undefined?"true":"false");
}
}).should.equal("1-test-true");
twig({
data: '{{ value }}'
}).render({
test: "value",
value: function() {
return this.test;
}
}).should.equal("value");
twig({
data: '{{ obj.value }}'
}).render({
obj: {
value: function() {
return "test";
}
}
}).should.equal("test");
twig({
data: '{{ obj.value(1, "test") }}'
}).render({
obj: {
value: function(a, b, c) {
return a + "-" + b + "-" + (c===undefined?"true":"false");
}
}
}).should.equal("1-test-true");
twig({
data: '{{ obj["value"] }}'
}).render({
obj: {
value: function() {
return "test";
}
}
}).should.equal("test");
twig({
data: '{{ obj["value"](1, "test") }}'
}).render({
obj: {
value: function(a, b, c) {
return a + "-" + b + "-" + (c===undefined?"true":"false");
}
}
}).should.equal("1-test-true");
twig({data: '{% for i in range(0, 3) %}{{ i }},{% endfor %}'}).render().should.equal("0,1,2,3,");
twig({data: '{% for i in range("a", "c") %}{{ i }},{% endfor %}'}).render().should.equal("a,b,c,");
twig({data: '{% for i in range(1, 15, 3) %}{{ i }},{% endfor %}'}).render().should.equal("1,4,7,10,13,");
twig({data: '{% for i in 0..3 %}{{ i }},{% endfor %}'}).render().should.equal("0,1,2,3,");
twig({data: '{% for i in "a" .. "c" %}{{ i }},{% endfor %}'}).render().should.equal("a,b,c,");
twig({data: '{% for i in range(0, 3) %}{{ cycle(["odd", "even"], i) }};{% endfor %}'}).render().should.equal("odd;even;odd;even;");
var date = new Date(946706400 * 1000);
twig({data: '{{ date(946706400)|date("d/m/Y @ H:i:s") }}'}).render().should.equal(stringDate(date));
twig({data: '{{ date("+1 day") > date() }}'}).render().should.equal("true");
twig({data: '{{ date("-1 day") > date() }}'}).render().should.equal("false");
twig({data: '{{ date("now") }}' }).render().should.equal(new Date().toString());
var date = new Date("June 20, 2010 UTC");
twig({data: '{{ date("June 20, 2010 UTC")|date("d/m/Y @ H:i:s") }}'}).render().should.equal(stringDate(date));
twig({data: '{{ dump(test) }}' }).render({ test: 5 }).should.equal('number(5)' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: "String" }).should.equal('string(6) "String"' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: true }).should.equal('bool(true)' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: null }).should.equal('NULL' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: {} }).should.equal('object(0) {' + EOL + '}' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: [] }).should.equal('object(0) {' + EOL + '}' + EOL);
twig({data: '{{ dump(test) }}' }).render({ test: undefined }).should.equal('undefined' + EOL);
// number
twig({data: '{{ 1 is empty }}'}).render().should.equal("false" );
twig({data: '{{ 0 is empty }}'}).render().should.equal("false" );
// String
twig({data: '{{ "" is empty }}'}).render().should.equal("true" );
twig({data: '{{ "test" is empty }}'}).render().should.equal("false" );
// Array
twig({data: '{{ [] is empty }}'}).render().should.equal("true" );
twig({data: '{{ ["1"] is empty }}'}).render().should.equal("false" );
// Object
twig({data: '{{ {} is empty }}'}).render().should.equal("true" );
twig({data: '{{ {"a":"b"} is empty }}'}).render().should.equal("false" );
twig({data: '{{ {"a":"b"} is not empty }}'}).render().should.equal("true" );
twig({data: '{{ (1 + 4) is odd }}'}).render().should.equal("true" );
twig({data: '{{ 6 is odd }}'}).render().should.equal("false" );
twig({data: '{{ (1 + 4) is even }}'}).render().should.equal("false" );
twig({data: '{{ 6 is even }}'}).render().should.equal("true" );
twig({data: '{{ 5 is divisibleby(3) }}'}).render().should.equal("false" );
twig({data: '{{ 6 is divisibleby(3) }}'}).render().should.equal("true" );
twig({data: '{{ key is defined }}'}).render().should.equal("false" );
twig({data: '{{ key is defined }}'}).render({key: "test"}).should.equal( "true" );
twig({data: '{{ key is none }}'}).render().should.equal("false");
twig({data: '{{ key is none }}'}).render({key: "test"}).should.equal("false");
twig({data: '{{ key is none }}'}).render({key: null}).should.equal("true");
twig({data: '{{ key is null }}'}).render({key: null}).should.equal("true");
twig({data: '{{ true is sameas(true) }}'}).render().should.equal("true");
twig({data: '{{ a is sameas(1) }}'}).render({a: 1}).should.equal("true");
twig({data: '{{ a is sameas("test") }}'}).render({a: "test"}).should.equal("true");
twig({data: '{{ a is sameas(true) }}'}).render({a: true}).should.equal("true");
twig({data: '{{ false is sameas(true) }}'}).render().should.equal("false");
twig({data: '{{ true is sameas(1) }}'}).render().should.equal("false");
twig({data: '{{ false is sameas("") }}'}).render().should.equal("false");
twig({data: '{{ a is sameas(1) }}'}).render({a: "1"}).should.equal("false");