8 "github.com/hashicorp/hcl/hcl/token"
11 func TestObjectListFilter(t *testing.T) {
12 var cases = []struct {
23 Token: token.Token{Type: token.STRING, Text: `"foo"`},
40 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"foo"`}},
41 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"bar"`}},
46 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"baz"`}},
53 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"bar"`}},
60 for _, tc := range cases {
61 input := &ObjectList{Items: tc.Input}
62 expected := &ObjectList{Items: tc.Output}
63 if actual := input.Filter(tc.Filter...); !reflect.DeepEqual(actual, expected) {
64 t.Fatalf("in order: input, expected, actual\n\n%#v\n\n%#v\n\n%#v", input, expected, actual)
69 func TestWalk(t *testing.T) {
70 items := []*ObjectItem{
73 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"foo"`}},
74 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"bar"`}},
76 Val: &LiteralType{Token: token.Token{Type: token.STRING, Text: `"example"`}},
80 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"baz"`}},
85 node := &ObjectList{Items: items}
98 Walk(node, func(n Node) (Node, bool) {
103 typeName := reflect.TypeOf(n).String()
104 if order[count] != typeName {
105 t.Errorf("expected '%s' got: '%s'", order[count], typeName)
112 func TestWalkEquality(t *testing.T) {
113 items := []*ObjectItem{
116 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"foo"`}},
121 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"bar"`}},
126 node := &ObjectList{Items: items}
128 rewritten := Walk(node, func(n Node) (Node, bool) { return n, true })
130 newNode, ok := rewritten.(*ObjectList)
132 t.Fatalf("expected Objectlist, got %T", rewritten)
135 if !reflect.DeepEqual(node, newNode) {
136 t.Fatal("rewritten node is not equal to the given node")
139 if len(newNode.Items) != 2 {
140 t.Error("expected newNode length 2, got: %d", len(newNode.Items))
143 expected := []string{
148 for i, item := range newNode.Items {
149 if len(item.Keys) != 1 {
150 t.Error("expected keys newNode length 1, got: %d", len(item.Keys))
153 if item.Keys[0].Token.Text != expected[i] {
154 t.Errorf("expected key %s, got %s", expected[i], item.Keys[0].Token.Text)
158 t.Errorf("expected item value should be nil")
163 func TestWalkRewrite(t *testing.T) {
164 items := []*ObjectItem{
167 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"foo"`}},
168 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"bar"`}},
173 &ObjectKey{Token: token.Token{Type: token.STRING, Text: `"baz"`}},
178 node := &ObjectList{Items: items}
181 node = Walk(node, func(n Node) (Node, bool) {
182 switch i := n.(type) {
184 i.Token.Text = i.Token.Text + suffix
190 Walk(node, func(n Node) (Node, bool) {
191 switch i := n.(type) {
193 if !strings.HasSuffix(i.Token.Text, suffix) {
194 t.Errorf("Token '%s' should have suffix: %s", i.Token.Text, suffix)