Skip to content

Commit 4c6f25a

Browse files
authored
More refactoring of tsc baselines to help with easier updates (#48572)
* Some refactoring of baselines * Some refactoring of baselines
1 parent 8f6e626 commit 4c6f25a

File tree

293 files changed

+162742
-161619
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

293 files changed

+162742
-161619
lines changed

src/testRunner/unittests/tsbuild/amdModulesWithOut.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@ namespace ts {
1919
modifyFs,
2020
modifyAgainFs
2121
}: VerifyOutFileScenarioInput) {
22-
verifyTscIncrementalEdits({
22+
verifyTscWithEdits({
2323
scenario: "amdModulesWithOut",
2424
subScenario,
2525
fs: () => outFileFs,
2626
commandLineArgs: ["--b", "/src/app", "--verbose"],
2727
baselineSourceMap: true,
2828
modifyFs,
29-
incrementalScenarios: [
29+
edits: [
3030
{
31-
buildKind: BuildKind.IncrementalDtsUnchanged,
31+
subScenario: "incremental-declaration-doesnt-change",
3232
modifyFs: fs => appendText(fs, "/src/lib/file1.ts", "console.log(x);")
3333
},
3434
...(modifyAgainFs ? [{
35-
buildKind: BuildKind.IncrementalHeadersChange,
35+
subScenario: "incremental-headers-change-without-dts-changes",
3636
modifyFs: modifyAgainFs
3737
}] : emptyArray),
3838
]

src/testRunner/unittests/tsbuild/configFileErrors.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace ts {
99
});
1010

1111
describe("unittests:: tsbuild:: configFileErrors:: reports syntax errors in config file", () => {
12-
verifyTscIncrementalEdits({
12+
verifyTscWithEdits({
1313
scenario: "configFileErrors",
1414
subScenario: "reports syntax errors in config file",
1515
fs: () => loadProjectFromFiles({
@@ -27,21 +27,18 @@ namespace ts {
2727
}`
2828
}),
2929
commandLineArgs: ["--b", "/src/tsconfig.json"],
30-
incrementalScenarios: [
30+
edits: [
3131
{
32-
buildKind: BuildKind.IncrementalDtsUnchanged,
3332
modifyFs: fs => replaceText(fs, "/src/tsconfig.json", ",", `,
3433
"declaration": true,`),
3534
subScenario: "reports syntax errors after change to config file"
3635
},
3736
{
38-
buildKind: BuildKind.IncrementalDtsUnchanged,
3937
modifyFs: fs => appendText(fs, "/src/a.ts", "export function fooBar() { }"),
4038
subScenario: "reports syntax errors after change to ts file"
4139
},
4240
noChangeRun,
4341
{
44-
buildKind: BuildKind.IncrementalDtsChange,
4542
modifyFs: fs => fs.writeFileSync(
4643
"/src/tsconfig.json",
4744
JSON.stringify({
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
namespace ts {
22
describe("unittests:: tsbuild:: when containerOnly project is referenced", () => {
3-
verifyTscSerializedIncrementalEdits({
3+
verifyTscWithEdits({
44
scenario: "containerOnlyReferenced",
55
subScenario: "verify that subsequent builds after initial build doesnt build anything",
66
fs: () => loadProjectFromDisk("tests/projects/containerOnlyReferenced"),
77
commandLineArgs: ["--b", "/src", "--verbose"],
8-
incrementalScenarios: noChangeOnlyRuns
8+
edits: noChangeOnlyRuns
99
});
1010
});
1111
}

src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,24 @@ namespace ts {
99
});
1010

1111
function verifyEmitDeclarationOnly(disableMap?: true) {
12-
verifyTscSerializedIncrementalEdits({
12+
verifyTscWithEdits({
1313
subScenario: `only dts output in circular import project with emitDeclarationOnly${disableMap ? "" : " and declarationMap"}`,
1414
fs: () => projFs,
1515
scenario: "emitDeclarationOnly",
1616
commandLineArgs: ["--b", "/src", "--verbose"],
1717
modifyFs: disableMap ?
1818
(fs => replaceText(fs, "/src/tsconfig.json", `"declarationMap": true,`, "")) :
1919
undefined,
20-
incrementalScenarios: [{
21-
buildKind: BuildKind.IncrementalDtsChange,
20+
edits: [{
21+
subScenario: "incremental-declaration-changes",
2222
modifyFs: fs => replaceText(fs, "/src/src/a.ts", "b: B;", "b: B; foo: any;"),
2323
}],
2424
});
2525
}
2626
verifyEmitDeclarationOnly();
2727
verifyEmitDeclarationOnly(/*disableMap*/ true);
2828

29-
verifyTscSerializedIncrementalEdits({
29+
verifyTscWithEdits({
3030
subScenario: `only dts output in non circular imports project with emitDeclarationOnly`,
3131
fs: () => projFs,
3232
scenario: "emitDeclarationOnly",
@@ -35,17 +35,16 @@ namespace ts {
3535
fs.rimrafSync("/src/src/index.ts");
3636
replaceText(fs, "/src/src/a.ts", `import { B } from "./b";`, `export class B { prop = "hello"; }`);
3737
},
38-
incrementalScenarios: [
38+
edits: [
3939
{
40-
buildKind: BuildKind.IncrementalDtsUnchanged,
40+
subScenario: "incremental-declaration-doesnt-change",
4141
modifyFs: fs => replaceText(fs, "/src/src/a.ts", "export interface A {", `class C { }
4242
export interface A {`),
4343

4444
},
4545
{
46-
buildKind: BuildKind.IncrementalDtsChange,
46+
subScenario: "incremental-declaration-changes",
4747
modifyFs: fs => replaceText(fs, "/src/src/a.ts", "b: B;", "b: B; foo: any;"),
48-
4948
},
5049
],
5150
});

src/testRunner/unittests/tsbuild/helpers.ts

Lines changed: 43 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -331,21 +331,22 @@ interface Symbol {
331331
(originalWriteFile || sys.writeFile).call(sys, `${buildInfoPath}.baseline.txt`, text);
332332
}
333333

334-
interface VerifyIncrementalCorrectness {
334+
interface VerifyTscEditCorrectnessInput {
335335
scenario: TestTscCompile["scenario"];
336336
commandLineArgs: TestTscCompile["commandLineArgs"];
337337
modifyFs: TestTscCompile["modifyFs"];
338-
incrementalModifyFs: TscIncremental["modifyFs"];
338+
editFs: TestTscEdit["modifyFs"];
339339
tick: () => void;
340340
baseFs: vfs.FileSystem;
341341
newSys: TscCompileSystem;
342-
cleanBuildDiscrepancies: TscIncremental["cleanBuildDiscrepancies"];
342+
cleanBuildDiscrepancies: TestTscEdit["cleanBuildDiscrepancies"];
343343
}
344-
function verifyIncrementalCorrectness(input: () => VerifyIncrementalCorrectness, index: number, subScenario: TestTscCompile["subScenario"]) {
345-
it(`Verify emit output file text is same when built clean for incremental scenario at:: ${index} ${subScenario}`, () => {
344+
/** Verify that emit is same as clean build vs building after edit */
345+
function verifyTscEditCorrectness(input: () => VerifyTscEditCorrectnessInput, index: number, subScenario: TestTscCompile["subScenario"]) {
346+
it(`Verify emit output file text is same when built clean for incremental edit scenario at:: ${index} ${subScenario}`, () => {
346347
const {
347348
scenario, commandLineArgs, cleanBuildDiscrepancies,
348-
modifyFs, incrementalModifyFs,
349+
modifyFs, editFs,
349350
tick, baseFs, newSys
350351
} = input();
351352
const sys = testTscCompile({
@@ -356,7 +357,7 @@ interface Symbol {
356357
modifyFs: fs => {
357358
tick();
358359
if (modifyFs) modifyFs(fs);
359-
incrementalModifyFs(fs);
360+
editFs(fs);
360361
},
361362
disableUseFileVersionAsSignature: true,
362363
});
@@ -498,136 +499,45 @@ interface Symbol {
498499
CleanFilePresent,
499500
}
500501

501-
export interface TscIncremental {
502-
buildKind: BuildKind;
502+
export interface TestTscEdit {
503503
modifyFs: (fs: vfs.FileSystem) => void;
504-
subScenario?: string;
504+
subScenario: string;
505505
commandLineArgs?: readonly string[];
506506
cleanBuildDiscrepancies?: () => ESMap<string, CleanBuildDescrepancy>;
507507
}
508508

509-
export interface VerifyTsBuildInput extends VerifyTsBuildInputWorker {
509+
export interface VerifyTscWithEditsInput extends VerifyTscWithEditsWorkerInput {
510510
baselineIncremental?: boolean;
511511
}
512-
513-
export function verifyTscIncrementalEdits(input: VerifyTsBuildInput) {
514-
verifyTscIncrementalEditsWorker(input);
515-
if (input.baselineIncremental) {
516-
verifyTscIncrementalEditsWorker({
517-
...input,
518-
subScenario: `${input.subScenario} with incremental`,
519-
commandLineArgs: [...input.commandLineArgs, "--incremental"],
520-
});
521-
}
522-
}
523-
524-
export interface VerifyTsBuildInputWorker extends TestTscCompile {
525-
incrementalScenarios: TscIncremental[];
526-
}
527-
function verifyTscIncrementalEditsWorker({
528-
subScenario, fs, scenario, commandLineArgs,
529-
baselineSourceMap, modifyFs, baselineReadFileCalls, baselinePrograms,
530-
incrementalScenarios
531-
}: VerifyTsBuildInputWorker) {
532-
describe(`tsc ${commandLineArgs.join(" ")} ${scenario}:: ${subScenario}`, () => {
533-
let tick: () => void;
534-
let sys: TscCompileSystem;
535-
let baseFs: vfs.FileSystem;
536-
before(() => {
537-
({ fs: baseFs, tick } = getFsWithTime(fs()));
538-
sys = testTscCompile({
539-
scenario,
540-
subScenario,
541-
fs: () => baseFs.makeReadonly(),
542-
commandLineArgs,
543-
modifyFs: fs => {
544-
if (modifyFs) modifyFs(fs);
545-
tick();
546-
},
547-
baselineSourceMap,
548-
baselineReadFileCalls,
549-
baselinePrograms
550-
});
551-
Debug.assert(!!incrementalScenarios.length, `${scenario}/${subScenario}:: No incremental scenarios, you probably want to use verifyTsc instead.`);
552-
});
553-
after(() => {
554-
baseFs = undefined!;
555-
sys = undefined!;
556-
tick = undefined!;
557-
});
558-
describe("initialBuild", () => {
559-
verifyTscBaseline(() => sys);
560-
});
561-
562-
incrementalScenarios.forEach(({
563-
buildKind,
564-
modifyFs: incrementalModifyFs,
565-
subScenario: incrementalSubScenario,
566-
commandLineArgs: incrementalCommandLineArgs,
567-
cleanBuildDiscrepancies,
568-
}, index) => {
569-
describe(incrementalSubScenario || buildKind, () => {
570-
let newSys: TscCompileSystem;
571-
before(() => {
572-
Debug.assert(buildKind !== BuildKind.Initial, "Incremental edit cannot be initial compilation");
573-
tick();
574-
newSys = testTscCompile({
575-
scenario,
576-
subScenario: incrementalSubScenario || subScenario,
577-
buildKind,
578-
fs: () => sys.vfs,
579-
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
580-
modifyFs: fs => {
581-
tick();
582-
incrementalModifyFs(fs);
583-
tick();
584-
},
585-
baselineSourceMap,
586-
baselineReadFileCalls,
587-
baselinePrograms
588-
});
589-
});
590-
after(() => {
591-
newSys = undefined!;
592-
});
593-
verifyTscBaseline(() => newSys);
594-
verifyIncrementalCorrectness(() => ({
595-
scenario,
596-
baseFs,
597-
newSys,
598-
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
599-
cleanBuildDiscrepancies,
600-
incrementalModifyFs,
601-
modifyFs,
602-
tick
603-
}), index, incrementalSubScenario || subScenario);
604-
});
605-
});
606-
});
512+
export interface VerifyTscWithEditsWorkerInput extends TestTscCompile {
513+
edits: TestTscEdit[];
607514
}
608515

609-
export function verifyTscSerializedIncrementalEdits(input: VerifyTsBuildInput) {
610-
verifyTscSerializedIncrementalEditsWorker(input);
516+
/**
517+
* Verify non watch tsc invokcation after each edit
518+
*/
519+
export function verifyTscWithEdits(input: VerifyTscWithEditsInput) {
520+
verifyTscWithEditsWorker(input);
611521
if (input.baselineIncremental) {
612-
verifyTscSerializedIncrementalEditsWorker({
522+
verifyTscWithEditsWorker({
613523
...input,
614524
subScenario: `${input.subScenario} with incremental`,
615525
commandLineArgs: [...input.commandLineArgs, "--incremental"],
616526
});
617527
}
618528
}
619-
function verifyTscSerializedIncrementalEditsWorker({
529+
function verifyTscWithEditsWorker({
620530
subScenario, fs, scenario, commandLineArgs,
621531
baselineSourceMap, modifyFs, baselineReadFileCalls, baselinePrograms,
622-
incrementalScenarios
623-
}: VerifyTsBuildInputWorker) {
532+
edits
533+
}: VerifyTscWithEditsWorkerInput) {
624534
describe(`tsc ${commandLineArgs.join(" ")} ${scenario}:: ${subScenario} serializedEdits`, () => {
625-
Debug.assert(!!incrementalScenarios.length, `${scenario}/${subScenario}:: No incremental scenarios, you probably want to use verifyTsc instead.`);
626535
let tick: () => void;
627536
let sys: TscCompileSystem;
628537
let baseFs: vfs.FileSystem;
629-
let incrementalSys: TscCompileSystem[];
538+
let editsSys: TscCompileSystem[];
630539
before(() => {
540+
Debug.assert(!!edits.length, `${scenario}/${subScenario}:: No incremental scenarios, you probably want to use verifyTsc instead.`);
631541
({ fs: baseFs, tick } = getFsWithTime(fs()));
632542
sys = testTscCompile({
633543
scenario,
@@ -642,18 +552,17 @@ interface Symbol {
642552
baselineReadFileCalls,
643553
baselinePrograms
644554
});
645-
incrementalScenarios.forEach((
646-
{ buildKind, modifyFs, subScenario: incrementalSubScenario, commandLineArgs: incrementalCommandLineArgs },
555+
edits.forEach((
556+
{ modifyFs, subScenario: editScenario, commandLineArgs: editCommandLineArgs },
647557
index
648558
) => {
649-
Debug.assert(buildKind !== BuildKind.Initial, "Incremental edit cannot be initial compilation");
650559
tick();
651-
(incrementalSys || (incrementalSys = [])).push(testTscCompile({
560+
(editsSys || (editsSys = [])).push(testTscCompile({
652561
scenario,
653-
subScenario: incrementalSubScenario || subScenario,
654-
buildKind,
655-
fs: () => index === 0 ? sys.vfs : incrementalSys[index - 1].vfs,
656-
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
562+
subScenario: editScenario || subScenario,
563+
diffWithInitial: true,
564+
fs: () => index === 0 ? sys.vfs : editsSys[index - 1].vfs,
565+
commandLineArgs: editCommandLineArgs || commandLineArgs,
657566
modifyFs: fs => {
658567
tick();
659568
modifyFs(fs);
@@ -669,39 +578,38 @@ interface Symbol {
669578
baseFs = undefined!;
670579
sys = undefined!;
671580
tick = undefined!;
672-
incrementalSys = undefined!;
581+
editsSys = undefined!;
673582
});
674-
describe("serializedBuild", () => {
675-
583+
describe("tsc invocation after edit", () => {
676584
verifyTscBaseline(() => ({
677585
baseLine: () => {
678586
const { file, text } = sys.baseLine();
679587
const texts: string[] = [text];
680-
incrementalSys.forEach((sys, index) => {
681-
const incrementalScenario = incrementalScenarios[index];
588+
editsSys.forEach((sys, index) => {
589+
const incrementalScenario = edits[index];
682590
texts.push("");
683-
texts.push(`Change:: ${incrementalScenario.subScenario || incrementalScenario.buildKind}`);
591+
texts.push(`Change:: ${incrementalScenario.subScenario}`);
684592
texts.push(sys.baseLine().text);
685593
});
686594
return { file, text: texts.join("\r\n") };
687595
}
688596
}));
689597
});
690-
describe("incremental correctness", () => {
691-
incrementalScenarios.forEach(({ commandLineArgs: incrementalCommandLineArgs, subScenario, buildKind, cleanBuildDiscrepancies }, index) => verifyIncrementalCorrectness(() => ({
598+
describe("tsc invocation after edit and clean build correctness", () => {
599+
edits.forEach(({ commandLineArgs: editCommandLineArgs, subScenario, cleanBuildDiscrepancies }, index) => verifyTscEditCorrectness(() => ({
692600
scenario,
693601
baseFs,
694-
newSys: incrementalSys[index],
695-
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
602+
newSys: editsSys[index],
603+
commandLineArgs: editCommandLineArgs || commandLineArgs,
696604
cleanBuildDiscrepancies,
697-
incrementalModifyFs: fs => {
605+
editFs: fs => {
698606
for (let i = 0; i <= index; i++) {
699-
incrementalScenarios[i].modifyFs(fs);
607+
edits[i].modifyFs(fs);
700608
}
701609
},
702610
modifyFs,
703611
tick
704-
}), index, subScenario || buildKind));
612+
}), index, subScenario));
705613
});
706614
});
707615
}

0 commit comments

Comments
 (0)