From 9acff37947392bb3c3c53d16c9fb25039cbc0f4b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 11:45:22 -0800 Subject: [PATCH] Add test to test the readFile called on prepend input file for emitting and verifying emit --- src/testRunner/unittests/tsbuild.ts | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/testRunner/unittests/tsbuild.ts b/src/testRunner/unittests/tsbuild.ts index ba94072b230..b8a58eb1bc0 100644 --- a/src/testRunner/unittests/tsbuild.ts +++ b/src/testRunner/unittests/tsbuild.ts @@ -469,11 +469,20 @@ export const b = new A();`); describe("unittests:: tsbuild - baseline sectioned sourcemaps", () => { let fs: vfs.FileSystem | undefined; + const actualReadFileMap = createMap(); before(() => { fs = outFileFs.shadow(); const host = new fakes.SolutionBuilderHost(fs); const builder = createSolutionBuilder(host, ["/src/third"], { dry: false, force: false, verbose: false }); host.clearDiagnostics(); + const originalReadFile = host.readFile; + host.readFile = path => { + // Dont record libs + if (path.startsWith("/src/")) { + actualReadFileMap.set(path, (actualReadFileMap.get(path) || 0) + 1); + } + return originalReadFile.call(host, path); + }; builder.buildAllProjects(); host.assertDiagnosticMessages(/*none*/); }); @@ -485,6 +494,39 @@ export const b = new A();`); // tslint:disable-next-line:no-null-keyword Harness.Baseline.runBaseline("outfile-concat.js", patch ? vfs.formatPatch(patch) : null); }); + it("verify readFile calls", () => { + const expectedMap = createMap(); + // Configs + expectedMap.set("/src/third/tsconfig.json", 1); + expectedMap.set("/src/second/tsconfig.json", 1); + expectedMap.set("/src/first/tsconfig.json", 1); + + // Source files + expectedMap.set("/src/third/third_part1.ts", 1); + expectedMap.set("/src/second/second_part1.ts", 1); + expectedMap.set("/src/second/second_part2.ts", 1); + expectedMap.set("/src/first/first_PART1.ts", 1); + expectedMap.set("/src/first/first_part2.ts", 1); + expectedMap.set("/src/first/first_part3.ts", 1); + + // outputs + expectedMap.set("/src/first/bin/first-output.js", 2); + expectedMap.set("/src/first/bin/first-output.js.map", 2); + // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created + expectedMap.set("/src/first/bin/first-output.d.ts", 3); + expectedMap.set("/src/first/bin/first-output.d.ts.map", 2); + expectedMap.set("/src/2/second-output.js", 2); + expectedMap.set("/src/2/second-output.js.map", 2); + // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created + expectedMap.set("/src/2/second-output.d.ts", 3); + expectedMap.set("/src/2/second-output.d.ts.map", 2); + + assert.equal(actualReadFileMap.size, expectedMap.size, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + actualReadFileMap.forEach((value, key) => { + const expected = expectedMap.get(key); + assert.equal(value, expected, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + }); + }); }); describe("unittests:: tsbuild - downstream prepend projects always get rebuilt", () => {