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