Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix missing sanitization in verifyTsc baselines for timestamps #58609

Merged
merged 1 commit into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
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
[12:00:16 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

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

[12:00:18 AM] Building project '/src/lib/tsconfig.json'...
[HH:MM:SS AM] Building project '/src/lib/tsconfig.json'...

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

[12:00:27 AM] Building project '/src/app/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:40 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

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

[12:00:42 AM] Building project '/src/lib/tsconfig.json'...
[HH:MM:SS AM] Building project '/src/lib/tsconfig.json'...

[12:00:49 AM] Project 'src/app/tsconfig.json' is up to date with .d.ts files from its dependencies
[HH:MM:SS AM] Project 'src/app/tsconfig.json' is up to date with .d.ts files from its dependencies

[12:00:50 AM] Updating output timestamps of project '/src/app/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:16 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

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

[12:00:18 AM] Building project '/src/lib/tsconfig.json'...
[HH:MM:SS AM] Building project '/src/lib/tsconfig.json'...

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

[12:00:27 AM] Building project '/src/app/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:31 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

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

[12:00:33 AM] Building project '/src/lib/tsconfig.json'...
[HH:MM:SS AM] Building project '/src/lib/tsconfig.json'...

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

[12:00:41 AM] Building project '/src/app/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:18 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/lib/tsconfig.json
* src/app/tsconfig.json

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

[12:00:20 AM] Building project '/src/lib/tsconfig.json'...
[HH:MM:SS AM] Building project '/src/lib/tsconfig.json'...

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

[12:00:29 AM] Building project '/src/app/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:10 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/project/tsconfig.json

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

[12:00:12 AM] Building project '/src/project/tsconfig.json'...
[HH:MM:SS AM] 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
[12:00:15 AM] Projects in this build:
[HH:MM:SS AM] Projects in this build:
* src/project/tsconfig.json

[12:00:16 AM] 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'
[HH:MM:SS AM] 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