Gim/internal/syntax/query_assets_test.go
Hayden Hargreaves 6034e44364
All checks were successful
Run Test Suite / test (push) Successful in 35s
feat: implemented more languages
HTML isnt great, but I guess there isnt much to color, or maybe its just
the styles. The next step is making the colorschemes.
2026-04-07 11:40:34 -07:00

102 lines
5.2 KiB
Go

package syntax
import (
"testing"
sitter "github.com/tree-sitter/go-tree-sitter"
ts_bash "github.com/tree-sitter/tree-sitter-bash/bindings/go"
ts_csharp "github.com/tree-sitter/tree-sitter-c-sharp/bindings/go"
ts_c "github.com/tree-sitter/tree-sitter-c/bindings/go"
ts_cpp "github.com/tree-sitter/tree-sitter-cpp/bindings/go"
ts_css "github.com/tree-sitter/tree-sitter-css/bindings/go"
ts_go "github.com/tree-sitter/tree-sitter-go/bindings/go"
ts_html "github.com/tree-sitter/tree-sitter-html/bindings/go"
ts_java "github.com/tree-sitter/tree-sitter-java/bindings/go"
ts_js "github.com/tree-sitter/tree-sitter-javascript/bindings/go"
ts_json "github.com/tree-sitter/tree-sitter-json/bindings/go"
ts_python "github.com/tree-sitter/tree-sitter-python/bindings/go"
ts_ruby "github.com/tree-sitter/tree-sitter-ruby/bindings/go"
ts_rust "github.com/tree-sitter/tree-sitter-rust/bindings/go"
ts_ts "github.com/tree-sitter/tree-sitter-typescript/bindings/go"
)
func TestEmbeddedQueriesLoadAndCompile(t *testing.T) {
tests := []struct {
name string
loadQuery func() ([]byte, error)
expectNonNil bool
}{
{name: "go", loadQuery: loadGoHighlightsQuery, expectNonNil: true},
{name: "javascript", loadQuery: loadJavaScriptHighlightsQuery, expectNonNil: true},
{name: "typescript", loadQuery: loadTypeScriptHighlightsQuery, expectNonNil: true},
{name: "tsx", loadQuery: loadTSXHighlightsQuery, expectNonNil: true},
{name: "python", loadQuery: loadPythonHighlightsQuery, expectNonNil: true},
{name: "rust", loadQuery: loadRustHighlightsQuery, expectNonNil: true},
{name: "bash", loadQuery: loadBashHighlightsQuery, expectNonNil: true},
{name: "json", loadQuery: loadJSONHighlightsQuery, expectNonNil: true},
{name: "css", loadQuery: loadCSSHighlightsQuery, expectNonNil: true},
{name: "html", loadQuery: loadHTMLHighlightsQuery, expectNonNil: true},
{name: "c", loadQuery: loadCHighlightsQuery, expectNonNil: true},
{name: "cpp", loadQuery: loadCppHighlightsQuery, expectNonNil: true},
{name: "java", loadQuery: loadJavaHighlightsQuery, expectNonNil: true},
{name: "csharp", loadQuery: loadCSharpHighlightsQuery, expectNonNil: true},
{name: "ruby", loadQuery: loadRubyHighlightsQuery, expectNonNil: true},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
b, err := tc.loadQuery()
if err != nil {
t.Fatalf("failed loading embedded query: %v", err)
}
if tc.expectNonNil && b == nil {
t.Fatalf("expected non-nil embedded query bytes")
}
})
}
}
func TestEmbeddedQueriesCompileKnownGood(t *testing.T) {
compileTests := []struct {
name string
loadQuery func() ([]byte, error)
newLanguage func() *sitter.Language
}{
{name: "go", loadQuery: loadGoHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_go.Language()) }},
{name: "javascript", loadQuery: loadJavaScriptHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_js.Language()) }},
{name: "typescript", loadQuery: loadTypeScriptHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ts.LanguageTypescript()) }},
{name: "tsx", loadQuery: loadTSXHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ts.LanguageTSX()) }},
{name: "python", loadQuery: loadPythonHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_python.Language()) }},
{name: "rust", loadQuery: loadRustHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_rust.Language()) }},
{name: "bash", loadQuery: loadBashHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_bash.Language()) }},
{name: "json", loadQuery: loadJSONHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_json.Language()) }},
{name: "css", loadQuery: loadCSSHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_css.Language()) }},
{name: "html", loadQuery: loadHTMLHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_html.Language()) }},
{name: "c", loadQuery: loadCHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_c.Language()) }},
{name: "cpp", loadQuery: loadCppHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_cpp.Language()) }},
{name: "java", loadQuery: loadJavaHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_java.Language()) }},
{name: "csharp", loadQuery: loadCSharpHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_csharp.Language()) }},
{name: "ruby", loadQuery: loadRubyHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ruby.Language()) }},
}
for _, tc := range compileTests {
t.Run(tc.name, func(t *testing.T) {
b, err := tc.loadQuery()
if err != nil {
t.Fatalf("failed loading embedded query: %v", err)
}
lang := tc.newLanguage()
if lang == nil {
t.Fatalf("language handle is nil")
}
q, qErr := sitter.NewQuery(lang, string(b))
if qErr != nil {
t.Fatalf("embedded query failed to compile: %v", qErr)
}
q.Close()
})
}
}