Skip to content

Commit 9a741bc

Browse files
committed
Some tests
1 parent 4105d32 commit 9a741bc

8 files changed

+4600
-3
lines changed

src/testRunner/unittests/tsbuild/helpers.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ interface Symbol {
423423
subScenario,
424424
baseFs,
425425
newSys,
426-
commandLineArgs,
426+
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
427427
incrementalModifyFs,
428428
modifyFs,
429429
tick
@@ -515,12 +515,12 @@ interface Symbol {
515515
}));
516516
});
517517
describe("incremental correctness", () => {
518-
incrementalScenarios.forEach((_, index) => verifyIncrementalCorrectness(() => ({
518+
incrementalScenarios.forEach(({ commandLineArgs: incrementalCommandLineArgs }, index) => verifyIncrementalCorrectness(() => ({
519519
scenario,
520520
subScenario,
521521
baseFs,
522522
newSys: incrementalSys[index],
523-
commandLineArgs,
523+
commandLineArgs: incrementalCommandLineArgs || commandLineArgs,
524524
incrementalModifyFs: fs => {
525525
for (let i = 0; i <= index; i++) {
526526
incrementalScenarios[i].modifyFs(fs);

src/testRunner/unittests/tsc/incremental.ts

+119
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,124 @@ const a: string = "hello";`, "utf-8"),
116116
const a: string = 10;`, "utf-8"),
117117
);
118118
});
119+
120+
describe("when noEmit changes between compilation", () => {
121+
verifyNoEmitChanges({ incremental: true });
122+
verifyNoEmitChanges({ incremental: true, declaration: true });
123+
verifyNoEmitChanges({ composite: true });
124+
125+
function verifyNoEmitChanges(compilerOptions: CompilerOptions) {
126+
const noChangeRunWithNoEmit: TscIncremental = {
127+
subScenario: "No Change run with noEmit",
128+
commandLineArgs: ["--p", "src/project", "--noEmit"],
129+
...noChangeRun,
130+
};
131+
const noChangeRunWithEmit: TscIncremental = {
132+
subScenario: "No Change run with emit",
133+
commandLineArgs: ["--p", "src/project"],
134+
...noChangeRun,
135+
};
136+
let optionsString = "";
137+
for (const key in compilerOptions) {
138+
if (hasProperty(compilerOptions, key)) {
139+
optionsString += ` ${key}`;
140+
}
141+
}
142+
143+
verifyTscSerializedIncrementalEdits({
144+
scenario: "incremental",
145+
subScenario: `noEmit changes${optionsString}`,
146+
commandLineArgs: ["--p", "src/project"],
147+
fs,
148+
incrementalScenarios: [
149+
noChangeRunWithNoEmit,
150+
noChangeRunWithNoEmit,
151+
{
152+
subScenario: "Introduce error but still noEmit",
153+
commandLineArgs: ["--p", "src/project", "--noEmit"],
154+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop", "prop1"),
155+
buildKind: BuildKind.IncrementalDtsChange
156+
},
157+
{
158+
subScenario: "Fix error and emit",
159+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop1", "prop"),
160+
buildKind: BuildKind.IncrementalDtsChange
161+
},
162+
noChangeRunWithEmit,
163+
noChangeRunWithNoEmit,
164+
noChangeRunWithNoEmit,
165+
noChangeRunWithEmit,
166+
{
167+
subScenario: "Introduce error and emit",
168+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop", "prop1"),
169+
buildKind: BuildKind.IncrementalDtsChange
170+
},
171+
noChangeRunWithEmit,
172+
noChangeRunWithNoEmit,
173+
noChangeRunWithNoEmit,
174+
noChangeRunWithEmit,
175+
{
176+
subScenario: "Fix error and no emit",
177+
commandLineArgs: ["--p", "src/project", "--noEmit"],
178+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop1", "prop"),
179+
buildKind: BuildKind.IncrementalDtsChange
180+
},
181+
noChangeRunWithEmit,
182+
noChangeRunWithNoEmit,
183+
noChangeRunWithNoEmit,
184+
noChangeRunWithEmit,
185+
],
186+
});
187+
188+
verifyTscSerializedIncrementalEdits({
189+
scenario: "incremental",
190+
subScenario: `noEmit changes with initial noEmit${optionsString}`,
191+
commandLineArgs: ["--p", "src/project", "--noEmit"],
192+
fs,
193+
incrementalScenarios: [
194+
noChangeRunWithEmit,
195+
{
196+
subScenario: "Introduce error with emit",
197+
commandLineArgs: ["--p", "src/project"],
198+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop", "prop1"),
199+
buildKind: BuildKind.IncrementalDtsChange
200+
},
201+
{
202+
subScenario: "Fix error and no emit",
203+
modifyFs: fs => replaceText(fs, "/src/project/src/class.ts", "prop1", "prop"),
204+
buildKind: BuildKind.IncrementalDtsChange
205+
},
206+
noChangeRunWithEmit,
207+
],
208+
});
209+
210+
function fs() {
211+
return loadProjectFromFiles({
212+
"/src/project/src/class.ts": Utils.dedent`
213+
export class classC {
214+
prop = 1;
215+
}`,
216+
"/src/project/src/indirectClass.ts": Utils.dedent`
217+
import { classC } from './class';
218+
export class indirectClass {
219+
classC = new classC();
220+
}`,
221+
"/src/project/src/directUse.ts": Utils.dedent`
222+
import { indirectClass } from './indirectClass';
223+
new indirectClass().classC.prop;`,
224+
"/src/project/src/indirectUse.ts": Utils.dedent`
225+
import { indirectClass } from './indirectClass';
226+
new indirectClass().classC.prop;`,
227+
"/src/project/src/noChangeFile.ts": Utils.dedent`
228+
export function writeLog(s: string) {
229+
}`,
230+
"/src/project/src/noChangeFileWithEmitSpecificError.ts": Utils.dedent`
231+
function someFunc(arguments: boolean, ...rest: any[]) {
232+
}`,
233+
"/src/project/tsconfig.json": JSON.stringify({ compilerOptions }),
234+
});
235+
}
236+
}
237+
});
119238
});
120239
}

0 commit comments

Comments
 (0)