Skip to content

Commit

Permalink
Fix missing sanitization in verifyTsc baselines for timestamps (micro…
Browse files Browse the repository at this point in the history
  • Loading branch information
sheetalkamat authored May 21, 2024
1 parent 75342d8 commit 9370347
Show file tree
Hide file tree
Showing 415 changed files with 2,534 additions and 1,602 deletions.
6 changes: 6 additions & 0 deletions src/testRunner/unittests/helpers/baseline.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion src/testRunner/unittests/helpers/tsc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
ReadableBuildInfo,
ReadableProgramBuildInfoFileInfo,
ReadableProgramMultiFileEmitBuildInfo,
sanitizeSysOutput,
toPathWithSystem,
tscBaselineName,
} from "./baseline.js";
Expand Down Expand Up @@ -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) : ""}`,
};
Expand Down
3 changes: 1 addition & 2 deletions src/testRunner/unittests/helpers/tscWatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
13 changes: 1 addition & 12 deletions src/testRunner/unittests/helpers/tsserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import {
FileOrFolderOrSymLink,
libFile,
SerializeOutputOrder,
StateLogger,
TestServerHost,
TestServerHostTrackingWrittenFiles,
} from "./virtualFileSystemWithWatch.js";
Expand Down Expand Up @@ -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);
Expand Down
19 changes: 14 additions & 5 deletions src/testRunner/unittests/helpers/virtualFileSystemWithWatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
WatchUtils,
} from "../../../harness/watchUtils.js";
import {
append,
arrayFrom,
clear,
clone,
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -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(""));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,17 +76,17 @@ const globalConst = 10;

Output::
/lib/tsc --b /src/app --verbose
[[90m12:00:16 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

[[90m12:00:17 AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/lib/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/lib/module.tsbuildinfo' does not exist

[[90m12:00:18 AM[0m] Building project '/src/lib/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/lib/tsconfig.json'...

[[90m12:00:26 AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist

[[90m12:00:27 AM[0m] Building project '/src/app/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/app/tsconfig.json'...

exitCode:: ExitStatus.Success

Expand Down Expand Up @@ -675,17 +675,17 @@ export const x = 10;console.log(x);

Output::
/lib/tsc --b /src/app --verbose
[[90m12:00:40 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

[[90m12:00:41 AM[0m] Project 'src/lib/tsconfig.json' is out of date because output 'src/lib/module.tsbuildinfo' is older than input 'src/lib/file1.ts'
[[90mHH:MM:SS AM[0m] Project 'src/lib/tsconfig.json' is out of date because output 'src/lib/module.tsbuildinfo' is older than input 'src/lib/file1.ts'

[[90m12:00:42 AM[0m] Building project '/src/lib/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/lib/tsconfig.json'...

[[90m12:00:49 AM[0m] Project 'src/app/tsconfig.json' is up to date with .d.ts files from its dependencies
[[90mHH:MM:SS AM[0m] Project 'src/app/tsconfig.json' is up to date with .d.ts files from its dependencies

[[90m12:00:50 AM[0m] Updating output timestamps of project '/src/app/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Updating output timestamps of project '/src/app/tsconfig.json'...

exitCode:: ExitStatus.Success

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,17 @@ const globalConst = 10;

Output::
/lib/tsc --b /src/app --verbose
[[90m12:00:16 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

[[90m12:00:17 AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/lib/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/lib/module.tsbuildinfo' does not exist

[[90m12:00:18 AM[0m] Building project '/src/lib/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/lib/tsconfig.json'...

[[90m12:00:26 AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist

[[90m12:00:27 AM[0m] Building project '/src/app/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/app/tsconfig.json'...

src/app/tsconfig.json:15:5 - error TS5102: Option 'prepend' has been removed. Please remove it from your configuration.

Expand Down Expand Up @@ -469,17 +469,17 @@ export const x = 10;console.log(x);

Output::
/lib/tsc --b /src/app --verbose
[[90m12:00:31 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

[[90m12:00:32 AM[0m] Project 'src/lib/tsconfig.json' is out of date because output 'src/lib/module.tsbuildinfo' is older than input 'src/lib/file1.ts'
[[90mHH:MM:SS AM[0m] Project 'src/lib/tsconfig.json' is out of date because output 'src/lib/module.tsbuildinfo' is older than input 'src/lib/file1.ts'

[[90m12:00:33 AM[0m] Building project '/src/lib/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/lib/tsconfig.json'...

[[90m12:00:40 AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist

[[90m12:00:41 AM[0m] Building project '/src/app/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/app/tsconfig.json'...

src/app/tsconfig.json:15:5 - error TS5102: Option 'prepend' has been removed. Please remove it from your configuration.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,17 +76,17 @@ const globalConst = 10;

Output::
/lib/tsc -b /src/app --verbose
[[90m12:00:18 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

[[90m12:00:19 AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/lib/tsconfig.json' is out of date because output file 'src/module.tsbuildinfo' does not exist

[[90m12:00:20 AM[0m] Building project '/src/lib/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/lib/tsconfig.json'...

[[90m12:00:28 AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/app/tsconfig.json' is out of date because output file 'src/app/module.tsbuildinfo' does not exist

[[90m12:00:29 AM[0m] Building project '/src/app/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/app/tsconfig.json'...

exitCode:: ExitStatus.Success

Expand Down
10 changes: 5 additions & 5 deletions tests/baselines/reference/tsbuild/clean/tsx-with-dts-emit.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ export const x = 10;

Output::
/lib/tsc --b src/project -v --explainFiles
[[90m12:00:10 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/project/tsconfig.json

[[90m12:00:11 AM[0m] Project 'src/project/tsconfig.json' is out of date because output file 'src/project/src/main.js' does not exist
[[90mHH:MM:SS AM[0m] Project 'src/project/tsconfig.json' is out of date because output file 'src/project/src/main.js' does not exist

[[90m12:00:12 AM[0m] Building project '/src/project/tsconfig.json'...
[[90mHH:MM:SS AM[0m] Building project '/src/project/tsconfig.json'...

lib/lib.d.ts
Default library for target 'es5'
Expand Down Expand Up @@ -66,10 +66,10 @@ Input::

Output::
/lib/tsc --b src/project -v --explainFiles
[[90m12:00:15 AM[0m] Projects in this build:
[[90mHH:MM:SS AM[0m] Projects in this build:
* src/project/tsconfig.json

[[90m12:00:16 AM[0m] Project 'src/project/tsconfig.json' is up to date because newest input 'src/project/src/main.tsx' is older than output 'src/project/src/main.js'
[[90mHH:MM:SS AM[0m] Project 'src/project/tsconfig.json' is up to date because newest input 'src/project/src/main.tsx' is older than output 'src/project/src/main.js'

exitCode:: ExitStatus.Success

Expand Down
Loading

0 comments on commit 9370347

Please sign in to comment.