dojo.provide("dojox.dtl.tests.html.tag");
dojo.require("dojox.dtl.html");
dojo.require("dojox.dtl.Context");
dojo.require("dojox.dtl.tests.html.util");
doh.register("dojox.dtl.html.tag",
[
function test_errors(t){
var dd = dojox.dtl;
var template;
// No root node after rendering
var found = false;
try {
template = new dd.HtmlTemplate('No div');
dd.tests.html.util.render(template);
}catch(e){
t.is("Text should not exist outside of the root node in template", e.message);
found = true;
}
t.t(found);
var context = new dojox.dtl.Context({test: "Pocket"});
found = false;
try {
template = new dd.HtmlTemplate('{{ test }}');
dd.tests.html.util.render(template, context);
}catch(e){
t.is("Text should not exist outside of the root node in template", e.message);
found = true;
}
t.t(found);
template = new dd.HtmlTemplate('
extra content');
found = false;
try {
dd.tests.html.util.render(template);
}catch(e){
t.is("Content should not exist outside of the root node in template", e.message);
found = true;
}
t.t(found);
// More than one top-level node (except for blocks)
template = new dd.HtmlTemplate('');
found = false;
try {
dd.tests.html.util.render(template);
}catch(e){
t.is("Content should not exist outside of the root node in template", e.message);
found = true;
}
t.t(found);
// Logic block rules out any root node
template = new dd.HtmlTemplate('{% if missing %}{% endif %}');
found = false;
try {
dd.tests.html.util.render(template);
}catch(e){
t.is("Rendered template does not have a root node", e.message);
found = true;
}
t.t(found);
},
function test_structures(t){
var dd = dojox.dtl;
var context = new dd.Context({
actions: ["ate", "picked"],
items: [
{
name: "apple"
},
{
name: "banana",
date: new Date(2007, 2, 16, 14, 30, 10)
},
{
name: "orange",
date: new Date(2008, 0, 1, 12, 0, 0)
}
]
});
var template = new dd.HtmlTemplate('
I {% for action in actions %}{% if not forloop.first %}, {% endif %}{{ action }}{% endfor %} the following:
{% for item in items %}
{{ item.name }}{% if item.date %} at {{ item.date|date:"P" }}{% endif %}
{% endfor %}
');
t.is('
I ate, picked the following:
apple
banana at 2:30 pm
orange at noon
', dd.tests.html.util.render(template, context));
},
function test_tag_attributes(){
var dd = dojox.dtl;
var template = new dd.HtmlTemplate('
', dd.tests.html.util.render(template, context));
},
function test_tag_extend(t){
// Problems to look for:
// * Content outside of blocks
},
function test_tag_for(t){
var dd = dojox.dtl;
var context = new dd.Context({
items: ["apple", "banana", "lemon"]
});
var template = new dd.HtmlTemplate('
{% for item in items %}
{{ item }}
{% endfor %}
');
t.is('
apple
banana
lemon
', dd.tests.html.util.render(template, context));
// The line break is there to make sure our regex works
template = new dd.HtmlTemplate('');
t.is('', dd.tests.html.util.render(template, context));
},
function test_tag_if(t){
var dd = dojox.dtl;
var context = new dd.Context({key: true});
var template = new dd.HtmlTemplate('{% if key %}
", dd.tests.html.util.render(template, context));
},
function test_tag_ifchanged(t){
var dd = dojox.dtl;
var context = new dd.Context({
year: 2008,
days: [
new Date(2008, 0, 12),
new Date(2008, 0, 28),
new Date(2008, 1, 1),
new Date(2008, 1, 1),
new Date(2008, 1, 1)
]
});
var template = new dd.HtmlTemplate("
', dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate("
{% for item in items %}
{% ifequal item.name edit_item %}
{% else %}
{{ item.name }}
{{ item.color }}
{% endifequal %}
{% endfor %}
");
t.is('
apple
red
pear
green
kiwi
brown
', dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate("
{% for item in items %}{% ifequal item.name edit_item %}
{% else %}
{{ item.name }}
{{ item.color }}
{% endifequal %}{% endfor %}
");
t.is('
apple
red
pear
green
kiwi
brown
', dd.tests.html.util.render(template, context));
},
function test_tag_include(t){
var dd = dojox.dtl;
var context = new dd.Context({
hello: dojo.moduleUrl("dojox.dtl.tests.templates", "hello.html"),
person: "Bob",
people: ["Charles", "Ralph", "Julia"]
});
var template = new dd.HtmlTemplate("
{% include hello %}
");
t.is("
Hello, Bob
", dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate('
{% include "../../dojox/dtl/tests/templates/hello.html" %}
');
t.is("
Hello, Bob
", dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate('
{% for person in people %}
{% include hello %}
{% endfor %}
');
t.is('
Hello, Charles
Hello, Ralph
Hello, Julia
', dd.tests.html.util.render(template, context));
},
function test_tag_spaceless(t){
var dd = dojox.dtl;
var template = new dd.HtmlTemplate("{% spaceless %}
\n
Hot
\n\n
Pocket
\n
{% endspaceless %}");
t.is("
Hot
Pocket
", dd.tests.html.util.render(template));
},
function test_tag_ssi(t){
var dd = dojox.dtl;
var context = new dd.Context({
hello: dojo.moduleUrl("dojox.dtl.tests.templates", "hello.html"),
person: "Bob",
people: ["Charles", "Ralph", "Julia"]
});
var template = new dd.HtmlTemplate("
{% ssi hello parsed %}
");
t.is("
Hello, Bob
", dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate("
{% ssi hello %}
");
t.is("
Hello, {{ person }}
", dd.tests.html.util.render(template, context));
template = new dd.HtmlTemplate('