Skip to content

Commit 7b405c4

Browse files
committed
Test that verifies we arent updating all projects unnecessarily when called with compileOnSave and project
1 parent ab1b899 commit 7b405c4

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

src/testRunner/unittests/tsserverProjectSystem.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3479,6 +3479,102 @@ namespace ts.projectSystem {
34793479
openFilesForSession([{ file, projectRootPath }], session);
34803480
}
34813481
});
3482+
3483+
describe("CompileOnSaveAffectedFileListRequest with and without projectFileName in request", () => {
3484+
const projectRoot = "/user/username/projects/myproject";
3485+
const core: File = {
3486+
path: `${projectRoot}/core/core.ts`,
3487+
content: "let z = 10;"
3488+
};
3489+
const app1: File = {
3490+
path: `${projectRoot}/app1/app.ts`,
3491+
content: "let x = 10;"
3492+
};
3493+
const app2: File = {
3494+
path: `${projectRoot}/app2/app.ts`,
3495+
content: "let y = 10;"
3496+
};
3497+
const app1Config: File = {
3498+
path: `${projectRoot}/app1/tsconfig.json`,
3499+
content: JSON.stringify({
3500+
files: ["app.ts", "../core/core.ts"],
3501+
compilerOptions: { outFile : "build/output.js" },
3502+
compileOnSave: true
3503+
})
3504+
};
3505+
const app2Config: File = {
3506+
path: `${projectRoot}/app2/tsconfig.json`,
3507+
content: JSON.stringify({
3508+
files: ["app.ts", "../core/core.ts"],
3509+
compilerOptions: { outFile: "build/output.js" },
3510+
compileOnSave: true
3511+
})
3512+
};
3513+
const files = [libFile, core, app1, app2, app1Config, app2Config];
3514+
3515+
function insertString(session: TestSession, file: File) {
3516+
session.executeCommandSeq<protocol.ChangeRequest>({
3517+
command: protocol.CommandTypes.Change,
3518+
arguments: {
3519+
file: file.path,
3520+
line: 1,
3521+
offset: 1,
3522+
endLine: 1,
3523+
endOffset: 1,
3524+
insertString: "let k = 1"
3525+
}
3526+
});
3527+
}
3528+
3529+
function getSession() {
3530+
const host = createServerHost(files);
3531+
const session = createSession(host);
3532+
openFilesForSession([app1, app2, core], session);
3533+
const service = session.getProjectService();
3534+
checkNumberOfProjects(session.getProjectService(), { configuredProjects: 2 });
3535+
const project1 = service.configuredProjects.get(app1Config.path)!;
3536+
const project2 = service.configuredProjects.get(app2Config.path)!;
3537+
checkProjectActualFiles(project1, [libFile.path, app1.path, core.path, app1Config.path]);
3538+
checkProjectActualFiles(project2, [libFile.path, app2.path, core.path, app2Config.path]);
3539+
insertString(session, app1);
3540+
insertString(session, app2);
3541+
assert.equal(project1.dirty, true);
3542+
assert.equal(project2.dirty, true);
3543+
return session;
3544+
}
3545+
3546+
it("when projectFile is specified", () => {
3547+
const session = getSession();
3548+
const response = session.executeCommandSeq<protocol.CompileOnSaveAffectedFileListRequest>({
3549+
command: protocol.CommandTypes.CompileOnSaveAffectedFileList,
3550+
arguments: {
3551+
file: core.path,
3552+
projectFileName: app1Config.path
3553+
}
3554+
}).response;
3555+
assert.deepEqual(response, [
3556+
{ projectFileName: app1Config.path, fileNames: [core.path, app1.path], projectUsesOutFile: true }
3557+
]);
3558+
assert.equal(session.getProjectService().configuredProjects.get(app1Config.path)!.dirty, false);
3559+
assert.equal(session.getProjectService().configuredProjects.get(app2Config.path)!.dirty, true);
3560+
});
3561+
3562+
it("when projectFile is not specified", () => {
3563+
const session = getSession();
3564+
const response = session.executeCommandSeq<protocol.CompileOnSaveAffectedFileListRequest>({
3565+
command: protocol.CommandTypes.CompileOnSaveAffectedFileList,
3566+
arguments: {
3567+
file: core.path
3568+
}
3569+
}).response;
3570+
assert.deepEqual(response, [
3571+
{ projectFileName: app1Config.path, fileNames: [core.path, app1.path], projectUsesOutFile: true },
3572+
{ projectFileName: app2Config.path, fileNames: [core.path, app2.path], projectUsesOutFile: true }
3573+
]);
3574+
assert.equal(session.getProjectService().configuredProjects.get(app1Config.path)!.dirty, false);
3575+
assert.equal(session.getProjectService().configuredProjects.get(app2Config.path)!.dirty, false);
3576+
});
3577+
});
34823578
});
34833579

34843580
describe("tsserverProjectSystem Proper errors", () => {

0 commit comments

Comments
 (0)