Gim/internal/syntax/registry_test.go
Hayden Hargreaves 64c448c639
All checks were successful
Run Test Suite / test (push) Successful in 37s
test: updated tests and pulled theme into EditorSettings.
2026-04-08 17:19:32 -07:00

111 lines
2.3 KiB
Go

package syntax
import "testing"
func TestLanguageRegistryResolve(t *testing.T) {
r := newLanguageRegistry()
tests := []struct {
name string
args struct {
filetype string
filename string
}
expected string
wantErr bool
}{
{
name: "resolve by filetype",
args: struct {
filetype string
filename string
}{filetype: "go"},
expected: "go",
wantErr: false,
},
{
name: "resolve by extension",
args: struct {
filetype string
filename string
}{filename: "main.js"},
expected: "javascript",
wantErr: false,
},
{
name: "filetype has precedence over extension",
args: struct {
filetype string
filename string
}{filetype: "python", filename: "main.go"},
expected: "python",
wantErr: false,
},
{
name: "normalizes case and whitespace",
args: struct {
filetype string
filename string
}{filetype: " Go "},
expected: "go",
wantErr: false,
},
{
name: "unknown language does not resolve",
args: struct {
filetype string
filename string
}{filetype: "txt", filename: "notes.txt"},
expected: "",
wantErr: false,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
res, ok, err := r.resolve(tc.args.filetype, tc.args.filename)
if (err != nil) != tc.wantErr {
t.Fatalf("resolve error = %v, wantErr=%v", err, tc.wantErr)
}
if tc.expected == "" {
if ok || res != nil {
t.Fatalf("expected unresolved language, got ok=%v res=%+v", ok, res)
}
return
}
if !ok || res == nil {
t.Fatalf("expected language %q to resolve", tc.expected)
}
if res.id != tc.expected {
t.Fatalf("resolved id mismatch: got %q want %q", res.id, tc.expected)
}
})
}
}
func TestLanguageRegistryResolveReusesCompiledAssets(t *testing.T) {
r := newLanguageRegistry()
first, ok, err := r.resolve("go", "")
if err != nil {
t.Fatalf("resolve error: %v", err)
}
if !ok || first == nil {
t.Fatalf("expected first resolution to succeed")
}
second, ok, err := r.resolve("golang", "")
if err != nil {
t.Fatalf("resolve error: %v", err)
}
if !ok || second == nil {
t.Fatalf("expected second resolution to succeed")
}
if first != second {
t.Fatalf("expected compiled assets to be reused for same language id")
}
}