Fix missing sanitization in verifyTsc baselines for timestamps (#58609)

This commit is contained in:
Sheetal Nandi
2024-05-21 15:25:19 -07:00
committed by GitHub
parent 75342d8ca8
commit 9370347f5b
415 changed files with 2534 additions and 1602 deletions
@@ -5,6 +5,12 @@ import { jsonToReadableText } from "../helpers.js";
import { TscCompileSystem } from "./tsc.js";
import { TestServerHost } from "./virtualFileSystemWithWatch.js";
export function sanitizeSysOutput(output: string) {
return output
.replace(/Elapsed::\s[0-9]+(?:\.\d+)?ms/g, "Elapsed:: *ms")
.replace(/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s(A|P)M/g, "HH:MM:SS AM");
}
export type CommandLineProgram = [ts.Program, ts.BuilderProgram?];
export interface CommandLineCallbacks {
cb: ts.ExecuteCommandLineCallbacks;
+2 -1
View File
@@ -13,6 +13,7 @@ import {
ReadableBuildInfo,
ReadableProgramBuildInfoFileInfo,
ReadableProgramMultiFileEmitBuildInfo,
sanitizeSysOutput,
toPathWithSystem,
tscBaselineName,
} from "./baseline.js";
@@ -88,7 +89,7 @@ export function testTscCompileLike(input: TestTscCompileLike) {
${baseFsPatch ? vfs.formatPatch(baseFsPatch) : ""}
Output::
${sys.output.join("")}
${sys.output.map(sanitizeSysOutput).join("")}
${patch ? vfs.formatPatch(patch) : ""}`,
};
+1 -2
View File
@@ -104,8 +104,7 @@ function changeToTestServerHostWithTimeoutLogging(host: TestServerHostTrackingWr
log: s => baseline.push(s),
logs: baseline,
};
host.timeoutCallbacks.switchToBaseliningInvoke(logger, SerializeOutputOrder.BeforeDiff);
host.immediateCallbacks.switchToBaseliningInvoke(logger, SerializeOutputOrder.BeforeDiff);
host.switchToBaseliningInvoke(logger, SerializeOutputOrder.BeforeDiff);
return host;
}
+1 -12
View File
@@ -20,7 +20,6 @@ import {
FileOrFolderOrSymLink,
libFile,
SerializeOutputOrder,
StateLogger,
TestServerHost,
TestServerHostTrackingWrittenFiles,
} from "./virtualFileSystemWithWatch.js";
@@ -56,21 +55,11 @@ export function patchHostTimeouts(
return host;
}
const originalSetTime = host.setTime;
host.timeoutCallbacks.switchToBaseliningInvoke(logger, SerializeOutputOrder.None);
host.immediateCallbacks.switchToBaseliningInvoke(logger as StateLogger, SerializeOutputOrder.None);
host.pendingInstalls.switchToBaseliningInvoke(logger, SerializeOutputOrder.None);
host.setTime = setTime;
host.switchToBaseliningInvoke(logger, SerializeOutputOrder.None);
host.baselineHost = baselineHost;
host.patched = true;
return host;
function setTime(time: number) {
logger.log(`Host is moving to new time`);
return originalSetTime.call(host, time);
}
function baselineHost(title: string) {
logger.log(title);
host.serializeState(logger.logs, SerializeOutputOrder.None);
@@ -4,6 +4,7 @@ import {
WatchUtils,
} from "../../../harness/watchUtils.js";
import {
append,
arrayFrom,
clear,
clone,
@@ -46,6 +47,7 @@ import {
} from "../../_namespaces/ts.js";
import { typingsInstaller } from "../../_namespaces/ts.server.js";
import { timeIncrements } from "../../_namespaces/vfs.js";
import { sanitizeSysOutput } from "./baseline.js";
export const libFile: File = {
path: "/a/lib/lib.d.ts",
@@ -458,6 +460,17 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost,
this.time = time;
}
switchToBaseliningInvoke(logger: StateLogger, serializeOutputOrder: SerializeOutputOrder) {
const originalSetTime = this.setTime;
this.setTime = time => {
logger.log(`Host is moving to new time`);
return originalSetTime.call(this, time);
};
this.timeoutCallbacks.switchToBaseliningInvoke(logger, serializeOutputOrder);
this.immediateCallbacks.switchToBaseliningInvoke(logger, serializeOutputOrder);
this.pendingInstalls.switchToBaseliningInvoke(logger, serializeOutputOrder);
}
private reloadFS(fileOrFolderOrSymLinkList: FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink[]) {
Debug.assert(this.fs.size === 0);
if (isArray(fileOrFolderOrSymLinkList)) {
@@ -1180,11 +1193,7 @@ function diffFsEntry(baseline: string[], oldFsEntry: FSEntry | undefined, newFsE
function baselineOutputs(baseline: string[], output: readonly string[], start: number, end = output.length) {
let baselinedOutput: string[] | undefined;
for (let i = start; i < end; i++) {
(baselinedOutput ||= []).push(
output[i]
.replace(/Elapsed::\s[0-9]+(?:\.\d+)?ms/g, "Elapsed:: *ms")
.replace(/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s(A|P)M/g, "HH:MM:SS AM"),
);
baselinedOutput = append(baselinedOutput, sanitizeSysOutput(output[i]));
}
if (baselinedOutput) baseline.push(baselinedOutput.join(""));
}