diff --git a/test/go.mod b/test/go.mod index 337154b..8f3a978 100644 --- a/test/go.mod +++ b/test/go.mod @@ -1,3 +1,13 @@ module github.com/ngalaiko/tree-sitter-go-template/test go 1.24.5 + +replace ( + github.com/ngalaiko/tree-sitter-go-template v0.0.0-20251004152659-ca26229bafcd => .. +) + +require ( + github.com/mattn/go-pointer v0.0.1 // indirect + github.com/ngalaiko/tree-sitter-go-template v0.0.0-20251004152659-ca26229bafcd // indirect + github.com/tree-sitter/go-tree-sitter v0.25.0 // indirect +) diff --git a/test/go.sum b/test/go.sum new file mode 100644 index 0000000..7d66ad4 --- /dev/null +++ b/test/go.sum @@ -0,0 +1,6 @@ +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/ngalaiko/tree-sitter-go-template v0.0.0-20251004152659-ca26229bafcd h1:3ljjNdG6Pp3KycYusuziadPwSpCYwNFxy2C3eNfyGbg= +github.com/ngalaiko/tree-sitter-go-template v0.0.0-20251004152659-ca26229bafcd/go.mod h1:+Ja4HHGKOU5RA6eh7wnPHYBoccp3jl1gBa3ErIHAACw= +github.com/tree-sitter/go-tree-sitter v0.25.0 h1:sx6kcg8raRFCvc9BnXglke6axya12krCJF5xJ2sftRU= +github.com/tree-sitter/go-tree-sitter v0.25.0/go.mod h1:r77ig7BikoZhHrrsjAnv8RqGti5rtSyvDHPzgTPsUuU= diff --git a/test/smoke_test.go b/test/smoke_test.go new file mode 100644 index 0000000..93f9cd9 --- /dev/null +++ b/test/smoke_test.go @@ -0,0 +1,77 @@ +package test + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/ngalaiko/tree-sitter-go-template/bindings/go" + + tree_sitter "github.com/tree-sitter/go-tree-sitter" +) + +var SMOKE_TESTS_DIR = "./smoke_testdata" + +func TestSmoke(t *testing.T) { + filepath.Walk(SMOKE_TESTS_DIR, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() && info.Name() == "templates" { + err := filepath.Walk(path, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + t.Run(path, func(t *testing.T) { + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + testTemplateForErrors(t, content) + }) + } + return nil + }) + if err != nil { + return err + } + } + return nil + }) +} + +func testTemplateForErrors(t *testing.T, input []byte) { + t.Helper() + + language := tree_sitter.NewLanguage(tree_sitter_gotemplate.Language()) + if language == nil { + t.Errorf("Error loading gotemplate grammar") + } + + parser := tree_sitter.NewParser() + defer parser.Close() + parser.SetLanguage(language) + + tree := parser.Parse(input, nil) + if tree == nil { + t.Errorf("Error parsing code") + } + defer tree.Close() + + root := tree.RootNode() + if root == nil { + t.Errorf("Error parsing code") + } + + sexp := root.ToSexp() + + if strings.Contains(sexp, "(ERROR") { + t.Errorf("Unexpected (ERROR) in tree: %s", root.ToSexp()) + } + + if strings.Contains(sexp, "(MISSING") { + t.Errorf("Unexpected (MISSING) in tree: %s", root.ToSexp()) + } +} diff --git a/test/smoke_testdata/my-chart/templates/service.yaml b/test/smoke_testdata/my-chart/templates/service.yaml new file mode 100644 index 0000000..02f54ea --- /dev/null +++ b/test/smoke_testdata/my-chart/templates/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +wrong: key +kind: Service +metadata: + name: {{ include "example.fullname" . }} + labels: + {{- include "example.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "example.selectorLabels" . | nindent 4 }}