Skip to content

Make projecttestutil.Setup generic, avoid casts. #1353

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions internal/ls/completions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2051,7 +2051,7 @@ func runTest(t *testing.T, files map[string]string, expected map[string]*testCas
if mainFileName == "" {
mainFileName = defaultMainFileName
}
parsedFiles := make(map[string]any)
parsedFiles := make(map[string]string)
parsedFiles[defaultTsconfigFileName] = `{}`
var markerPositions map[string]*fourslash.Marker
for fileName, content := range files {
Expand Down Expand Up @@ -2126,9 +2126,9 @@ func assertIncludesItem(t *testing.T, actual *lsproto.CompletionList, expected *
return false
}

func createLanguageService(ctx context.Context, fileName string, files map[string]any) (*ls.LanguageService, func()) {
func createLanguageService(ctx context.Context, fileName string, files map[string]string) (*ls.LanguageService, func()) {
projectService, _ := projecttestutil.Setup(files, nil)
projectService.OpenFile(fileName, files[fileName].(string), core.GetScriptKindFromFileName(fileName), "")
projectService.OpenFile(fileName, files[fileName], core.GetScriptKindFromFileName(fileName), "")
project := projectService.Projects()[0]
return project.GetLanguageServiceForRequest(ctx)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/ls/definition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func runDefinitionTest(t *testing.T, input string, expected map[string]lsproto.D
file := testData.Files[0].FileName()
markerPositions := testData.MarkerPositions
ctx := projecttestutil.WithRequestID(t.Context())
languageService, done := createLanguageService(ctx, file, map[string]any{
languageService, done := createLanguageService(ctx, file, map[string]string{
file: testData.Files[0].Content,
})
defer done()
Expand Down
2 changes: 1 addition & 1 deletion internal/ls/findallreferences_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func runFindReferencesTest(t *testing.T, input string, expectedLocations map[str
testData := fourslash.ParseTestData(t, input, "/file1.ts")
markerPositions := testData.MarkerPositions
ctx := projecttestutil.WithRequestID(t.Context())
service, done := createLanguageService(ctx, testData.Files[0].FileName(), map[string]any{
service, done := createLanguageService(ctx, testData.Files[0].FileName(), map[string]string{
testData.Files[0].FileName(): testData.Files[0].Content,
})
defer done()
Expand Down
2 changes: 1 addition & 1 deletion internal/ls/signaturehelp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1021,7 +1021,7 @@ func runSignatureHelpTest(t *testing.T, input string, expected map[string]verify
file := testData.Files[0].FileName()
markerPositions := testData.MarkerPositions
ctx := projecttestutil.WithRequestID(t.Context())
languageService, done := createLanguageService(ctx, file, map[string]any{
languageService, done := createLanguageService(ctx, file, map[string]string{
file: testData.Files[0].Content,
})
defer done()
Expand Down
84 changes: 42 additions & 42 deletions internal/project/ata_test.go

Large diffs are not rendered by default.

66 changes: 33 additions & 33 deletions internal/project/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestService(t *testing.T) {
t.Skip("bundled files are not embedded")
}

defaultFiles := map[string]any{
defaultFiles := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true,
Expand All @@ -39,7 +39,7 @@ func TestService(t *testing.T) {
t.Parallel()
service, _ := projecttestutil.Setup(defaultFiles, nil)
assert.Equal(t, len(service.Projects()), 0)
service.OpenFile("/home/projects/TS/p1/src/index.ts", defaultFiles["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", defaultFiles["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
assert.Equal(t, len(service.Projects()), 1)
p := service.Projects()[0]
assert.Equal(t, p.Kind(), project.KindConfigured)
Expand All @@ -51,7 +51,7 @@ func TestService(t *testing.T) {
t.Run("create inferred project", func(t *testing.T) {
t.Parallel()
service, _ := projecttestutil.Setup(defaultFiles, nil)
service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"], core.ScriptKindTS, "")
// Find tsconfig, load, notice config.ts is not included, create inferred project
assert.Equal(t, len(service.Projects()), 2)
_, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/config.ts")
Expand All @@ -61,7 +61,7 @@ func TestService(t *testing.T) {
t.Run("inferred project for in-memory files", func(t *testing.T) {
t.Parallel()
service, _ := projecttestutil.Setup(defaultFiles, nil)
service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"], core.ScriptKindTS, "")
service.OpenFile("^/untitled/ts-nul-authority/Untitled-1", "x", core.ScriptKindTS, "")
service.OpenFile("^/untitled/ts-nul-authority/Untitled-2", "y", core.ScriptKindTS, "")
assert.Equal(t, len(service.Projects()), 2)
Expand All @@ -74,11 +74,11 @@ func TestService(t *testing.T) {

t.Run("inferred project JS file", func(t *testing.T) {
t.Parallel()
jsFiles := map[string]any{
jsFiles := map[string]string{
"/home/projects/TS/p1/index.js": `import { x } from "./x";`,
}
service, _ := projecttestutil.Setup(jsFiles, nil)
service.OpenFile("/home/projects/TS/p1/index.js", jsFiles["/home/projects/TS/p1/index.js"].(string), core.ScriptKindJS, "")
service.OpenFile("/home/projects/TS/p1/index.js", jsFiles["/home/projects/TS/p1/index.js"], core.ScriptKindJS, "")
assert.Equal(t, len(service.Projects()), 1)
project := service.Projects()[0]
assert.Assert(t, project.GetProgram().GetSourceFile("/home/projects/TS/p1/index.js") != nil)
Expand All @@ -90,7 +90,7 @@ func TestService(t *testing.T) {
t.Run("update script info eagerly and program lazily", func(t *testing.T) {
t.Parallel()
service, _ := projecttestutil.Setup(defaultFiles, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
info, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts")
programBefore := proj.GetProgram()
err := service.ChangeFile(
Expand Down Expand Up @@ -128,7 +128,7 @@ func TestService(t *testing.T) {
t.Run("unchanged source files are reused", func(t *testing.T) {
t.Parallel()
service, _ := projecttestutil.Setup(defaultFiles, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
_, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts")
programBefore := proj.GetProgram()
indexFileBefore := programBefore.GetSourceFile("/home/projects/TS/p1/src/index.ts")
Expand Down Expand Up @@ -166,7 +166,7 @@ func TestService(t *testing.T) {
files := maps.Clone(defaultFiles)
files["/home/projects/TS/p1/y.ts"] = `export const y = 2;`
service, _ := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
assert.Check(t, service.DocumentStore().GetScriptInfoByPath(serviceToPath(service, "/home/projects/TS/p1/y.ts")) == nil)
// Avoid using initial file set after this point
files = nil //nolint:ineffassign
Expand Down Expand Up @@ -212,7 +212,7 @@ func TestService(t *testing.T) {
"include": ["src/index.ts"]
}`
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
programBefore := project.GetProgram()
assert.Equal(t, len(programBefore.GetSourceFiles()), 2)
Expand Down Expand Up @@ -277,8 +277,8 @@ func TestService(t *testing.T) {
t.Parallel()
files := maps.Clone(defaultFiles)
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
assert.Equal(t, service.DocumentStore().SourceFileCount(), 2)
// Avoid using initial file set after this point
files = nil //nolint:ineffassign
Expand Down Expand Up @@ -307,8 +307,8 @@ func TestService(t *testing.T) {
files := maps.Clone(defaultFiles)
delete(files, "/home/projects/TS/p1/tsconfig.json")
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
// Avoid using initial file set after this point
files = nil //nolint:ineffassign

Expand Down Expand Up @@ -345,8 +345,8 @@ func TestService(t *testing.T) {
}`
files["/home/projects/TS/p2/src/index.ts"] = `import { x } from "../../p1/src/x";`
service, _ := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"], core.ScriptKindTS, "")
assert.Equal(t, len(service.Projects()), 2)
// Avoid using initial file set after this point
files = nil //nolint:ineffassign
Expand All @@ -370,8 +370,8 @@ func TestService(t *testing.T) {
}`
files["/home/projects/TS/p2/src/index.ts"] = `import { x } from "../../p1/src/x";`
service, _ := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"], core.ScriptKindTS, "")
assert.Equal(t, len(service.Projects()), 2)
// Avoid using initial file set after this point
files = nil //nolint:ineffassign
Expand All @@ -391,8 +391,8 @@ func TestService(t *testing.T) {
t.Parallel()
files := maps.Clone(defaultFiles)
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
programBefore := project.GetProgram()
// Avoid using initial file set after this point
Expand All @@ -415,7 +415,7 @@ func TestService(t *testing.T) {
t.Parallel()
files := maps.Clone(defaultFiles)
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
programBefore := project.GetProgram()
// Avoid using initial file set after this point
Expand All @@ -436,7 +436,7 @@ func TestService(t *testing.T) {

t.Run("change config file", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true,
Expand All @@ -450,7 +450,7 @@ func TestService(t *testing.T) {
}

service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
program := project.GetProgram()
assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
Expand All @@ -476,7 +476,7 @@ func TestService(t *testing.T) {

t.Run("delete explicitly included file", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true,
Expand All @@ -487,7 +487,7 @@ func TestService(t *testing.T) {
"/home/projects/TS/p1/src/index.ts": `import { x } from "./x";`,
}
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
program := project.GetProgram()
assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
Expand All @@ -509,7 +509,7 @@ func TestService(t *testing.T) {

t.Run("delete wildcard included file", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true
Expand All @@ -520,7 +520,7 @@ func TestService(t *testing.T) {
"/home/projects/TS/p1/src/x.ts": `let y = x;`,
}
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts")
program := project.GetProgram()
assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 0)
Expand All @@ -541,7 +541,7 @@ func TestService(t *testing.T) {

t.Run("create explicitly included file", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true
Expand All @@ -551,7 +551,7 @@ func TestService(t *testing.T) {
"/home/projects/TS/p1/src/index.ts": `import { y } from "./y";`,
}
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
program := project.GetProgram()

Expand Down Expand Up @@ -599,7 +599,7 @@ func TestService(t *testing.T) {

t.Run("create failed lookup location", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true
Expand All @@ -609,7 +609,7 @@ func TestService(t *testing.T) {
"/home/projects/TS/p1/src/index.ts": `import { z } from "./z";`,
}
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
program := project.GetProgram()

Expand Down Expand Up @@ -640,7 +640,7 @@ func TestService(t *testing.T) {

t.Run("create wildcard included file", func(t *testing.T) {
t.Parallel()
files := map[string]any{
files := map[string]string{
"/home/projects/TS/p1/tsconfig.json": `{
"compilerOptions": {
"noLib": true
Expand All @@ -650,7 +650,7 @@ func TestService(t *testing.T) {
"/home/projects/TS/p1/src/index.ts": `a;`,
}
service, host := projecttestutil.Setup(files, nil)
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "")
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
program := project.GetProgram()

Expand Down
4 changes: 2 additions & 2 deletions internal/testutil/projecttestutil/projecttestutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func (p *ProjectServiceHost) Client() project.Client {

var _ project.ServiceHost = (*ProjectServiceHost)(nil)

func Setup(files map[string]any, testOptions *TestTypingsInstaller) (*project.Service, *ProjectServiceHost) {
func Setup[FileContents any](files map[string]FileContents, testOptions *TestTypingsInstaller) (*project.Service, *ProjectServiceHost) {
host := newProjectServiceHost(files)
if testOptions != nil {
host.TestOptions = &testOptions.TestTypingsInstallerOptions
Expand Down Expand Up @@ -212,7 +212,7 @@ func appendTypesRegistryConfig(builder *strings.Builder, index int, entry string
builder.WriteString(fmt.Sprintf("\n \"%s\": {%s\n }", entry, TypesRegistryConfigText()))
}

func newProjectServiceHost(files map[string]any) *ProjectServiceHost {
func newProjectServiceHost[FileContents any](files map[string]FileContents) *ProjectServiceHost {
fs := bundled.WrapFS(vfstest.FromMap(files, false /*useCaseSensitiveFileNames*/))
host := &ProjectServiceHost{
fs: fs,
Expand Down