Skip to content

Baseline for watches to only add watch state if there is change and include typing installer baselines into tsserver baselines #52901

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 9 commits into from
Mar 1, 2023
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions src/testRunner/unittests/tscWatch/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ export function applyEdit(sys: BaselineBase["sys"], baseline: BaselineBase["base
edit(sys);
baseline.push("Input::");
sys.diff(baseline, oldSnap);
sys.serializeWatches(baseline);
return sys.snap();
}

Expand Down Expand Up @@ -276,13 +277,15 @@ export function solutionBuildWithBaseline(sys: TestServerHost, solutionRoots: re
const originalReadFile = sys.readFile;
const originalWrite = sys.write;
const originalWriteFile = sys.writeFile;
ts.Debug.assert(sys.writtenFiles === undefined);
const solutionBuilder = createSolutionBuilder(changeToHostTrackingWrittenFiles(
patchHostForBuildInfoReadWrite(sys)
), solutionRoots, originalRead);
solutionBuilder.build();
sys.readFile = originalReadFile;
sys.write = originalWrite;
sys.writeFile = originalWriteFile;
sys.writtenFiles = undefined;
return sys;
}

Expand Down
54 changes: 17 additions & 37 deletions src/testRunner/unittests/tsserver/compileOnSave.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,9 @@ import {
openFilesForSession,
protocolTextSpanFromSubstring,
TestSession,
TestTypingsInstaller,
toExternalFiles,
} from "./helpers";

function createTestTypingsInstaller(host: ts.server.ServerHost) {
return new TestTypingsInstaller("/a/data/", /*throttleLimit*/5, host);
}

describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
describe("for configured projects", () => {
function files() {
Expand Down Expand Up @@ -60,8 +55,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should contains only itself if a module file's shape didn't change, and all files referencing it if its shape changed", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1, file1Consumer1], session);

Expand Down Expand Up @@ -108,8 +102,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should be up-to-date with the reference map changes", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1, file1Consumer1], session);

Expand Down Expand Up @@ -182,8 +175,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should be up-to-date with changes made in non-open files", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1], session);

Expand Down Expand Up @@ -216,8 +208,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should be up-to-date with deleted files", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand Down Expand Up @@ -248,8 +239,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should be up-to-date with newly created files", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand Down Expand Up @@ -301,8 +291,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1, file1Consumer1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand Down Expand Up @@ -349,8 +338,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
it("should return all files if a global file changed shape", () => {
const { moduleFile1, file1Consumer1, file1Consumer2, moduleFile2, globalFile3, configFile } = files();
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([globalFile3], session);

Expand Down Expand Up @@ -381,8 +369,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([moduleFile1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
command: ts.server.protocol.CommandTypes.CompileOnSaveAffectedFileList,
Expand All @@ -404,8 +391,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([moduleFile1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
command: ts.server.protocol.CommandTypes.CompileOnSaveAffectedFileList,
Expand All @@ -431,8 +417,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer2, configFile2, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1, file1Consumer1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand All @@ -455,8 +440,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([moduleFile1], session);

session.executeCommandSeq<ts.server.protocol.ChangeRequest>({
Expand Down Expand Up @@ -491,8 +475,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
};

const host = createServerHost([moduleFile1, file1Consumer1, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
openFilesForSession([moduleFile1], session);

session.executeCommandSeq<ts.server.protocol.ChangeRequest>({
Expand Down Expand Up @@ -520,8 +503,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
content: `import {y} from "./file1Consumer1";`
};
const host = createServerHost([moduleFile1, file1Consumer1, file1Consumer1Consumer1, globalFile3, configFile, libFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([moduleFile1, file1Consumer1], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand Down Expand Up @@ -573,8 +555,7 @@ describe("unittests:: tsserver:: compileOnSave:: affected list", () => {
export var t2 = 10;`
};
const host = createServerHost([file1, file2, configFile]);
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([file1, file2], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveAffectedFileListRequest>({
Expand Down Expand Up @@ -791,8 +772,7 @@ describe("unittests:: tsserver:: compileOnSave:: EmitFile test", () => {
content: `{}`
};
const host = createServerHost([file1, file2, configFile, libFile], { newLine: "\r\n" });
const typingsInstaller = createTestTypingsInstaller(host);
const session = createSession(host, { typingsInstaller, logger: createLoggerWithInMemoryLogs(host) });
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });

openFilesForSession([file1, file2], session);
session.executeCommandSeq<ts.server.protocol.CompileOnSaveEmitFileRequest>({
Expand Down Expand Up @@ -1043,8 +1023,8 @@ describe("unittests:: tsserver:: compileOnSave:: CompileOnSaveAffectedFileListRe
}

function logDirtyOfProjects(session: TestSession) {
session.logger.logs.push(`Project1 is dirty: ${session.getProjectService().configuredProjects.get(`/user/username/projects/myproject/app1/tsconfig.json`)!.dirty}`);
session.logger.logs.push(`Project2 is dirty: ${session.getProjectService().configuredProjects.get(`/user/username/projects/myproject/app2/tsconfig.json`)!.dirty}`);
session.logger.log(`Project1 is dirty: ${session.getProjectService().configuredProjects.get(`/user/username/projects/myproject/app1/tsconfig.json`)!.dirty}`);
session.logger.log(`Project2 is dirty: ${session.getProjectService().configuredProjects.get(`/user/username/projects/myproject/app2/tsconfig.json`)!.dirty}`);
}

function verify(subScenario: string, commandArgs: ts.server.protocol.FileRequestArgs) {
Expand Down
5 changes: 3 additions & 2 deletions src/testRunner/unittests/tsserver/completions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,9 +176,10 @@ export interface BrowserRouterProps {
];

const host = createServerHost(files, { windowsStyleRoot: "c:/" });
const logger = createLoggerWithInMemoryLogs(host);
const session = createSession(host, {
typingsInstaller: new TestTypingsInstaller(globalCacheLocation, /*throttleLimit*/ 5, host),
logger: createLoggerWithInMemoryLogs(host),
typingsInstaller: new TestTypingsInstaller(globalCacheLocation, /*throttleLimit*/ 5, host, logger),
logger,
});
openFilesForSession([appFile], session);
session.executeCommandSeq<ts.server.protocol.CompletionsRequest>({
Expand Down
2 changes: 1 addition & 1 deletion src/testRunner/unittests/tsserver/declarationFileMaps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ function checkDeclarationFiles(file: File, session: TestSession): void {
const project = ts.Debug.checkDefined(session.getProjectService().getDefaultProjectForFile(file.path as ts.server.NormalizedPath, /*ensureProject*/ false));
const program = project.getCurrentProgram()!;
const output = ts.getFileEmitOutput(program, ts.Debug.checkDefined(program.getSourceFile(file.path)), /*emitOnlyDtsFiles*/ true);
session.logger.logs.push(`ts.getFileEmitOutput: ${file.path}: ${JSON.stringify(output, undefined, " ")}`);
session.logger.log(`ts.getFileEmitOutput: ${file.path}: ${JSON.stringify(output, undefined, " ")}`);
closeFilesForSession([file], session);
}

Expand Down
Loading