Skip to content

Commit 827427f

Browse files
committed
Add test for --tsbuildinfo not as absolute or relative path
1 parent b7c85c7 commit 827427f

File tree

7 files changed

+87
-3
lines changed

7 files changed

+87
-3
lines changed

src/harness/fakes.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ ${indentText}${text}`;
524524

525525
export const version = "FakeTSVersion";
526526

527-
export function patchSolutionBuilderHost(host: ts.SolutionBuilderHost<ts.BuilderProgram>, sys: System) {
527+
export function patchHostForBuildInfoReadWrite(host: ts.CompilerHost | ts.SolutionBuilderHost<ts.BuilderProgram>) {
528528
const originalReadFile = host.readFile;
529529
host.readFile = (path, encoding) => {
530530
const value = originalReadFile.call(host, path, encoding);
@@ -537,14 +537,18 @@ ${indentText}${text}`;
537537

538538
if (host.writeFile) {
539539
const originalWriteFile = host.writeFile;
540-
host.writeFile = (fileName, content, writeByteOrderMark) => {
540+
host.writeFile = (fileName: string, content: string, writeByteOrderMark: boolean) => {
541541
if (!ts.isBuildInfoFile(fileName)) return originalWriteFile.call(host, fileName, content, writeByteOrderMark);
542542
const buildInfo = ts.getBuildInfo(content);
543543
sanitizeBuildInfoProgram(buildInfo);
544544
buildInfo.version = version;
545545
originalWriteFile.call(host, fileName, ts.getBuildInfoText(buildInfo), writeByteOrderMark);
546546
};
547547
}
548+
}
549+
550+
export function patchSolutionBuilderHost(host: ts.SolutionBuilderHost<ts.BuilderProgram>, sys: System) {
551+
patchHostForBuildInfoReadWrite(host);
548552

549553
ts.Debug.assert(host.now === undefined);
550554
host.now = () => new Date(sys.vfs.time());

src/testRunner/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
"unittests/tsbuild/watchEnvironment.ts",
114114
"unittests/tsbuild/watchMode.ts",
115115
"unittests/tsc/declarationEmit.ts",
116+
"unittests/tsc/incremental.ts",
116117
"unittests/tscWatch/consoleClearing.ts",
117118
"unittests/tscWatch/emit.ts",
118119
"unittests/tscWatch/emitAndErrorUpdates.ts",

src/testRunner/unittests/tsbuild/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ interface Symbol {
290290
baselineSourceMap, modifyFs, baselineReadFileCalls,
291291
incrementalScenarios
292292
}: VerifyTsBuildInput) {
293-
describe(`tsc --b ${scenario}:: ${subScenario}`, () => {
293+
describe(`tsc ${commandLineArgs.join(" ")} ${scenario}:: ${subScenario}`, () => {
294294
let tick: () => void;
295295
let sys: TscCompileSystem;
296296
before(() => {

src/testRunner/unittests/tsc/helpers.ts

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace ts {
7979
const { fileNames, options, projectReferences } = config;
8080
const reportDiagnostic = createDiagnosticReporter(sys, options.pretty);
8181
const host = createCompilerHostWorker(options, /*setParentPos*/ undefined, sys);
82+
fakes.patchHostForBuildInfoReadWrite(host);
8283
const currentDirectory = host.getCurrentDirectory();
8384
const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames());
8485
changeCompilerHostLikeToUseCache(host, fileName => toPath(fileName, currentDirectory, getCanonicalFileName));
@@ -102,7 +103,10 @@ namespace ts {
102103
function performIncrementalCompilation(sys: TscCompileSystem, config: ParsedCommandLine) {
103104
const reportDiagnostic = createDiagnosticReporter(sys, config.options.pretty);
104105
const { options, fileNames, projectReferences } = config;
106+
const host = createIncrementalCompilerHost(options, sys);
107+
fakes.patchHostForBuildInfoReadWrite(host);
105108
const exitCode = ts.performIncrementalCompilation({
109+
host,
106110
system: sys,
107111
rootNames: fileNames,
108112
options,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
namespace ts {
2+
describe("unittests:: tsc:: incremental::", () => {
3+
verifyTscIncrementalEdits({
4+
scenario: "incremental",
5+
subScenario: "when passing passing filename for buildinfo on commandline",
6+
fs: () => loadProjectFromFiles({
7+
"/src/project/src/main.ts": "export const x = 10;",
8+
"/src/project/tsconfig.json": utils.dedent`
9+
{
10+
"compilerOptions": {
11+
"target": "es5",
12+
"module": "commonjs",
13+
},
14+
"include": [
15+
"src/**/*.ts"
16+
]
17+
}`,
18+
}),
19+
commandLineArgs: ["--incremental", "--p", "src/project", "--tsBuildInfoFile", "src/project/.tsbuildinfo"],
20+
incrementalScenarios: [{
21+
buildKind: BuildKind.IncrementalDtsUnchanged,
22+
modifyFs: noop,
23+
}]
24+
});
25+
});
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//// [/lib/incremental-declaration-doesnt-changeOutput.txt]
2+
/lib/tsc --incremental --p src/project --tsBuildInfoFile src/project/.tsbuildinfo
3+
exitCode:: 0
4+
5+
6+
//// [/src/project/.tsbuildinfo] file written with same contents
7+
//// [/src/project/src/main.js] file written with same contents
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//// [/lib/initial-buildOutput.txt]
2+
/lib/tsc --incremental --p src/project --tsBuildInfoFile src/project/.tsbuildinfo
3+
exitCode:: 0
4+
5+
6+
//// [/src/project/.tsbuildinfo]
7+
{
8+
"program": {
9+
"fileInfos": {
10+
"../../lib/lib.d.ts": {
11+
"version": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };",
12+
"signature": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };"
13+
},
14+
"./src/main.ts": {
15+
"version": "-10726455937-export const x = 10;",
16+
"signature": "-6057683066-export declare const x = 10;\r\n"
17+
}
18+
},
19+
"options": {
20+
"target": 1,
21+
"module": 1,
22+
"incremental": true,
23+
"project": "./",
24+
"tsBuildInfoFile": "./.tsbuildinfo",
25+
"configFilePath": "./tsconfig.json"
26+
},
27+
"referencedMap": {},
28+
"exportedModulesMap": {},
29+
"semanticDiagnosticsPerFile": [
30+
"../../lib/lib.d.ts",
31+
"./src/main.ts"
32+
]
33+
},
34+
"version": "FakeTSVersion"
35+
}
36+
37+
//// [/src/project/src/main.js]
38+
"use strict";
39+
Object.defineProperty(exports, "__esModule", { value: true });
40+
exports.x = 10;
41+
42+

0 commit comments

Comments
 (0)