aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/ast/parser_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/ast/parser_test.go')
-rw-r--r--pkg/ast/parser_test.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/pkg/ast/parser_test.go b/pkg/ast/parser_test.go
index edbabf3d3..b5861b5a8 100644
--- a/pkg/ast/parser_test.go
+++ b/pkg/ast/parser_test.go
@@ -17,6 +17,7 @@ func TestParseAll(t *testing.T) {
if err != nil || len(files) == 0 {
t.Fatalf("failed to read sys dir: %v", err)
}
+ files = append(files, filepath.FromSlash("testdata/all.txt"))
for _, file := range files {
data, err := ioutil.ReadFile(file)
if err != nil {
@@ -52,6 +53,35 @@ func TestParseAll(t *testing.T) {
if !bytes.Equal(data, data3) {
t.Fatalf("Clone lost data")
}
+ nodes0 := 0
+ desc.Walk(func(n Node) {
+ nodes0++
+ if SerializeNode(n) == "" {
+ t.Fatalf("empty serialized node: %#v", n)
+ }
+ })
+ nodes1 := 0
+ desc.Walk(Recursive(func(n Node) {
+ nodes1++
+ pos, typ, _ := n.Info()
+ if typ == "" {
+ t.Fatalf("%v: node has empty typ=%q: %#v", pos, typ, n)
+ }
+ }))
+ nodes2 := 0
+ desc.Walk(PostRecursive(func(n Node) {
+ nodes2++
+ }))
+ if nodes0 != len(desc.Nodes) || nodes1 <= len(desc.Nodes) || nodes1 != nodes2 {
+ t.Fatalf("bad walk: desc=%v, top=%v recursive=%v, postrecursive=%v",
+ len(desc.Nodes), nodes0, nodes1, nodes2)
+ }
+ desc4 := desc.Filter(func(n Node) bool { return true })
+ desc5 := desc.Filter(func(n Node) bool { return false })
+ if len(desc4.Nodes) != len(desc.Nodes) || len(desc5.Nodes) != 0 {
+ t.Fatalf("Filter is broken: desc=%v desc4=%v desc5=%v",
+ len(desc.Nodes), len(desc4.Nodes), len(desc5.Nodes))
+ }
})
}
}