vendor tsgo
This commit is contained in:
84
tools/tsgo/internal/checker/checker_test.go
Normal file
84
tools/tsgo/internal/checker/checker_test.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package checker_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/microsoft/typescript-go/internal/ast"
|
||||
"github.com/microsoft/typescript-go/internal/bundled"
|
||||
"github.com/microsoft/typescript-go/internal/checker"
|
||||
"github.com/microsoft/typescript-go/internal/compiler"
|
||||
"github.com/microsoft/typescript-go/internal/core"
|
||||
"github.com/microsoft/typescript-go/internal/repo"
|
||||
"github.com/microsoft/typescript-go/internal/tsoptions"
|
||||
"github.com/microsoft/typescript-go/internal/tspath"
|
||||
"github.com/microsoft/typescript-go/internal/vfs/osvfs"
|
||||
"github.com/microsoft/typescript-go/internal/vfs/vfstest"
|
||||
"gotest.tools/v3/assert"
|
||||
)
|
||||
|
||||
func TestGetSymbolAtLocation(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
content := `interface Foo {
|
||||
bar: string;
|
||||
}
|
||||
declare const foo: Foo;
|
||||
foo.bar;`
|
||||
fs := vfstest.FromMap(map[string]string{
|
||||
"/foo.ts": content,
|
||||
"/tsconfig.json": `
|
||||
{
|
||||
"compilerOptions": {},
|
||||
"files": ["foo.ts"]
|
||||
}
|
||||
`,
|
||||
}, false /*useCaseSensitiveFileNames*/)
|
||||
fs = bundled.WrapFS(fs)
|
||||
|
||||
cd := "/"
|
||||
host := compiler.NewCompilerHost(cd, fs, bundled.LibPath(), nil, nil)
|
||||
|
||||
parsed, errors := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, host, nil)
|
||||
assert.Equal(t, len(errors), 0, "Expected no errors in parsed command line")
|
||||
|
||||
p := compiler.NewProgram(compiler.ProgramOptions{
|
||||
Config: parsed,
|
||||
Host: host,
|
||||
})
|
||||
p.BindSourceFiles()
|
||||
c, done := p.GetTypeChecker(t.Context())
|
||||
defer done()
|
||||
file := p.GetSourceFile("/foo.ts")
|
||||
interfaceId := file.Statements.Nodes[0].Name()
|
||||
varId := file.Statements.Nodes[1].AsVariableStatement().DeclarationList.AsVariableDeclarationList().Declarations.Nodes[0].Name()
|
||||
propAccess := file.Statements.Nodes[2].Expression()
|
||||
nodes := []*ast.Node{interfaceId, varId, propAccess}
|
||||
for _, node := range nodes {
|
||||
symbol := c.GetSymbolAtLocation(node)
|
||||
if symbol == nil {
|
||||
t.Fatalf("Expected symbol to be non-nil")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkNewChecker(b *testing.B) {
|
||||
repo.SkipIfNoTypeScriptSubmodule(b)
|
||||
fs := osvfs.FS()
|
||||
fs = bundled.WrapFS(fs)
|
||||
|
||||
rootPath := tspath.CombinePaths(tspath.NormalizeSlashes(repo.TypeScriptSubmodulePath()), "src", "compiler")
|
||||
|
||||
host := compiler.NewCompilerHost(rootPath, fs, bundled.LibPath(), nil, nil)
|
||||
parsed, errors := tsoptions.GetParsedCommandLineOfConfigFile(tspath.CombinePaths(rootPath, "tsconfig.json"), &core.CompilerOptions{}, nil, host, nil)
|
||||
assert.Equal(b, len(errors), 0, "Expected no errors in parsed command line")
|
||||
p := compiler.NewProgram(compiler.ProgramOptions{
|
||||
Config: parsed,
|
||||
Host: host,
|
||||
})
|
||||
|
||||
b.ReportAllocs()
|
||||
|
||||
for b.Loop() {
|
||||
checker.NewChecker(p, nil)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user