111 lines
2.3 KiB
Go
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")
|
|
}
|
|
}
|