parse_test.go
// Copyright (c) 2014 Alex Kalyvitis
package mustache
import (
"reflect"
"testing"
)
func TestParser(t *testing.T) {
for _, test := range []struct {
template string
expected []node
}{
{
"{{#foo}}\n\t{{#foo}}hello nested{{/foo}}{{/foo}}",
[]node{
§ionNode{"foo", false, []node{
textNode("\n\t"),
§ionNode{"foo", false, []node{
textNode("hello nested"),
}},
}},
},
},
{
"\nfoo {{bar}} {{#alex}}\r\n\tbaz\n{{/alex}} {{!foo}}",
[]node{
textNode("\nfoo "),
&varNode{"bar", true},
textNode(" "),
§ionNode{"alex", false, []node{
textNode("\r\n\tbaz\n"),
}},
textNode(" "),
commentNode("foo"),
},
},
{
"this will{{^foo}}not{{/foo}} be rendered",
[]node{
textNode("this will"),
§ionNode{"foo", true, []node{
textNode("not"),
}},
textNode(" be rendered"),
},
},
{
"{{#list}}({{.}}){{/list}}",
[]node{
§ionNode{"list", false, []node{
textNode("("),
&varNode{".", true},
textNode(")"),
}},
},
},
} {
parser := newParser(newLexer(test.template, "{{", "}}"))
elems, err := parser.parse()
if err != nil {
t.Fatal(err)
}
for i, elem := range elems {
if !reflect.DeepEqual(elem, test.expected[i]) {
t.Errorf("elements are not equal %v != %v", elem, test.expected[i])
}
}
}
}