Skip to content

Commit ee623c1

Browse files
committed
Add test case before change where config project is created just to remove it
1 parent 772bee5 commit ee623c1

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/testRunner/unittests/tsserver/inferredProjects.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,5 +345,68 @@ namespace ts.projectSystem {
345345
it("inferred projects per project root with case insensitive system", () => {
346346
verifyProjectRootWithCaseSensitivity(/*useCaseSensitiveFileNames*/ false);
347347
});
348+
349+
it("should still retain configured project created while opening the file", () => {
350+
const projectRoot = "/user/username/projects/project";
351+
const appFile: File = {
352+
path: `${projectRoot}/app.ts`,
353+
content: `const app = 20;`
354+
};
355+
const config: File = {
356+
path: `${projectRoot}/tsconfig.json`,
357+
content: "{}"
358+
};
359+
const jsFile1: File = {
360+
path: `${projectRoot}/jsFile1.js`,
361+
content: `const jsFile1 = 10;`
362+
};
363+
const jsFile2: File = {
364+
path: `${projectRoot}/jsFile2.js`,
365+
content: `const jsFile2 = 10;`
366+
};
367+
const host = createServerHost([appFile, libFile, config, jsFile1, jsFile2]);
368+
const projectService = createProjectService(host);
369+
const originalSet = projectService.configuredProjects.set;
370+
const originalDelete = projectService.configuredProjects.delete;
371+
const configuredCreated = createMap<true>();
372+
const configuredRemoved = createMap<true>();
373+
projectService.configuredProjects.set = (key, value) => {
374+
assert.isFalse(configuredCreated.has(key));
375+
configuredCreated.set(key, true);
376+
return originalSet.call(projectService.configuredProjects, key, value);
377+
};
378+
projectService.configuredProjects.delete = key => {
379+
assert.isFalse(configuredRemoved.has(key));
380+
configuredRemoved.set(key, true);
381+
return originalDelete.call(projectService.configuredProjects, key);
382+
};
383+
384+
projectService.openClientFile(jsFile1.path);
385+
checkNumberOfProjects(projectService, { inferredProjects: 1 });
386+
checkProjectActualFiles(projectService.inferredProjects[0], [jsFile1.path, libFile.path]);
387+
checkConfiguredProjectCreatedAndDeleted();
388+
389+
projectService.closeClientFile(jsFile1.path);
390+
checkNumberOfProjects(projectService, { inferredProjects: 1 });
391+
projectService.openClientFile(jsFile2.path);
392+
checkNumberOfProjects(projectService, { inferredProjects: 1 });
393+
checkProjectActualFiles(projectService.inferredProjects[0], [jsFile2.path, libFile.path]);
394+
checkConfiguredProjectCreatedAndDeleted();
395+
396+
projectService.openClientFile(jsFile1.path);
397+
checkNumberOfProjects(projectService, { inferredProjects: 2 });
398+
checkProjectActualFiles(projectService.inferredProjects[0], [jsFile2.path, libFile.path]);
399+
checkProjectActualFiles(projectService.inferredProjects[1], [jsFile1.path, libFile.path]);
400+
checkConfiguredProjectCreatedAndDeleted();
401+
402+
function checkConfiguredProjectCreatedAndDeleted() {
403+
assert.equal(configuredCreated.size, 1);
404+
assert.isTrue(configuredCreated.has(config.path));
405+
assert.equal(configuredRemoved.size, 1);
406+
assert.isTrue(configuredRemoved.has(config.path));
407+
configuredCreated.clear();
408+
configuredRemoved.clear();
409+
}
410+
});
348411
});
349412
}

0 commit comments

Comments
 (0)