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") } }