Skip to content
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

Baseline host state when baselining tsserver tests #50678

Merged
merged 9 commits into from Sep 8, 2022
  •  
  •  
  •  
22 changes: 11 additions & 11 deletions src/testRunner/unittests/tsserver/cachingFileSystemInformation.ts
Expand Up @@ -76,7 +76,7 @@ namespace ts.projectSystem {
};

const host = createServerHost([root, imported]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.setCompilerOptionsForInferredProjects({ module: ModuleKind.AMD, noLib: true });
projectService.openClientFile(root.path);
const project = projectService.inferredProjects[0];
Expand Down Expand Up @@ -134,7 +134,7 @@ namespace ts.projectSystem {
};

const host = createServerHost([root]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.setCompilerOptionsForInferredProjects({ module: ModuleKind.AMD, noLib: true });
const logCacheAndClear = createLoggerTrackingHostCalls(host);
projectService.openClientFile(root.path);
Expand All @@ -146,7 +146,7 @@ namespace ts.projectSystem {
logCacheAndClear(projectService.logger);

host.writeFile(imported.path, imported.content);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();
logSemanticDiagnostics(projectService, project, root);
logCacheAndClear(projectService.logger);
baselineTsserverLogs("cachingFileSystemInformation", "loads missing files from disk", projectService);
Expand Down Expand Up @@ -195,7 +195,7 @@ namespace ts.projectSystem {
};
const projectFiles = [clientFile, anotherModuleFile, moduleFile, tsconfigFile];
const host = createServerHost(projectFiles);
const session = createSession(host, { logger: createLoggerWithInMemoryLogs() });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([clientFile], session);
const logCacheAndClear = createLoggerTrackingHostCalls(host);

Expand Down Expand Up @@ -273,14 +273,14 @@ namespace ts.projectSystem {
};
const projectFiles = [file1, file2, es2016LibFile, tsconfigFile];
const host = createServerHost(projectFiles, { useCaseSensitiveFileNames });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(file1.path);

const logCacheAndClear = createLoggerTrackingHostCalls(host);

// Create file cookie.ts
host.writeFile(file3.path, file3.content);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();
logCacheAndClear(projectService.logger);

projectService.openClientFile(file3.path);
Expand Down Expand Up @@ -383,7 +383,7 @@ namespace ts.projectSystem {
`
});
const host = createServerHost([app, libFile, tsconfigJson, packageJson]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.setHostConfiguration({ preferences: { includePackageJsonAutoImports: "off" } });
projectService.openClientFile(app.path);

Expand Down Expand Up @@ -479,15 +479,15 @@ namespace ts.projectSystem {
if (npmInstallComplete || timeoutDuringPartialInstallation) {
if (timeoutQueueLengthWhenRunningTimeouts) {
// Expected project update
host.checkTimeoutQueueLengthAndRun(timeoutQueueLengthWhenRunningTimeouts + 1); // Scheduled invalidation of resolutions
host.runQueuedTimeoutCallbacks(); // Actual update
projectService.checkTimeoutQueueLengthAndRun(timeoutQueueLengthWhenRunningTimeouts + 1); // Scheduled invalidation of resolutions
projectService.runQueuedTimeoutCallbacks(); // Actual update
}
else {
host.checkTimeoutQueueLengthAndRun(timeoutQueueLengthWhenRunningTimeouts);
projectService.checkTimeoutQueueLengthAndRun(timeoutQueueLengthWhenRunningTimeouts);
}
}
else {
host.checkTimeoutQueueLength(3);
projectService.checkTimeoutQueueLength(3);
}
}
}
Expand Down
20 changes: 10 additions & 10 deletions src/testRunner/unittests/tsserver/configFileSearch.ts
Expand Up @@ -38,12 +38,12 @@ namespace ts.projectSystem {
content: "{}"
};
const host = createServerHost([f1, libFile, configFile, configFile2]);
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
service.openClientFile(f1.path, /*fileContent*/ undefined, /*scriptKind*/ undefined, projectDir);

// Delete config file - should create inferred project and not configured project
host.deleteFile(configFile.path);
host.runQueuedTimeoutCallbacks();
service.runQueuedTimeoutCallbacks();
checkNumberOfProjects(service, { inferredProjects: 1 });
baselineTsserverLogs("configFileSearch", "should use projectRootPath when searching for inferred project again", service);
});
Expand All @@ -67,13 +67,13 @@ namespace ts.projectSystem {
const service = createProjectService(host, {
useSingleInferredProject: true,
useInferredProjectPerProjectRoot: true,
logger: createLoggerWithInMemoryLogs(),
logger: createLoggerWithInMemoryLogs(host),
});
service.openClientFile(f1.path, /*fileContent*/ undefined, /*scriptKind*/ undefined, projectDir);

// Delete config file - should create inferred project with project root path set
host.deleteFile(configFile.path);
host.runQueuedTimeoutCallbacks();
service.runQueuedTimeoutCallbacks();
baselineTsserverLogs("configFileSearch", "should use projectRootPath when searching for inferred project again 2", service);
});

Expand All @@ -89,7 +89,7 @@ namespace ts.projectSystem {
};
function openClientFile(files: File[]) {
const host = createServerHost(files);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(file.path, /*fileContent*/ undefined, /*scriptKind*/ undefined, "/a/b/projects/proj");
return { host, projectService };
}
Expand All @@ -98,10 +98,10 @@ namespace ts.projectSystem {
const { host, projectService } = openClientFile([file, libFile, tsconfig]);

host.deleteFile(tsconfig.path);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();

host.writeFile(tsconfig.path, tsconfig.content);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();

baselineTsserverLogs("configFileSearch", "tsconfig for the file exists", projectService);
});
Expand All @@ -110,10 +110,10 @@ namespace ts.projectSystem {
const { host, projectService } = openClientFile([file, libFile]);

host.writeFile(tsconfig.path, tsconfig.content);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();

host.deleteFile(tsconfig.path);
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();

baselineTsserverLogs("configFileSearch", "tsconfig for the file does not exist", projectService);
});
Expand All @@ -124,7 +124,7 @@ namespace ts.projectSystem {
it(scenario, () => {
const path = `/root/teams/VSCode68/Shared Documents/General/jt-ts-test-workspace/x.js`;
const host = createServerHost([libFile, { path, content: "const x = 10" }], { useCaseSensitiveFileNames: true });
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
service.openClientFile(path, /*fileContent*/ undefined, /*scriptKind*/ undefined, projectRootPath);
baselineTsserverLogs("configFileSearch", scenario, service);
});
Expand Down
41 changes: 21 additions & 20 deletions src/testRunner/unittests/tsserver/configuredProjects.ts
Expand Up @@ -25,7 +25,7 @@ namespace ts.projectSystem {
};

const host = createServerHost([configFile, libFile, file1, file2, file3]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
const { configFileName, configFileErrors } = projectService.openClientFile(file1.path);

assert(configFileName, "should find config file");
Expand Down Expand Up @@ -57,7 +57,7 @@ namespace ts.projectSystem {
};

const host = createServerHost([configFile, libFile, file1, file2, file3]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
const { configFileName, configFileErrors } = projectService.openClientFile(file1.path);

assert(configFileName, "should find config file");
Expand All @@ -84,17 +84,17 @@ namespace ts.projectSystem {

const host = createServerHost([libFile, commonFile1, commonFile2]);

const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(commonFile1.path);
projectService.openClientFile(commonFile2.path);

// Add a tsconfig file
host.writeFile(configFile.path, configFile.content);
host.checkTimeoutQueueLengthAndRun(2); // load configured project from disk + ensureProjectsForOpenFiles
projectService.checkTimeoutQueueLengthAndRun(2); // load configured project from disk + ensureProjectsForOpenFiles

// remove the tsconfig file
host.deleteFile(configFile.path);
host.checkTimeoutQueueLengthAndRun(1); // Refresh inferred projects
projectService.checkTimeoutQueueLengthAndRun(1); // Refresh inferred projects

baselineTsserverLogs("configuredProjects", "add and then remove a config file in a folder with loose files", projectService);
});
Expand All @@ -105,12 +105,12 @@ namespace ts.projectSystem {
content: `{}`
};
const host = createServerHost([commonFile1, libFile, configFile]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(commonFile1.path);

// add a new ts file
host.writeFile(commonFile2.path, commonFile2.content);
host.checkTimeoutQueueLengthAndRun(2);
projectService.checkTimeoutQueueLengthAndRun(2);
baselineTsserverLogs("configuredProjects", "add new files to a configured project without file list", projectService);
});

Expand Down Expand Up @@ -537,7 +537,7 @@ namespace ts.projectSystem {

const files = [file1, file2, file3, file4];
const host = createServerHost(files.concat(configFile));
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });

projectService.openClientFile(file1.path);
projectService.openClientFile(file2.path);
Expand All @@ -548,7 +548,7 @@ namespace ts.projectSystem {
assert.isTrue(configProject1.hasOpenRef()); // file1 and file3

host.writeFile(configFile.path, "{}");
host.runQueuedTimeoutCallbacks();
projectService.runQueuedTimeoutCallbacks();

assert.isTrue(configProject1.hasOpenRef()); // file1, file2, file3
assert.isTrue(projectService.inferredProjects[0].isOrphan());
Expand Down Expand Up @@ -577,6 +577,7 @@ namespace ts.projectSystem {
content: "let zz = 1;"
};
host.writeFile(file5.path, file5.content);
projectService.baselineHost("File5 written");
projectService.openClientFile(file5.path);

baselineTsserverLogs("configuredProjects", "Open ref of configured project when open file gets added to the project as part of configured file update", projectService);
Expand Down Expand Up @@ -793,7 +794,7 @@ declare var console: {
};`
};
const host = createServerHost([barConfig, barIndex, fooConfig, fooIndex, barSymLink, lib2017, libDom]);
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs() });
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([fooIndex, barIndex], session);
verifyGetErrRequest({ session, host, files: [barIndex, fooIndex] });
baselineTsserverLogs("configuredProjects", "when multiple projects are open detects correct default project", session);
Expand Down Expand Up @@ -851,7 +852,7 @@ declare var console: {
]);
const session = createSession(host, {
canUseEvents: true,
logger: createLoggerWithInMemoryLogs(),
logger: createLoggerWithInMemoryLogs(host),
});
session.executeCommandSeq<protocol.OpenRequest>({
command: protocol.CommandTypes.Open,
Expand Down Expand Up @@ -1017,7 +1018,7 @@ foo();`
};

const host = createServerHost([alphaExtendedConfig, aConfig, aFile, bravoExtendedConfig, bConfig, bFile, ...(additionalFiles || emptyArray)]);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
return { host, projectService, aFile, bFile, aConfig, bConfig, alphaExtendedConfig, bravoExtendedConfig };
}

Expand All @@ -1032,23 +1033,23 @@ foo();`
strict: true
}
}));
host.checkTimeoutQueueLengthAndRun(3);
projectService.checkTimeoutQueueLengthAndRun(3);

host.writeFile(bravoExtendedConfig.path, JSON.stringify({
extends: "./alpha.tsconfig.json",
compilerOptions: {
strict: false
}
}));
host.checkTimeoutQueueLengthAndRun(2);
projectService.checkTimeoutQueueLengthAndRun(2);

host.writeFile(bConfig.path, JSON.stringify({
extends: "../extended/alpha.tsconfig.json",
}));
host.checkTimeoutQueueLengthAndRun(2);
projectService.checkTimeoutQueueLengthAndRun(2);

host.writeFile(alphaExtendedConfig.path, "{}");
host.checkTimeoutQueueLengthAndRun(3);
projectService.checkTimeoutQueueLengthAndRun(3);
baselineTsserverLogs("configuredProjects", "should watch the extended configs of multiple projects", projectService);
});

Expand Down Expand Up @@ -1178,12 +1179,12 @@ foo();`
};
const files = [file1, file2a, configFile, libFile];
const host = createServerHost(files);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(file1.path);

host.writeFile(file2.path, file2.content);
host.runQueuedTimeoutCallbacks(); // Scheduled invalidation of resolutions
host.runQueuedTimeoutCallbacks(); // Actual update
projectService.runQueuedTimeoutCallbacks(); // Scheduled invalidation of resolutions
projectService.runQueuedTimeoutCallbacks(); // Actual update

// On next file open the files file2a should be closed and not watched any more
projectService.openClientFile(file2.path);
Expand Down Expand Up @@ -1217,7 +1218,7 @@ foo();`
nonLibFiles.forEach(f => f.path = root + f.path);
const files = nonLibFiles.concat(libFile);
const host = createServerHost(files);
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const projectService = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
projectService.openClientFile(file1.path);
baselineTsserverLogs("configuredProjects", "failed lookup locations uses parent most node_modules directory", projectService);
});
Expand Down
Expand Up @@ -68,11 +68,11 @@ namespace ts.projectSystem {
content: "{}"
};
const host = createServerHost([f1, f2, f3, libFile, config]);
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs() });
const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) });
service.openClientFile(f1.path);
const project = service.configuredProjects.get(config.path)!;
service.logger.logs.push(`languageServiceEnabled: ${project.languageServiceEnabled}`);
service.logger.logs.push(`lastFileExceededProgramSize: ${project.lastFileExceededProgramSize}`);
service.logger.info(`languageServiceEnabled: ${project.languageServiceEnabled}`);
service.logger.info(`lastFileExceededProgramSize: ${project.lastFileExceededProgramSize}`);
baselineTsserverLogs("projectLanguageServiceStateEvent", "large file size is determined correctly", service);
});
});
Expand Down