Skip to content

Commit d8fe6ed

Browse files
committed
Instead of using current time, use predefined time for modification to ensure we can detect changes correctly and arent timing dependent
Fixes microsoft#22455
1 parent 0fa838a commit d8fe6ed

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/harness/virtualFileSystemWithWatch.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,14 @@ interface Array<T> {}`
276276
DynamicPolling = "RecursiveDirectoryUsingDynamicPriorityPolling"
277277
}
278278

279+
const timeIncrements = 1000;
279280
export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, ModuleResolutionHost {
280281
args: string[] = [];
281282

282283
private readonly output: string[] = [];
283284

284285
private fs: Map<FSEntry> = createMap<FSEntry>();
286+
private time = timeIncrements;
285287
getCanonicalFileName: (s: string) => string;
286288
private toPath: (f: string) => Path;
287289
private timeoutCallbacks = new Callbacks();
@@ -355,6 +357,11 @@ interface Array<T> {}`
355357
return s;
356358
}
357359

360+
private now() {
361+
this.time += timeIncrements;
362+
return new Date(this.time);
363+
}
364+
358365
reloadFS(fileOrFolderList: ReadonlyArray<FileOrFolder>, options?: Partial<ReloadWatchInvokeOptions>) {
359366
const mapNewLeaves = createMap<true>();
360367
const isNewFs = this.fs.size === 0;
@@ -381,8 +388,8 @@ interface Array<T> {}`
381388
}
382389
else {
383390
currentEntry.content = fileOrDirectory.content;
384-
currentEntry.modifiedTime = new Date();
385-
this.fs.get(getDirectoryPath(currentEntry.path)).modifiedTime = new Date();
391+
currentEntry.modifiedTime = this.now();
392+
this.fs.get(getDirectoryPath(currentEntry.path)).modifiedTime = this.now();
386393
if (options && options.invokeDirectoryWatcherInsteadOfFileChanged) {
387394
this.invokeDirectoryWatcher(getDirectoryPath(currentEntry.fullPath), currentEntry.fullPath);
388395
}
@@ -406,7 +413,7 @@ interface Array<T> {}`
406413
}
407414
else {
408415
// Folder update: Nothing to do.
409-
currentEntry.modifiedTime = new Date();
416+
currentEntry.modifiedTime = this.now();
410417
}
411418
}
412419
}
@@ -505,7 +512,7 @@ interface Array<T> {}`
505512

506513
private addFileOrFolderInFolder(folder: Folder, fileOrDirectory: File | Folder | SymLink, ignoreWatch?: boolean) {
507514
insertSorted(folder.entries, fileOrDirectory, (a, b) => compareStringsCaseSensitive(getBaseFileName(a.path), getBaseFileName(b.path)));
508-
folder.modifiedTime = new Date();
515+
folder.modifiedTime = this.now();
509516
this.fs.set(fileOrDirectory.path, fileOrDirectory);
510517

511518
if (ignoreWatch) {
@@ -520,7 +527,7 @@ interface Array<T> {}`
520527
const baseFolder = this.fs.get(basePath) as Folder;
521528
if (basePath !== fileOrDirectory.path) {
522529
Debug.assert(!!baseFolder);
523-
baseFolder.modifiedTime = new Date();
530+
baseFolder.modifiedTime = this.now();
524531
filterMutate(baseFolder.entries, entry => entry !== fileOrDirectory);
525532
}
526533
this.fs.delete(fileOrDirectory.path);
@@ -587,7 +594,7 @@ interface Array<T> {}`
587594
return {
588595
path: this.toPath(fullPath),
589596
fullPath,
590-
modifiedTime: new Date()
597+
modifiedTime: this.now()
591598
};
592599
}
593600

0 commit comments

Comments
 (0)