local lud = require "ludweb"
local render = lud.template.render_str
local Suite = {}
function Suite.render_nop()
local str = "foo bar\n"
assert(render(str) == str)
end
function Suite.render_literal_expr()
local cases = {
{"foo {{13}} bar", "foo 13 bar"},
{"foo {{13+21}} bar", "foo 34 bar"},
{"{{(13+21)..' things'}}", "34 things"},
}
for i, case in ipairs(cases) do
assert(render(case[1].."\n") == case[2].."\n", "failed for case "..i)
end
end
function Suite.render_var_expr()
local cases = {
{"foo {{$n}} {{$foo}}", "foo 42 bar"},
{"foo {{$n+21}} {{$foo}}", "foo 63 bar"},
{"{{($n+21)..' things'}}", "63 things"},
}
local env = {n=42, foo="bar"}
for i, case in ipairs(cases) do
assert(render(case[1].."\n", env) == case[2].."\n", "failed for case "..i)
end
end
function Suite.render_assign()
local str = ([[
% set foo = "bar"
foo = {{$foo}}
]]):gsub(" *$", "")
local r = render(str, {foo=true})
assert(r:gsub("^%s*", "") == "foo = bar\n")
end
function Suite.render_if()
local str = ([[
% if $foo then
foo is true
% else
foo is false
% end
]]):gsub(" *$", "")
local r
r = render(str, {foo=true})
assert(r:gsub("^%s*", "") == "foo is true\n")
r = render(str, {foo=false})
assert(r:gsub("^%s*", "") == "foo is false\n")
end
function Suite.render_while()
local str = ([[
% set i = 1
% while $i <= 3 do
i = {{$i}}
% set i = $i + 1
% end
]]):gsub(" *$", "")
local r = render(str, {foo=true})
r = r:gsub("^ *", ""):gsub("\n *", "\n")
assert(r == "i = 1\ni = 2\ni = 3\n")
end
function Suite.render_for()
local str = ([[
% for i in {2, 3, 5} do
i = {{$i}}
% end
]]):gsub(" *$", "")
local r = render(str, {foo=true})
r = r:gsub("^ *", ""):gsub("\n *", "\n")
assert(r == "i = 2\ni = 3\ni = 5\n")
end
return Suite