Adding test case where opened file included in project is not added to ref count of configured project

This commit is contained in:
Sheetal Nandi
2017-10-11 17:10:45 -07:00
parent 29ed92e20d
commit 412e31b8bc

View File

@@ -335,6 +335,10 @@ namespace ts.projectSystem {
return countWhere(recursiveWatchedDirs, dir => file.length > dir.length && startsWith(file, dir) && file[dir.length] === directorySeparator);
}
function checkOpenFiles(projectService: server.ProjectService, expectedFiles: FileOrFolder[]) {
checkFileNames("Open files", projectService.openFiles.map(info => info.fileName), expectedFiles.map(file => file.path));
}
/**
* Test server cancellation token used to mock host token cancellation requests.
* The cancelAfterRequest constructor param specifies how many isCancellationRequested() calls
@@ -2109,6 +2113,90 @@ namespace ts.projectSystem {
assert.equal(project1.openRefCount, 1, "Open ref count in project1 - 5");
});
it("Open ref of configured project when open file gets added to the project as part of configured file update", () => {
const file1 = {
path: "/a/b/src/file1.ts",
content: "let x = 1;"
};
const file2 = {
path: "/a/b/src/file2.ts",
content: "let y = 1;"
};
const file3 = {
path: "/a/b/file3.ts",
content: "let z = 1;"
};
const file4 = {
path: "/a/file4.ts",
content: "let z = 1;"
};
const configFile = {
path: "/a/b/tsconfig.json",
content: JSON.stringify({ files: ["src/file1.ts", "file3.ts"] })
};
const files = [file1, file2, file3, file4];
const host = createServerHost(files.concat(configFile));
const projectService = createProjectService(host);
projectService.openClientFile(file1.path);
projectService.openClientFile(file2.path);
projectService.openClientFile(file3.path);
projectService.openClientFile(file4.path);
const infos = files.map(file => projectService.getScriptInfoForPath(file.path as Path));
checkOpenFiles(projectService, files);
checkNumberOfProjects(projectService, { configuredProjects: 1, inferredProjects: 2 });
const configProject1 = projectService.configuredProjects.get(configFile.path);
assert.equal(configProject1.openRefCount, 2);
checkProjectActualFiles(configProject1, [file1.path, file3.path, configFile.path]);
const inferredProject1 = projectService.inferredProjects[0];
checkProjectActualFiles(inferredProject1, [file2.path]);
const inferredProject2 = projectService.inferredProjects[1];
checkProjectActualFiles(inferredProject2, [file4.path]);
configFile.content = "{}";
host.reloadFS(files.concat(configFile));
host.runQueuedTimeoutCallbacks();
verifyScriptInfos();
checkOpenFiles(projectService, files);
verifyConfiguredProjectStateAfterUpdate(3);
checkNumberOfInferredProjects(projectService, 1);
const inferredProject3 = projectService.inferredProjects[0];
checkProjectActualFiles(inferredProject3, [file4.path]);
assert.strictEqual(inferredProject2, inferredProject3);
projectService.closeClientFile(file1.path);
projectService.closeClientFile(file2.path);
projectService.closeClientFile(file4.path);
verifyScriptInfos();
checkOpenFiles(projectService, [file3]);
verifyConfiguredProjectStateAfterUpdate(1);
checkNumberOfInferredProjects(projectService, 0);
projectService.openClientFile(file4.path);
//verifyScriptInfos();
checkOpenFiles(projectService, [file3, file4]);
//verifyConfiguredProjectStateAfterUpdate(1);
checkNumberOfInferredProjects(projectService, 1);
const inferredProject4 = projectService.inferredProjects[0];
checkProjectActualFiles(inferredProject4, [file4.path]);
function verifyScriptInfos() {
infos.forEach(info => assert.strictEqual(projectService.getScriptInfoForPath(info.path), info));
}
function verifyConfiguredProjectStateAfterUpdate(_openRefCount: number) {
checkNumberOfConfiguredProjects(projectService, 1);
const configProject2 = projectService.configuredProjects.get(configFile.path);
assert.strictEqual(configProject1, configProject2);
checkProjectActualFiles(configProject2, [file1.path, file2.path, file3.path, configFile.path]);
//assert.equal(configProject2.openRefCount, openRefCount);
}
});
it("language service disabled state is updated in external projects", () => {
const f1 = {
path: "/a/app.js",