More PR comments

This commit is contained in:
Nathan Shively-Sanders
2022-06-14 17:06:27 -07:00
parent 3e7d778139
commit 0f4c158454
30 changed files with 274 additions and 272 deletions
+2 -2
View File
@@ -60,7 +60,7 @@ namespace vfs {
private _dirStack: string[] | undefined;
constructor(ignoreCase: boolean, options: FileSystemOptions = {}) {
const { time = ts.VirtualFS.timeIncrements, files, meta } = options;
const { time = ts.TestFSWithWatch.timeIncrements, files, meta } = options;
this.ignoreCase = ignoreCase;
this.stringComparer = this.ignoreCase ? vpath.compareCaseInsensitive : vpath.compareCaseSensitive;
this._time = time;
@@ -173,7 +173,7 @@ namespace vfs {
this._time = value;
}
else if (!this.isReadonly) {
this._time += ts.VirtualFS.timeIncrements;
this._time += ts.TestFSWithWatch.timeIncrements;
}
return this._time;
}
+40 -42
View File
@@ -1,5 +1,5 @@
namespace ts.VirtualFS {
export const libFile: File = {
namespace ts.TestFSWithWatch {
export const libFile: VirtualFS.File = {
path: "/a/lib/lib.d.ts",
content: `/// <reference no-default-lib="true"/>
interface Boolean {}
@@ -27,23 +27,21 @@ interface Array<T> { length: number; [n: number]: T; }`
environmentVariables?: ESMap<string, string>;
runWithoutRecursiveWatches?: boolean;
runWithFallbackPolling?: boolean;
// TODO: Not sure withSafeList is still needed
withSafeList?: boolean;
inodeWatching?: boolean;
}
export function createVirtualServerHost(params: VirtualServerHostCreationParameters): VirtualServerHost {
const host = new VirtualServerHost(params);
export function createVirtualServerHost(params: VirtualFS.VirtualServerHostCreationParameters): VirtualFS.VirtualServerHost {
const host = new VirtualFS.VirtualServerHost(params);
// Just like sys, patch the host to use writeFile
patchWriteFileEnsuringDirectory(host);
return host;
}
export function createWatchedSystem(fileOrFolderList: FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink[], params?: TestServerHostCreationParameters): TestServerHost {
export function createWatchedSystem(fileOrFolderList: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[], params?: TestServerHostCreationParameters): TestServerHost {
return new TestServerHost(fileOrFolderList, params);
}
export function createServerHost(fileOrFolderList: FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink[], params?: TestServerHostCreationParameters): TestServerHost {
export function createServerHost(fileOrFolderList: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[], params?: TestServerHostCreationParameters): TestServerHost {
const host = new TestServerHost(fileOrFolderList, params);
// Just like sys, patch the host to use writeFile
patchWriteFileEnsuringDirectory(host);
@@ -116,7 +114,7 @@ interface Array<T> { length: number; [n: number]: T; }`
serialize(baseline: string[]) {
for (const id in this.map) {
baseline.push(`${id} at time ${this.map[id].time} in ${this.map[id].ms} ms: ${this.map[id].args[1]}`)
baseline.push(`${id} at time ${this.map[id].time} in ${this.map[id].ms} ms: ${this.map[id].args[1]}`);
}
}
}
@@ -213,7 +211,7 @@ interface Array<T> { length: number; [n: number]: T; }`
export const timeIncrements = 1000;
export class TestServerHost extends VirtualServerHost implements server.ServerHost {
export class TestServerHost extends VirtualFS.VirtualServerHost implements server.ServerHost {
private readonly output: string[] = [];
private time = timeIncrements;
private timeoutCallbacks = new Callbacks(this);
@@ -226,7 +224,7 @@ interface Array<T> { length: number; [n: number]: T; }`
private readonly inodes?: ESMap<Path, number>;
constructor(
fileOrFolderOrSymLinkList: FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink[],
fileOrFolderOrSymLinkList: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[],
options: TestServerHostCreationParameters = {}) {
super({
...options,
@@ -273,7 +271,7 @@ interface Array<T> { length: number; [n: number]: T; }`
this.time = time;
}
private reloadFS(fileOrFolderOrSymLinkList: FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink[]) {
private reloadFS(fileOrFolderOrSymLinkList: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[]) {
Debug.assert(this.fs.size === 0);
if (isArray(fileOrFolderOrSymLinkList)) {
fileOrFolderOrSymLinkList.forEach(f => this.ensureFileOrFolder(!this.windowsStyleRoot ?
@@ -300,7 +298,7 @@ interface Array<T> { length: number; [n: number]: T; }`
renameFile(fileName: string, newFileName: string) {
const fullPath = getNormalizedAbsolutePath(fileName, this.currentDirectory);
const path = this.toPath(fullPath);
const file = this.fs.get(path) as FsFile;
const file = this.fs.get(path) as VirtualFS.FsFile;
Debug.assert(!!file);
// Only remove the file
@@ -313,14 +311,14 @@ interface Array<T> { length: number; [n: number]: T; }`
const basePath = getDirectoryPath(path);
Debug.assert(basePath !== path);
Debug.assert(basePath === getDirectoryPath(newPath));
const baseFolder = this.fs.get(basePath) as FsFolder;
const baseFolder = this.fs.get(basePath) as VirtualFS.FsFolder;
this.addFileOrFolderInFolder(baseFolder, newFile);
}
renameFolder(folderName: string, newFolderName: string) {
const fullPath = getNormalizedAbsolutePath(folderName, this.currentDirectory);
const path = this.toPath(fullPath);
const folder = this.fs.get(path) as FsFolder;
const folder = this.fs.get(path) as VirtualFS.FsFolder;
Debug.assert(!!folder);
// Only remove the folder
@@ -333,14 +331,14 @@ interface Array<T> { length: number; [n: number]: T; }`
const basePath = getDirectoryPath(path);
Debug.assert(basePath !== path);
Debug.assert(basePath === getDirectoryPath(newPath));
const baseFolder = this.fs.get(basePath) as FsFolder;
const baseFolder = this.fs.get(basePath) as VirtualFS.FsFolder;
this.addFileOrFolderInFolder(baseFolder, newFolder);
// Invoke watches for files in the folder as deleted (from old path)
this.renameFolderEntries(folder, newFolder);
}
private renameFolderEntries(oldFolder: FsFolder, newFolder: FsFolder) {
private renameFolderEntries(oldFolder: VirtualFS.FsFolder, newFolder: VirtualFS.FsFolder) {
for (const entry of oldFolder.entries) {
this.fs.delete(entry.path);
this.invokeFileAndFsWatches(entry.fullPath, FileWatcherEventKind.Deleted);
@@ -353,7 +351,7 @@ interface Array<T> { length: number; [n: number]: T; }`
this.fs.set(entry.path, entry);
this.setInode(entry.path);
this.invokeFileAndFsWatches(entry.fullPath, FileWatcherEventKind.Created);
if (isFsFolder(entry)) {
if (VirtualFS.isFsFolder(entry)) {
this.renameFolderEntries(entry, entry);
}
}
@@ -361,12 +359,12 @@ interface Array<T> { length: number; [n: number]: T; }`
deleteFolder(folderPath: string, recursive?: boolean) {
const path = this.toFullPath(folderPath);
const currentEntry = this.fs.get(path) as FsFolder;
Debug.assert(isFsFolder(currentEntry));
const currentEntry = this.fs.get(path) as VirtualFS.FsFolder;
Debug.assert(VirtualFS.isFsFolder(currentEntry));
if (recursive && currentEntry.entries.length) {
const subEntries = currentEntry.entries.slice();
subEntries.forEach(fsEntry => {
if (isFsFolder(fsEntry)) {
if (VirtualFS.isFsFolder(fsEntry)) {
this.deleteFolder(fsEntry.fullPath, recursive);
}
else {
@@ -386,7 +384,7 @@ interface Array<T> { length: number; [n: number]: T; }`
const path = this.toFullPath(fileOrDirectory);
// Error if the path does not exist
if (this.inodeWatching && !this.inodes?.has(path)) throw new Error();
const result = createWatcher(
const result = VirtualFS.createWatcher(
recursive ? this.fsWatchesRecursive : this.fsWatches,
path,
{
@@ -421,7 +419,7 @@ interface Array<T> { length: number; [n: number]: T; }`
}
serializeTimeout(baseline: string[]) {
this.timeoutCallbacks.serialize(baseline)
this.timeoutCallbacks.serialize(baseline);
}
clearScreen(): void {
@@ -465,11 +463,11 @@ interface Array<T> { length: number; [n: number]: T; }`
this.immediateCallbacks.unregister(timeoutId);
}
prependFile(path: string, content: string, options?: Partial<WatchInvokeOptions>): void {
prependFile(path: string, content: string, options?: Partial<VirtualFS.WatchInvokeOptions>): void {
this.modifyFile(path, content + this.readFile(path), options);
}
appendFile(path: string, content: string, options?: Partial<WatchInvokeOptions>): void {
appendFile(path: string, content: string, options?: Partial<VirtualFS.WatchInvokeOptions>): void {
this.modifyFile(path, this.readFile(path) + content, options);
}
@@ -512,12 +510,12 @@ interface Array<T> { length: number; [n: number]: T; }`
}
}
export function snap(fshost: VirtualServerHost): ESMap<Path, FSEntry> {
const result = new Map<Path, FSEntry>();
export function snap(fshost: VirtualFS.VirtualServerHost): ESMap<Path, VirtualFS.FSEntry> {
const result = new Map<Path, VirtualFS.FSEntry>();
fshost.fs.forEach((value, key) => {
const cloneValue = clone(value);
if (isFsFolder(cloneValue)) {
cloneValue.entries = cloneValue.entries.map(clone) as SortedArray<FSEntry>;
if (VirtualFS.isFsFolder(cloneValue)) {
cloneValue.entries = cloneValue.entries.map(clone) as SortedArray<VirtualFS.FSEntry>;
}
result.set(key, cloneValue);
});
@@ -525,7 +523,7 @@ interface Array<T> { length: number; [n: number]: T; }`
return result;
}
export function diff(fshost: VirtualServerHost, baseline: string[], base: ESMap<Path, FSEntry> = new Map()) {
export function diff(fshost: VirtualFS.VirtualServerHost, baseline: string[], base: ESMap<Path, VirtualFS.FSEntry> = new Map()) {
fshost.fs.forEach((newFsEntry, path) => {
diffFsEntry(baseline, base.get(path), newFsEntry, fshost.getInode(path), fshost.writtenFiles);
});
@@ -538,19 +536,19 @@ interface Array<T> { length: number; [n: number]: T; }`
baseline.push("");
}
function diffFsFile(baseline: string[], fsEntry: FsFile, newInode: number | undefined) {
function diffFsFile(baseline: string[], fsEntry: VirtualFS.FsFile, newInode: number | undefined) {
baseline.push(`//// [${fsEntry.fullPath}]${inodeString(newInode)}\r\n${fsEntry.content}`, "");
}
function diffFsSymLink(baseline: string[], fsEntry: FsSymLink, newInode: number | undefined) {
function diffFsSymLink(baseline: string[], fsEntry: VirtualFS.FsSymLink, newInode: number | undefined) {
baseline.push(`//// [${fsEntry.fullPath}] symlink(${fsEntry.symLink})${inodeString(newInode)}`);
}
function inodeString(inode: number | undefined) {
return inode !== undefined ? ` Inode:: ${inode}` : "";
}
function diffFsEntry(baseline: string[], oldFsEntry: FSEntry | undefined, newFsEntry: FSEntry | undefined, newInode: number | undefined, writtenFiles: ESMap<string, any> | undefined): void {
function diffFsEntry(baseline: string[], oldFsEntry: VirtualFS.FSEntry | undefined, newFsEntry: VirtualFS.FSEntry | undefined, newInode: number | undefined, writtenFiles: ESMap<string, any> | undefined): void {
const file = newFsEntry && newFsEntry.fullPath;
if (isFsFile(oldFsEntry)) {
if (isFsFile(newFsEntry)) {
if (VirtualFS.isFsFile(oldFsEntry)) {
if (VirtualFS.isFsFile(newFsEntry)) {
if (oldFsEntry.content !== newFsEntry.content) {
diffFsFile(baseline, newFsEntry, newInode);
}
@@ -568,13 +566,13 @@ interface Array<T> { length: number; [n: number]: T; }`
}
else {
baseline.push(`//// [${oldFsEntry.fullPath}] deleted`);
if (isFsSymLink(newFsEntry)) {
if (VirtualFS.isFsSymLink(newFsEntry)) {
diffFsSymLink(baseline, newFsEntry, newInode);
}
}
}
else if (isFsSymLink(oldFsEntry)) {
if (isFsSymLink(newFsEntry)) {
else if (VirtualFS.isFsSymLink(oldFsEntry)) {
if (VirtualFS.isFsSymLink(newFsEntry)) {
if (oldFsEntry.symLink !== newFsEntry.symLink) {
diffFsSymLink(baseline, newFsEntry, newInode);
}
@@ -592,15 +590,15 @@ interface Array<T> { length: number; [n: number]: T; }`
}
else {
baseline.push(`//// [${oldFsEntry.fullPath}] deleted symlink`);
if (isFsFile(newFsEntry)) {
if (VirtualFS.isFsFile(newFsEntry)) {
diffFsFile(baseline, newFsEntry, newInode);
}
}
}
else if (isFsFile(newFsEntry)) {
else if (VirtualFS.isFsFile(newFsEntry)) {
diffFsFile(baseline, newFsEntry, newInode);
}
else if (isFsSymLink(newFsEntry)) {
else if (VirtualFS.isFsSymLink(newFsEntry)) {
diffFsSymLink(baseline, newFsEntry, newInode);
}
}
@@ -631,7 +629,7 @@ interface Array<T> { length: number; [n: number]: T; }`
return `${tsbuildProjectsLocation}/${project}/${file}`;
}
export function getTsBuildProjectFile(project: string, file: string): File {
export function getTsBuildProjectFile(project: string, file: string): VirtualFS.File {
return {
path: getTsBuildProjectFilePath(project, file),
content: Harness.IO.readFile(`${Harness.IO.getWorkspaceRoot()}/tests/projects/${project}/${file}`)!
+13 -8
View File
@@ -3756,21 +3756,26 @@ namespace ts.server {
updateFileSystem(updatedFiles: protocol.FileSystemRequestArgs[] | undefined, deletedFiles?: string[]) {
if (!this.fshost) {
this.logger.msg("fshost not defined, skipping updateFileSystem", Msg.Err);
return;
}
if (updatedFiles) {
if (!this.fshost.ensureFileOrFolder) {
this.logger.msg(`fshost missing ensureFileOrFolder, skipping update of ${JSON.stringify(updatedFiles.map(({ file }) => file))}`, Msg.Err);
if (this.fshost.ensureFileOrFolder) {
for (const { file, fileContent } of updatedFiles) {
this.fshost.ensureFileOrFolder({ path: file, content: fileContent });
}
}
for (const { file, fileContent } of updatedFiles) {
this.fshost.ensureFileOrFolder({ path: file, content: fileContent });
else {
this.logger.msg(`fshost missing ensureFileOrFolder, skipping update of ${JSON.stringify(updatedFiles.map(({ file }) => file))}`, Msg.Err);
}
}
if (deletedFiles) {
if (!this.fshost.deleteFile) {
this.logger.msg(`fshost missing deleteFile, skipping delete of ${JSON.stringify(deletedFiles)}`, Msg.Err);
if (this.fshost.deleteFile) {
for (const file of deletedFiles) {
this.fshost.deleteFile(file, /*deleteEmptyParentFolders*/ true);
}
}
for (const file of deletedFiles) {
this.fshost.deleteFile(file, /*deleteEmptyParentFolders*/ true);
else {
this.logger.msg(`fshost missing deleteFile, skipping delete of ${JSON.stringify(deletedFiles)}`, Msg.Err);
}
}
}
+1 -1
View File
@@ -322,7 +322,7 @@ namespace ts.server {
else if (host.trace) {
this.trace = s => host.trace!(s);
}
this.realpath = maybeBind(this.projectService.host, this.projectService.host.realpath);
this.realpath = maybeBind(host, host.realpath);
// Use the current directory as resolution root only if the project created using current directory string
this.resolutionCache = createResolutionCache(
+1 -1
View File
@@ -809,7 +809,7 @@ namespace ts.server {
};
this.errorCheck = new MultistepOperation(multistepOperationHost);
const settings: ProjectServiceOptions = {
host: this.host,
host: opts.host,
fshost: opts.fshost,
logger: this.logger,
cancellationToken: this.cancellationToken,
+1 -1
View File
@@ -19,10 +19,10 @@
{ "path": "../executeCommandLine", "prepend": true },
{ "path": "../services", "prepend": true },
{ "path": "../jsTyping", "prepend": true },
{ "path": "../vfs", "prepend": true },
{ "path": "../server", "prepend": true },
{ "path": "../webServer", "prepend": true },
{ "path": "../typingsInstallerCore", "prepend": true },
{ "path": "../vfs", "prepend": true },
{ "path": "../deprecatedCompat", "prepend": true },
{ "path": "../harness", "prepend": true },
{ "path": "../loggedIO", "prepend": true }
@@ -74,7 +74,7 @@ namespace ts {
}
}
const vfsys = new vfs.FileSystem(false, { files: { "/lib.d.ts": VirtualFS.libFile.content } });
const vfsys = new vfs.FileSystem(false, { files: { "/lib.d.ts": TestFSWithWatch.libFile.content } });
files.forEach((v, k) => {
vfsys.mkdirpSync(getDirectoryPath(k));
vfsys.writeFileSync(k, v);
@@ -922,8 +922,8 @@ namespace ts {
});
type File = VirtualFS.File;
import createTestSystem = VirtualFS.createWatchedSystem;
import libFile = VirtualFS.libFile;
import createTestSystem = TestFSWithWatch.createWatchedSystem;
import libFile = TestFSWithWatch.libFile;
describe("unittests:: Reuse program structure:: isProgramUptoDate", () => {
function getWhetherProgramIsUptoDate(
+1 -1
View File
@@ -78,7 +78,7 @@ namespace ts {
};
}
export const libContent = `${VirtualFS.libFile.content}
export const libContent = `${TestFSWithWatch.libFile.content}
interface ReadonlyArray<T> {}
declare const console: { log(msg: any): void; };`;
+9 -9
View File
@@ -13,7 +13,7 @@ namespace ts {
function getTsBuildProjectFile(project: string, file: string): tscWatch.File {
return {
path: VirtualFS.getTsBuildProjectFilePath(project, file),
path: TestFSWithWatch.getTsBuildProjectFilePath(project, file),
content: projFs.readFileSync(`/src/${project}/${file}`, "utf8")!
};
}
@@ -250,8 +250,8 @@ namespace ts {
const testsConfig = getTsBuildProjectFile("tests", "tsconfig.json");
const testsIndex = getTsBuildProjectFile("tests", "index.ts");
const baseline: string[] = [];
let oldSnap: ReturnType<typeof VirtualFS.snap> | undefined;
const system = VirtualFS.changeToHostTrackingWrittenFiles(
let oldSnap: ReturnType<typeof TestFSWithWatch.snap> | undefined;
const system = TestFSWithWatch.changeToHostTrackingWrittenFiles(
fakes.patchHostForBuildInfoReadWrite(
tscWatch.createWatchedSystem([
coreConfig, coreIndex, coreDecl, coreAnotherModule,
@@ -281,9 +281,9 @@ namespace ts {
function baselineState() {
system.serializeOutput(baseline);
VirtualFS.diff(system, baseline, oldSnap);
TestFSWithWatch.diff(system, baseline, oldSnap);
system.writtenFiles.clear();
oldSnap = VirtualFS.snap(system);
oldSnap = TestFSWithWatch.snap(system);
}
});
@@ -322,8 +322,8 @@ namespace ts {
const testsConfig = getTsBuildProjectFile("tests", "tsconfig.json");
const testsIndex = getTsBuildProjectFile("tests", "index.ts");
const baseline: string[] = [];
let oldSnap: ReturnType<typeof VirtualFS.snap> | undefined;
const system = VirtualFS.changeToHostTrackingWrittenFiles(
let oldSnap: ReturnType<typeof TestFSWithWatch.snap> | undefined;
const system = TestFSWithWatch.changeToHostTrackingWrittenFiles(
fakes.patchHostForBuildInfoReadWrite(
tscWatch.createWatchedSystem([
coreConfig, coreIndex, coreDecl, coreAnotherModule,
@@ -366,9 +366,9 @@ namespace ts {
function baselineState(heading: string) {
baseline.push(heading);
system.serializeOutput(baseline);
VirtualFS.diff(system, baseline, oldSnap);
TestFSWithWatch.diff(system, baseline, oldSnap);
system.writtenFiles.clear();
oldSnap = VirtualFS.snap(system);
oldSnap = TestFSWithWatch.snap(system);
}
});
});
@@ -1,6 +1,6 @@
namespace ts.tscWatch {
describe("unittests:: tsbuildWatch:: watchMode:: with demo project", () => {
const projectLocation = `${VirtualFS.tsbuildProjectsLocation}/demo`;
const projectLocation = `${TestFSWithWatch.tsbuildProjectsLocation}/demo`;
let coreFiles: File[];
let animalFiles: File[];
let zooFiles: File[];
@@ -82,7 +82,7 @@ ${coreFiles[1].content}`),
}
function projectFile(fileName: string): File {
return VirtualFS.getTsBuildProjectFile("demo", fileName);
return TestFSWithWatch.getTsBuildProjectFile("demo", fileName);
}
});
}
@@ -3,7 +3,7 @@ namespace ts.tscWatch {
function change(caption: string, content: string): TscWatchCompileChange {
return {
caption,
change: sys => sys.writeFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, content),
change: sys => sys.writeFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, content),
// build project
timeouts: checkSingleTimeoutQueueLengthAndRunAndVerifyNoTimeout,
};
@@ -11,7 +11,7 @@ namespace ts.tscWatch {
const noChange: TscWatchCompileChange = {
caption: "No change",
change: sys => sys.writeFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, sys.readFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`)!),
change: sys => sys.writeFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, sys.readFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`)!),
// build project
timeouts: checkSingleTimeoutQueueLengthAndRunAndVerifyNoTimeout,
};
@@ -22,10 +22,10 @@ namespace ts.tscWatch {
sys: () => createWatchedSystem(
[
...["tsconfig.json", "shared/types/db.ts", "src/main.ts", "src/other.ts"]
.map(f => VirtualFS.getTsBuildProjectFile("noEmitOnError", f)),
.map(f => TestFSWithWatch.getTsBuildProjectFile("noEmitOnError", f)),
{ path: libFile.path, content: libContent }
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/noEmitOnError` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError` }
),
changes: [
noChange,
@@ -1,5 +1,5 @@
namespace ts.tscWatch {
import projectsLocation = VirtualFS.tsbuildProjectsLocation;
import projectsLocation = TestFSWithWatch.tsbuildProjectsLocation;
describe("unittests:: tsbuildWatch:: watchMode:: program updates", () => {
const enum SubProject {
core = "core",
@@ -11,11 +11,11 @@ namespace ts.tscWatch {
/** [tsconfig, index] | [tsconfig, index, anotherModule, someDecl] */
type SubProjectFiles = [tsconfig: ReadonlyFile, index: ReadonlyFile] | [tsconfig: ReadonlyFile, index: ReadonlyFile, anotherModule: ReadonlyFile, someDecl: ReadonlyFile];
function projectFilePath(subProject: SubProject, baseFileName: string) {
return `${VirtualFS.getTsBuildProjectFilePath("sample1", subProject)}/${baseFileName.toLowerCase()}`;
return `${TestFSWithWatch.getTsBuildProjectFilePath("sample1", subProject)}/${baseFileName.toLowerCase()}`;
}
function projectFile(subProject: SubProject, baseFileName: string): File {
return VirtualFS.getTsBuildProjectFile("sample1", `${subProject}/${baseFileName}`);
return TestFSWithWatch.getTsBuildProjectFile("sample1", `${subProject}/${baseFileName}`);
}
function subProjectFiles(subProject: SubProject, anotherModuleAndSomeDecl?: true): SubProjectFiles {
@@ -11,15 +11,15 @@ namespace ts.tscWatch {
"src/main/tsconfig.json", "src/main/index.ts",
"src/pure/tsconfig.json", "src/pure/index.ts", "src/pure/session.ts"
]
.map(f => VirtualFS.getTsBuildProjectFile("reexport", f)),
.map(f => TestFSWithWatch.getTsBuildProjectFile("reexport", f)),
{ path: libFile.path, content: libContent }
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/reexport` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/reexport` }
),
changes: [
{
caption: "Introduce error",
change: sys => replaceFileText(sys, `${VirtualFS.tsbuildProjectsLocation}/reexport/src/pure/session.ts`, "// ", ""),
change: sys => replaceFileText(sys, `${TestFSWithWatch.tsbuildProjectsLocation}/reexport/src/pure/session.ts`, "// ", ""),
timeouts: sys => {
sys.checkTimeoutQueueLengthAndRun(1); // build src/pure
sys.checkTimeoutQueueLengthAndRun(1); // build src/main and src
@@ -28,7 +28,7 @@ namespace ts.tscWatch {
},
{
caption: "Fix error",
change: sys => replaceFileText(sys, `${VirtualFS.tsbuildProjectsLocation}/reexport/src/pure/session.ts`, "bar: ", "// bar: "),
change: sys => replaceFileText(sys, `${TestFSWithWatch.tsbuildProjectsLocation}/reexport/src/pure/session.ts`, "bar: ", "// bar: "),
timeouts: sys => {
sys.checkTimeoutQueueLengthAndRun(1); // build src/pure
sys.checkTimeoutQueueLengthAndRun(1); // build src/main and src
@@ -13,7 +13,7 @@ namespace ts.tscWatch {
function verifyWatchFileOnMultipleProjects(singleWatchPerFile: boolean, environmentVariables?: ESMap<string, string>) {
it("watchFile on same file multiple times because file is part of multiple projects", () => {
const project = `${VirtualFS.tsbuildProjectsLocation}/myproject`;
const project = `${TestFSWithWatch.tsbuildProjectsLocation}/myproject`;
let maxPkgs = 4;
const configPath = `${project}/tsconfig.json`;
const typing: File = {
@@ -111,7 +111,7 @@ namespace ts.tscWatch {
}
];
}
function writePkgReferences(system: VirtualFS.TestServerHost) {
function writePkgReferences(system: TestFSWithWatch.TestServerHost) {
system.writeFile(configPath, JSON.stringify({
files: [],
include: [],
@@ -337,22 +337,22 @@ export class Data2 {
function change(caption: string, content: string): TscWatchCompileChange {
return {
caption,
change: sys => sys.writeFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, content),
change: sys => sys.writeFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, content),
// build project
timeouts: checkSingleTimeoutQueueLengthAndRun
};
}
const noChange: TscWatchCompileChange = {
caption: "No change",
change: sys => sys.writeFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, sys.readFile(`${VirtualFS.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`)!),
change: sys => sys.writeFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`, sys.readFile(`${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError/src/main.ts`)!),
// build project
timeouts: checkSingleTimeoutQueueLengthAndRun,
};
verifyEmitAndErrorUpdates({
subScenario: "with noEmitOnError",
currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/noEmitOnError`,
currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/noEmitOnError`,
files: () => ["shared/types/db.ts", "src/main.ts", "src/other.ts", "tsconfig.json"]
.map(f => VirtualFS.getTsBuildProjectFile("noEmitOnError", f)).concat({ path: libFile.path, content: libContent }),
.map(f => TestFSWithWatch.getTsBuildProjectFile("noEmitOnError", f)).concat({ path: libFile.path, content: libContent }),
changes: [
noChange,
change("Fix Syntax error", `import { A } from "../shared/types/db";
+20 -20
View File
@@ -1,14 +1,14 @@
namespace ts.tscWatch {
export const projects = `/user/username/projects`;
export const projectRoot = `${projects}/myproject`;
export import WatchedSystem = VirtualFS.TestServerHost;
export import WatchedSystem = TestFSWithWatch.TestServerHost;
export type File = VirtualFS.File;
export type SymLink = VirtualFS.SymLink;
export import libFile = VirtualFS.libFile;
export import createWatchedSystem = VirtualFS.createWatchedSystem;
export import checkArray = VirtualFS.checkArray;
export import checkOutputContains = VirtualFS.checkOutputContains;
export import checkOutputDoesNotContain = VirtualFS.checkOutputDoesNotContain;
export import libFile = TestFSWithWatch.libFile;
export import createWatchedSystem = TestFSWithWatch.createWatchedSystem;
export import checkArray = TestFSWithWatch.checkArray;
export import checkOutputContains = TestFSWithWatch.checkOutputContains;
export import checkOutputDoesNotContain = TestFSWithWatch.checkOutputDoesNotContain;
export const commonFile1: File = {
path: "/a/b/commonFile1.ts",
@@ -98,9 +98,9 @@ namespace ts.tscWatch {
export type WatchOrSolution<T extends BuilderProgram> = void | SolutionBuilder<T> | WatchOfConfigFile<T> | WatchOfFilesAndCompilerOptions<T>;
export interface TscWatchCompileChange<T extends BuilderProgram = EmitAndSemanticDiagnosticsBuilderProgram> {
caption: string;
change: (sys: VirtualFS.TestServerHostTrackingWrittenFiles) => void;
change: (sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles) => void;
timeouts: (
sys: VirtualFS.TestServerHostTrackingWrittenFiles,
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
programs: readonly CommandLineProgram[],
watchOrSolution: WatchOrSolution<T>
) => void;
@@ -125,7 +125,7 @@ namespace ts.tscWatch {
timeouts: sys => sys.checkTimeoutQueueLength(0),
};
export type SystemSnap = ReturnType<typeof VirtualFS.snap>;
export type SystemSnap = ReturnType<typeof TestFSWithWatch.snap>;
function tscWatchCompile(input: TscWatchCompile) {
it("tsc-watch:: Generates files matching the baseline", () => {
const { sys, baseline, oldSnap } = createBaseline(input.sys());
@@ -160,7 +160,7 @@ namespace ts.tscWatch {
export interface BaselineBase {
baseline: string[];
sys: VirtualFS.TestServerHostTrackingWrittenFiles;
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles;
oldSnap: SystemSnap;
}
@@ -171,12 +171,12 @@ namespace ts.tscWatch {
const originalRead = system.readFile;
const initialSys = fakes.patchHostForBuildInfoReadWrite(system);
modifySystem?.(initialSys, originalRead);
const sys = VirtualFS.changeToHostTrackingWrittenFiles(initialSys);
const sys = TestFSWithWatch.changeToHostTrackingWrittenFiles(initialSys);
const baseline: string[] = [];
baseline.push("Input::");
VirtualFS.diff(sys, baseline);
TestFSWithWatch.diff(sys, baseline);
const { cb, getPrograms } = commandLineCallbacks(sys);
return { sys, baseline, oldSnap: VirtualFS.snap(sys), cb, getPrograms };
return { sys, baseline, oldSnap: TestFSWithWatch.snap(sys), cb, getPrograms };
}
export function createSolutionBuilderWithWatchHostForBaseline(sys: WatchedSystem, cb: ExecuteCommandLineCallbacks) {
@@ -234,16 +234,16 @@ namespace ts.tscWatch {
}
export function applyChange(sys: BaselineBase["sys"], baseline: BaselineBase["baseline"], change: TscWatchCompileChange["change"], caption?: TscWatchCompileChange["caption"]) {
const oldSnap = VirtualFS.snap(sys);
const oldSnap = TestFSWithWatch.snap(sys);
baseline.push(`Change::${caption ? " " + caption : ""}`, "");
change(sys);
baseline.push("Input::");
VirtualFS.diff(sys, baseline, oldSnap);
return VirtualFS.snap(sys);
TestFSWithWatch.diff(sys, baseline, oldSnap);
return TestFSWithWatch.snap(sys);
}
export interface RunWatchBaseline<T extends BuilderProgram> extends BaselineBase, TscWatchCompileBase<T> {
sys: VirtualFS.TestServerHostTrackingWrittenFiles;
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles;
getPrograms: () => readonly CommandLineProgram[];
watchOrSolution: WatchOrSolution<T>;
}
@@ -298,7 +298,7 @@ namespace ts.tscWatch {
const programs = baselinePrograms(baseline, getPrograms, oldPrograms, baselineDependencies);
sys.serializeWatches(baseline);
baseline.push(`exitCode:: ExitStatus.${ExitStatus[sys.exitCode as ExitStatus]}`, "");
VirtualFS.diff(sys, baseline, oldSnap);
TestFSWithWatch.diff(sys, baseline, oldSnap);
sys.writtenFiles.forEach((value, key) => {
assert.equal(value, 1, `Expected to write file ${key} only once`);
});
@@ -422,7 +422,7 @@ namespace ts.tscWatch {
const originalReadFile = sys.readFile;
const originalWrite = sys.write;
const originalWriteFile = sys.writeFile;
const solutionBuilder = createSolutionBuilder(VirtualFS.changeToHostTrackingWrittenFiles(
const solutionBuilder = createSolutionBuilder(TestFSWithWatch.changeToHostTrackingWrittenFiles(
fakes.patchHostForBuildInfoReadWrite(sys)
), solutionRoots, originalRead);
solutionBuilder.build();
@@ -432,7 +432,7 @@ namespace ts.tscWatch {
return sys;
}
export function createSystemWithSolutionBuild(solutionRoots: readonly string[], files: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[], params?: VirtualFS.TestServerHostCreationParameters) {
export function createSystemWithSolutionBuild(solutionRoots: readonly string[], files: VirtualFS.FileOrFolderOrSymLinkMap | readonly VirtualFS.FileOrFolderOrSymLink[], params?: TestFSWithWatch.TestServerHostCreationParameters) {
return solutionBuildWithBaseline(createWatchedSystem(files, params), solutionRoots);
}
}
@@ -545,7 +545,7 @@ export class A {
});
const {cb: cb2, getPrograms: getPrograms2 } = commandLineCallbacks(sys);
const oldSnap2 = VirtualFS.snap(sys);
const oldSnap2 = TestFSWithWatch.snap(sys);
baseline.push("createing separate watcher");
createWatchProgram(createWatchCompilerHostOfFilesAndCompilerOptionsForBaseline({
rootFiles:[file1.path],
@@ -7,23 +7,23 @@ namespace ts.tscWatch {
["tests"],
[
libFile,
VirtualFS.getTsBuildProjectFile("sample1", "core/tsconfig.json"),
VirtualFS.getTsBuildProjectFile("sample1", "core/index.ts"),
VirtualFS.getTsBuildProjectFile("sample1", "core/anotherModule.ts"),
VirtualFS.getTsBuildProjectFile("sample1", "core/some_decl.d.ts"),
VirtualFS.getTsBuildProjectFile("sample1", "logic/tsconfig.json"),
VirtualFS.getTsBuildProjectFile("sample1", "logic/index.ts"),
VirtualFS.getTsBuildProjectFile("sample1", "tests/tsconfig.json"),
VirtualFS.getTsBuildProjectFile("sample1", "tests/index.ts"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "core/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "core/index.ts"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "core/anotherModule.ts"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "core/some_decl.d.ts"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "logic/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "logic/index.ts"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "tests/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFile("sample1", "tests/index.ts"),
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/sample1` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/sample1` }
),
commandLineArgs: ["-w", "-p", "tests"],
changes: [
{
caption: "local edit in logic ts, and build logic",
change: sys => {
sys.appendFile(VirtualFS.getTsBuildProjectFilePath("sample1", "logic/index.ts"), `function foo() { }`);
sys.appendFile(TestFSWithWatch.getTsBuildProjectFilePath("sample1", "logic/index.ts"), `function foo() { }`);
const solutionBuilder = createSolutionBuilder(sys, ["logic"]);
solutionBuilder.build();
},
@@ -34,7 +34,7 @@ namespace ts.tscWatch {
{
caption: "non local edit in logic ts, and build logic",
change: sys => {
sys.appendFile(VirtualFS.getTsBuildProjectFilePath("sample1", "logic/index.ts"), `export function gfoo() { }`);
sys.appendFile(TestFSWithWatch.getTsBuildProjectFilePath("sample1", "logic/index.ts"), `export function gfoo() { }`);
const solutionBuilder = createSolutionBuilder(sys, ["logic"]);
solutionBuilder.build();
},
@@ -43,7 +43,7 @@ namespace ts.tscWatch {
{
caption: "change in project reference config file builds correctly",
change: sys => {
sys.writeFile(VirtualFS.getTsBuildProjectFilePath("sample1", "logic/tsconfig.json"), JSON.stringify({
sys.writeFile(TestFSWithWatch.getTsBuildProjectFilePath("sample1", "logic/tsconfig.json"), JSON.stringify({
compilerOptions: { composite: true, declaration: true, declarationDir: "decls" },
references: [{ path: "../core" }]
}));
@@ -69,22 +69,22 @@ namespace ts.tscWatch {
["tsconfig.c.json"],
[
libFile,
VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.b.json"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.c.json"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "a.ts"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "b.ts"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "c.ts"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.b.json"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.c.json"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "a.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "b.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "c.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/transitiveReferences` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/transitiveReferences` }
),
commandLineArgs: ["-w", "-p", "tsconfig.c.json"],
changes: [
{
caption: "non local edit b ts, and build b",
change: sys => {
sys.appendFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b.ts"), `export function gfoo() { }`);
sys.appendFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b.ts"), `export function gfoo() { }`);
const solutionBuilder = createSolutionBuilder(sys, ["tsconfig.b.json"]);
solutionBuilder.build();
},
@@ -94,46 +94,46 @@ namespace ts.tscWatch {
caption: "edit on config file",
change: sys => {
sys.ensureFileOrFolder({
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
});
changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.c.json"), { "@ref/*": ["./nrefs/*"] });
changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.c.json"), { "@ref/*": ["./nrefs/*"] });
},
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.c.json"), { "@ref/*": ["./refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.c.json"), { "@ref/*": ["./refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "edit in referenced config file",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"), { "@ref/*": ["./nrefs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"), { "@ref/*": ["./nrefs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert referenced config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"), { "@ref/*": ["./refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"), { "@ref/*": ["./refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "deleting referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json")),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert deleting referenced config file",
change: sys => sys.ensureFileOrFolder(VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.b.json")),
change: sys => sys.ensureFileOrFolder(TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.b.json")),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "deleting transitively referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.a.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.a.json")),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert deleting transitively referenced config file",
change: sys => sys.ensureFileOrFolder(VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json")),
change: sys => sys.ensureFileOrFolder(TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json")),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
],
@@ -147,25 +147,25 @@ namespace ts.tscWatch {
["tsconfig.c.json"],
[
libFile,
VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.a.json"),
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "tsconfig.b.json"),
content: JSON.stringify({
compilerOptions: { composite: true, moduleResolution: "classic" },
files: ["b.ts"],
references: [{ path: "tsconfig.a.json" }]
})
},
VirtualFS.getTsBuildProjectFile("transitiveReferences", "tsconfig.c.json"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "a.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "tsconfig.c.json"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "a.ts"),
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b.ts"),
content: `import {A} from "a";export const b = new A();`
},
VirtualFS.getTsBuildProjectFile("transitiveReferences", "c.ts"),
VirtualFS.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "c.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/transitiveReferences` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/transitiveReferences` }
),
commandLineArgs: ["-w", "-p", "tsconfig.c.json"],
changes: emptyArray,
@@ -180,14 +180,14 @@ namespace ts.tscWatch {
[
libFile,
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
content: JSON.stringify({
compilerOptions: { composite: true },
files: ["index.ts"]
}),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
content: JSON.stringify({
compilerOptions: { composite: true, baseUrl: "./", paths: { "@ref/*": ["../*"] } },
files: ["index.ts"],
@@ -195,7 +195,7 @@ namespace ts.tscWatch {
}),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"),
content: JSON.stringify({
compilerOptions: { baseUrl: "./", paths: { "@ref/*": ["../refs/*"] } },
files: ["index.ts"],
@@ -203,31 +203,31 @@ namespace ts.tscWatch {
}),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/index.ts"),
content: `export class A {}`,
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"),
content: `import {A} from '@ref/a';
export const b = new A();`,
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/index.ts"),
content: `import {b} from '../b';
import {X} from "@ref/a";
b;
X;`,
},
VirtualFS.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/transitiveReferences` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/transitiveReferences` }
),
commandLineArgs: ["-w", "-p", "c"],
changes: [
{
caption: "non local edit b ts, and build b",
change: sys => {
sys.appendFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"), `export function gfoo() { }`);
sys.appendFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"), `export function gfoo() { }`);
const solutionBuilder = createSolutionBuilder(sys, ["b"]);
solutionBuilder.build();
},
@@ -237,37 +237,37 @@ X;`,
caption: "edit on config file",
change: sys => {
sys.ensureFileOrFolder({
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
});
changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../nrefs/*"] });
changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../nrefs/*"] });
},
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "edit in referenced config file",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../nrefs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../nrefs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert referenced config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "deleting referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json")),
timeouts: sys => sys.checkTimeoutQueueLengthAndRun(2)
},
{
caption: "Revert deleting referenced config file",
change: sys => sys.writeFile(
VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
JSON.stringify({
compilerOptions: { composite: true, baseUrl: "./", paths: { "@ref/*": ["../*"] } },
files: ["index.ts"],
@@ -278,13 +278,13 @@ X;`,
},
{
caption: "deleting transitively referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json")),
timeouts: sys => sys.checkTimeoutQueueLengthAndRun(2)
},
{
caption: "Revert deleting transitively referenced config file",
change: sys => sys.writeFile(
VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
JSON.stringify({
compilerOptions: { composite: true },
files: ["index.ts"]
@@ -304,49 +304,49 @@ X;`,
[
libFile,
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
content: JSON.stringify({ compilerOptions: { composite: true } }),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
content: JSON.stringify({
compilerOptions: { composite: true, baseUrl: "./", paths: { "@ref/*": ["../*"] } },
references: [{ path: `../a` }]
}),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"),
content: JSON.stringify({
compilerOptions: { baseUrl: "./", paths: { "@ref/*": ["../refs/*"] } },
references: [{ path: `../b` }]
}),
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/index.ts"),
content: `export class A {}`,
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"),
content: `import {A} from '@ref/a';
export const b = new A();`,
},
{
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/index.ts"),
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/index.ts"),
content: `import {b} from '../b';
import {X} from "@ref/a";
b;
X;`,
},
VirtualFS.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
TestFSWithWatch.getTsBuildProjectFile("transitiveReferences", "refs/a.d.ts"),
],
{ currentDirectory: `${VirtualFS.tsbuildProjectsLocation}/transitiveReferences` }
{ currentDirectory: `${TestFSWithWatch.tsbuildProjectsLocation}/transitiveReferences` }
),
commandLineArgs: ["-w", "-p", "c"],
changes: [
{
caption: "non local edit b ts, and build b",
change: sys => {
sys.appendFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"), `export function gfoo() { }`);
sys.appendFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/index.ts"), `export function gfoo() { }`);
const solutionBuilder = createSolutionBuilder(sys, ["b"]);
solutionBuilder.build();
},
@@ -356,37 +356,37 @@ X;`,
caption: "edit on config file",
change: sys => {
sys.ensureFileOrFolder({
path: VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
path: TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "nrefs/a.d.ts"),
content: sys.readFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "refs/a.d.ts"))!
});
changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../nrefs/*"] });
changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../nrefs/*"] });
},
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "c/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "edit in referenced config file",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../nrefs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../nrefs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "Revert referenced config file edit",
change: sys => changeCompilerOpitonsPaths(sys, VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
change: sys => changeCompilerOpitonsPaths(sys, TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"), { "@ref/*": ["../refs/*"] }),
timeouts: checkSingleTimeoutQueueLengthAndRun
},
{
caption: "deleting referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json")),
timeouts: sys => sys.checkTimeoutQueueLengthAndRun(2)
},
{
caption: "Revert deleting referenced config file",
change: sys => sys.writeFile(
VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "b/tsconfig.json"),
JSON.stringify({
compilerOptions: { composite: true, baseUrl: "./", paths: { "@ref/*": ["../*"] } },
references: [{ path: `../a` }]
@@ -396,13 +396,13 @@ X;`,
},
{
caption: "deleting transitively referenced config file",
change: sys => sys.deleteFile(VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json")),
change: sys => sys.deleteFile(TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json")),
timeouts: sys => sys.checkTimeoutQueueLengthAndRun(2)
},
{
caption: "Revert deleting transitively referenced config file",
change: sys => sys.writeFile(
VirtualFS.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFilePath("transitiveReferences", "a/tsconfig.json"),
JSON.stringify({ compilerOptions: { composite: true } }),
),
timeouts: sys => sys.checkTimeoutQueueLengthAndRun(2)
@@ -1,5 +1,5 @@
namespace ts.tscWatch {
import getFileFromProject = VirtualFS.getTsBuildProjectFile;
import getFileFromProject = TestFSWithWatch.getTsBuildProjectFile;
describe("unittests:: tsc-watch:: watchAPI:: with sourceOfProjectReferenceRedirect", () => {
interface VerifyWatchInput {
files: readonly VirtualFS.FileOrFolderOrSymLink[];
@@ -204,13 +204,13 @@ namespace ts.tscWatch {
function createWatch<T extends BuilderProgram>(
baseline: string[],
config: File,
sys: VirtualFS.TestServerHostTrackingWrittenFiles,
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
createProgram: CreateProgram<T>,
optionsToExtend?: CompilerOptions,
) {
const { cb, getPrograms } = commandLineCallbacks(sys);
baseline.push(`tsc --w${optionsToExtend?.noEmit ? " --noEmit" : ""}`);
const oldSnap = VirtualFS.snap(sys);
const oldSnap = TestFSWithWatch.snap(sys);
const host = createWatchCompilerHostOfConfigFileForBaseline<T>({
configFileName: config.path,
optionsToExtend,
@@ -246,9 +246,9 @@ namespace ts.tscWatch {
function applyChangeForBuilderTest(
baseline: string[],
emitBaseline: string[],
sys: VirtualFS.TestServerHostTrackingWrittenFiles,
emitSys: VirtualFS.TestServerHostTrackingWrittenFiles,
change: (sys: VirtualFS.TestServerHostTrackingWrittenFiles) => void,
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
emitSys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
change: (sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles) => void,
caption: string
) {
// Change file
@@ -260,8 +260,8 @@ namespace ts.tscWatch {
baseline: string[],
emitBaseline: string[],
config: File,
sys: VirtualFS.TestServerHostTrackingWrittenFiles,
emitSys: VirtualFS.TestServerHostTrackingWrittenFiles,
sys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
emitSys: TestFSWithWatch.TestServerHostTrackingWrittenFiles,
createProgram: CreateProgram<T>,
optionsToExtend?: CompilerOptions) {
createWatch(baseline, config, sys, createProgram, optionsToExtend);
@@ -385,7 +385,7 @@ namespace ts.tscWatch {
applyChange(sys, baseline, sys => sys.writeFile(mainFile.path, "export const x = 10;"), "Fix error");
const { cb, getPrograms } = commandLineCallbacks(sys);
const oldSnap = VirtualFS.snap(sys);
const oldSnap = TestFSWithWatch.snap(sys);
const reportDiagnostic = createDiagnosticReporter(sys, /*pretty*/ true);
const reportWatchStatus = createWatchStatusReporter(sys, /*pretty*/ true);
const host = createWatchCompilerHostOfConfigFile({
+4 -4
View File
@@ -3,13 +3,13 @@ namespace ts.projectSystem {
export import protocol = server.protocol;
export import CommandNames = server.CommandNames;
export import TestServerHost = VirtualFS.TestServerHost;
export import TestServerHost = TestFSWithWatch.TestServerHost;
export type File = VirtualFS.File;
export type SymLink = VirtualFS.SymLink;
export type Folder = VirtualFS.Folder;
export import createServerHost = VirtualFS.createServerHost;
export import checkArray = VirtualFS.checkArray;
export import libFile = VirtualFS.libFile;
export import createServerHost = TestFSWithWatch.createServerHost;
export import checkArray = TestFSWithWatch.checkArray;
export import libFile = TestFSWithWatch.libFile;
export import commonFile1 = tscWatch.commonFile1;
export import commonFile2 = tscWatch.commonFile2;
@@ -110,7 +110,7 @@ ${appendDts}`
describe("when dependency project is not open", () => {
describe("Of usageTs", () => {
it("with initial file open, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -146,7 +146,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with initial file open, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -182,7 +182,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -225,7 +225,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -268,7 +268,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -322,7 +322,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -376,7 +376,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -419,7 +419,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -462,7 +462,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -516,7 +516,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -573,7 +573,7 @@ ${appendDts}`
describe("Of dependencyTs in usage project", () => {
it("with initial file open, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -604,7 +604,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with initial file open, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -635,7 +635,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -673,7 +673,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -711,7 +711,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -760,7 +760,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -809,7 +809,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -847,7 +847,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -885,7 +885,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -934,7 +934,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -988,7 +988,7 @@ ${appendDts}`
describe("when the depedency file is open", () => {
describe("Of usageTs", () => {
it("with initial file open, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1024,7 +1024,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with initial file open, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1060,7 +1060,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1114,7 +1114,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1168,7 +1168,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1222,7 +1222,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1276,7 +1276,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1330,7 +1330,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1384,7 +1384,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1438,7 +1438,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1495,7 +1495,7 @@ ${appendDts}`
describe("Of dependencyTs in usage project", () => {
it("with initial file open, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1526,7 +1526,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1575,7 +1575,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with local change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1624,7 +1624,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1673,7 +1673,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, noEmitOutput(), "Emit output");
});
it("with change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1725,7 +1725,7 @@ ${appendDts}`
describe("Of dependencyTs", () => {
it("with initial file open, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1762,7 +1762,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with initial file open, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1798,7 +1798,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1853,7 +1853,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1907,7 +1907,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -1962,7 +1962,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with local change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -2016,7 +2016,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -2071,7 +2071,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to dependency, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -2125,7 +2125,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, without specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -2180,7 +2180,7 @@ ${appendDts}`
assert.deepEqual(actualEmitOutput, expectedEmitOutput(expectedFiles), "Emit output");
});
it("with change to usage, with specifying project file", () => {
const host = VirtualFS.changeToHostTrackingWrittenFiles(
const host = TestFSWithWatch.changeToHostTrackingWrittenFiles(
createServerHost([dependencyTs, dependencyConfig, usageTs, usageConfig, libFile])
);
const session = createSession(host);
@@ -10,8 +10,8 @@ namespace ts.projectSystem {
describe("with container project", () => {
function getProjectFiles(project: string): [File, File] {
return [
VirtualFS.getTsBuildProjectFile(project, "tsconfig.json"),
VirtualFS.getTsBuildProjectFile(project, "index.ts"),
TestFSWithWatch.getTsBuildProjectFile(project, "tsconfig.json"),
TestFSWithWatch.getTsBuildProjectFile(project, "index.ts"),
];
}
@@ -19,7 +19,7 @@ namespace ts.projectSystem {
const containerLib = getProjectFiles("container/lib");
const containerExec = getProjectFiles("container/exec");
const containerCompositeExec = getProjectFiles("container/compositeExec");
const containerConfig = VirtualFS.getTsBuildProjectFile(project, "tsconfig.json");
const containerConfig = TestFSWithWatch.getTsBuildProjectFile(project, "tsconfig.json");
const files = [libFile, ...containerLib, ...containerExec, ...containerCompositeExec, containerConfig];
it("does not error on container only project", () => {
@@ -29,7 +29,7 @@ namespace ts.projectSystem {
const session = createSession(host, { logger: createLoggerWithInMemoryLogs() });
const service = session.getProjectService();
service.openExternalProjects([{
projectFileName: VirtualFS.getTsBuildProjectFilePath(project, project),
projectFileName: TestFSWithWatch.getTsBuildProjectFilePath(project, project),
rootFiles: files.map(f => ({ fileName: f.path })),
options: {}
}]);
@@ -1,14 +1,14 @@
namespace ts.projectSystem {
describe("unittests:: tsserver:: projects with references: invoking when references are already built", () => {
it("on sample project", () => {
const coreConfig = VirtualFS.getTsBuildProjectFile("sample1", "core/tsconfig.json");
const coreIndex = VirtualFS.getTsBuildProjectFile("sample1", "core/index.ts");
const coreAnotherModule = VirtualFS.getTsBuildProjectFile("sample1", "core/anotherModule.ts");
const coreSomeDecl = VirtualFS.getTsBuildProjectFile("sample1", "core/some_decl.d.ts");
const logicConfig = VirtualFS.getTsBuildProjectFile("sample1", "logic/tsconfig.json");
const logicIndex = VirtualFS.getTsBuildProjectFile("sample1", "logic/index.ts");
const testsConfig = VirtualFS.getTsBuildProjectFile("sample1", "tests/tsconfig.json");
const testsIndex = VirtualFS.getTsBuildProjectFile("sample1", "tests/index.ts");
const coreConfig = TestFSWithWatch.getTsBuildProjectFile("sample1", "core/tsconfig.json");
const coreIndex = TestFSWithWatch.getTsBuildProjectFile("sample1", "core/index.ts");
const coreAnotherModule = TestFSWithWatch.getTsBuildProjectFile("sample1", "core/anotherModule.ts");
const coreSomeDecl = TestFSWithWatch.getTsBuildProjectFile("sample1", "core/some_decl.d.ts");
const logicConfig = TestFSWithWatch.getTsBuildProjectFile("sample1", "logic/tsconfig.json");
const logicIndex = TestFSWithWatch.getTsBuildProjectFile("sample1", "logic/index.ts");
const testsConfig = TestFSWithWatch.getTsBuildProjectFile("sample1", "tests/tsconfig.json");
const testsIndex = TestFSWithWatch.getTsBuildProjectFile("sample1", "tests/index.ts");
const host = createServerHost([libFile, coreConfig, coreIndex, coreAnotherModule, coreSomeDecl, logicConfig, logicIndex, testsConfig, testsIndex]);
const logger = createLoggerWithInMemoryLogs();
const service = createProjectService(host, { logger });
@@ -34,8 +34,8 @@ ${file.fileContent}`;
subScenario: string,
requests: [string, ((host: TestServerHost, fshost: VirtualFS.VirtualServerHost) => void) | Partial<protocol.Request>][],
) {
const host = VirtualFS.createServerHost({ executingFilePath: "/host/tsc.js" });
const fshost = VirtualFS.createVirtualServerHost({ executingFilePath: "/fshost/tsc.js" });
const host = TestFSWithWatch.createServerHost({ executingFilePath: "/host/tsc.js" });
const fshost = TestFSWithWatch.createVirtualServerHost({ executingFilePath: "/fshost/tsc.js" });
const session = createSession(host, { fshost, logger: createLoggerWithInMemoryLogs(), canUseEvents: true });
const history: string[] = [];
VirtualFS.createWatcher(fshost.fsWatches, "/host/b/app.ts" as Path, {
@@ -46,8 +46,8 @@ ${file.fileContent}`;
inode: undefined,
});
let prev = VirtualFS.snap(fshost);
let prev2 = VirtualFS.snap(host);
let prev = TestFSWithWatch.snap(fshost);
let prev2 = TestFSWithWatch.snap(host);
for (const [name, request] of requests) {
if (typeof request === "function") {
request(host, fshost);
@@ -57,16 +57,16 @@ ${file.fileContent}`;
}
history.push("");
history.push("#### " + name);
VirtualFS.diff(fshost, history, prev);
prev = VirtualFS.snap(fshost);
VirtualFS.diff(host, history, prev2);
prev2 = VirtualFS.snap(host);
host.serializeTimeout(history)
TestFSWithWatch.diff(fshost, history, prev);
prev = TestFSWithWatch.snap(fshost);
TestFSWithWatch.diff(host, history, prev2);
prev2 = TestFSWithWatch.snap(host);
host.serializeTimeout(history);
}
history.push("### fshost watches")
fshost.serializeWatches(history)
history.push("### host watches")
host.serializeWatches(history)
history.push("### fshost watches");
fshost.serializeWatches(history);
history.push("### host watches");
host.serializeWatches(history);
Harness.Baseline.runBaseline(`tsserver/${scenario}/${subScenario.split(" ").join("-")}.txt`, history.join("\r\n"));
baselineTsserverLogs(scenario, subScenario, session);
}
@@ -41,7 +41,7 @@ namespace ts.projectSystem {
let fshost: VirtualFS.VirtualServerHost | undefined;
if (isVfs) {
serverMode = LanguageServiceMode.Semantic;
fshost = VirtualFS.createVirtualServerHost({ executingFilePath: "/a/lib/tsc.js" });
fshost = TestFSWithWatch.createVirtualServerHost({ executingFilePath: "/a/lib/tsc.js" });
fshost.ensureFileOrFolder(libFile);
}
const logger = logLevel !== undefined ? new server.MainProcessLogger(logLevel, webHost) : nullLogger();
+1 -1
View File
@@ -58,7 +58,7 @@ namespace ts.server {
console.warn = (...args) => logger.msg(args.length === 1 ? args[0] : args.join(", "), Msg.Err);
console.error = (...args) => logger.msg(args.length === 1 ? args[0] : args.join(", "), Msg.Err);
const fshost = vfs ? new VirtualFS.VirtualServerHost({
const fshost = vfs ? new TestFSWithWatch.VirtualServerHost({
useCaseSensitiveFileNames: sys.useCaseSensitiveFileNames,
executingFilePath: directorySeparator, // Use same executingFilePath as webserver
newLine: sys.newLine,
+1 -1
View File
@@ -16,9 +16,9 @@
{ "path": "../compiler", "prepend": true },
{ "path": "../services", "prepend": true },
{ "path": "../jsTyping", "prepend": true },
{ "path": "../vfs", "prepend": true },
{ "path": "../server", "prepend": true },
{ "path": "../webServer", "prepend": true },
{ "path": "../vfs", "prepend": true },
{ "path": "../deprecatedCompat", "prepend": true }
]
}
-1
View File
@@ -12,7 +12,6 @@
{ "path": "../compiler" },
{ "path": "../jsTyping" },
{ "path": "../services" },
{ "path": "../vfs" },
{ "path": "../server" }
],
"files": [