mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix missing sanitization in verifyTsc baselines for timestamps (#58609)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) : ""}`,
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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(""));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user