84 lines
2.0 KiB
Go
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))
|
|
}
|