Files
kjol/tools/tsgo/internal/api/proto_test.go
2026-07-09 16:50:43 -04:00

84 lines
2.0 KiB
Go

package api_test
import (
"strings"
"testing"
"github.com/microsoft/typescript-go/internal/api"
"github.com/microsoft/typescript-go/internal/ast"
"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/diagnostics"
"github.com/microsoft/typescript-go/internal/json"
"github.com/microsoft/typescript-go/internal/parser"
"gotest.tools/v3/assert"
)
func TestDocumentIdentifierUnmarshalJSON(t *testing.T) {
t.Parallel()
tests := []struct {
name string
input string
fileName string
uri string
err string
}{
{
name: "plain string",
input: `"foo.ts"`,
fileName: "foo.ts",
},
{
name: "uri object",
input: `{"uri":"file:///foo.ts"}`,
uri: "file:///foo.ts",
},
{
name: "uri object with unknown fields",
input: `{"uri":"file:///foo.ts","extra":true}`,
uri: "file:///foo.ts",
},
{
name: "empty object",
input: `{}`,
},
{
name: "invalid type",
input: `42`,
err: "expected string or object, got number",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var d api.DocumentIdentifier
err := json.Unmarshal([]byte(tt.input), &d)
if tt.err != "" {
assert.ErrorContains(t, err, tt.err)
return
}
assert.NilError(t, err)
assert.Equal(t, d.FileName, tt.fileName)
assert.Equal(t, string(d.URI), tt.uri)
})
}
}
func TestNewDiagnosticResponseUsesUTF16Offsets(t *testing.T) {
t.Parallel()
text := "const 💩 = 1;"
file := parser.ParseSourceFile(ast.SourceFileParseOptions{FileName: "/unicode.ts"}, text, core.ScriptKindTS)
pos := strings.Index(text, "=")
assert.Assert(t, pos > 0)
end := pos + len("=")
diag := ast.NewDiagnostic(file, core.NewTextRange(pos, end), diagnostics.Expression_expected)
resp := api.NewDiagnosticResponse(diag)
assert.Equal(t, resp.Pos, 9)
assert.Equal(t, resp.End, 10)
assert.Equal(t, resp.Pos, file.GetPositionMap().UTF8ToUTF16(pos))
assert.Equal(t, resp.End, file.GetPositionMap().UTF8ToUTF16(end))
}