def test_output
parser = PageTemplate::Parser.new()
ns = PageTemplate::Namespace.new()
ns.parent = parser
ns["list"] = [1, 2, 3]
c = PageTemplate::TextCommand.new("Dude!")
loop_1 = PageTemplate::LoopCommand.new("loop", "list", "")
loop_1.add(c)
assert_equal("Dude!Dude!Dude!", loop_1.output(ns))
c_1 = PageTemplate::TextCommand.new("Sweet!")
loop_1.add(c_1)
assert_equal("Dude!Sweet!Dude!Sweet!Dude!Sweet!", loop_1.output(ns))
ns["list"] = nil
assert_equal("", loop_1.output(ns))
c_1 = PageTemplate::TextCommand.new("Sweet!")
c_2 = PageTemplate::TextCommand.new("Dude?")
loop_2 = PageTemplate::LoopCommand.new("loop", "list", "")
loop_2.add(c_1)
loop_2.else
loop_2.add(c_2)
ns["list"] = nil
assert_equal("Dude?", loop_2.output(ns))
ns["list"] = [1, 2]
assert_equal("Sweet!Sweet!", loop_2.output(ns))
c_1 = PageTemplate::TextCommand.new("First Post!")
c_2 = PageTemplate::TextCommand.new("I know kung fu.")
c_3 = PageTemplate::TextCommand.new("Prove it.")
c_4 = PageTemplate::TextCommand.new("Last Post!")
if_1 = PageTemplate::IfCommand.new("if", "__FIRST__")
if_1.add(c_1)
if_2 = PageTemplate::IfCommand.new("if", "__ODD__")
if_2.add(c_2)
if_2.else
if_2.add(c_3)
if_3 = PageTemplate::IfCommand.new("if", "__LAST__")
if_3.add(c_4)
loop_1 = PageTemplate::LoopCommand.new("in", "cliches", "")
loop_1.add(if_1)
loop_1.add(if_2)
loop_1.add(if_3)
ns["cliches"] = [1, 2]
expected = c_1.output + c_2.output + c_3.output + c_4.output
assert_equal(expected, loop_1.output(ns))
loop_1 = PageTemplate::LoopCommand.new("in", "list", "item")
c_1 = PageTemplate::ValueCommand.new("item", nil)
c_2 = PageTemplate::TextCommand.new(" ")
loop_1.add(c_1)
loop_1.add(c_2)
ns["list"] = [0, -1, 2, -3, 4]
expected = ns["list"].join(" ") + " "
assert_equal(expected, loop_1.output(ns))
loop_1 = PageTemplate::LoopCommand.new("in", "names", "key val")
c1 = PageTemplate::ValueCommand.new("key",nil)
c2 = PageTemplate::ValueCommand.new("val",nil)
tc = PageTemplate::TextCommand.new(": ")
loop_1.add c1
loop_1.add tc
loop_1.add c2
ns["names"] = { 'Brian' => 'Wisti', 'Greg' => 'Millam' }
out = ns["names"].map { |fn,ln| "#{fn}: #{ln}" }.join('')
assert_equal(out,loop_1.output(ns))
end