/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {FileSystem} from '../../../src/ngtsc/file_system'; import {compileTest, getBuildOutputDirectory, initMockTestFileSystem} from '../test_helpers/compile_test'; import {ComplianceTest, getComplianceTests} from '../test_helpers/get_compliance_tests'; import {PartiallyCompiledFile, renderGoldenPartial} from '../test_helpers/golden_partials'; /** * Generate the golden partial output for the tests described in the `testConfigPath` config file. * * @param testConfigPath Path (relative to the `test_cases` directory) of the `TEST_CASES.json` file * that describes the tests. */ export function generateGoldenPartial(testConfigPath: string): void { const files: PartiallyCompiledFile[] = []; const tests = getComplianceTests(testConfigPath); for (const test of tests) { const fs = initMockTestFileSystem(test.realTestPath); for (const file of compilePartials(fs, test)) { files.push(file); } } writeGoldenPartial(files); } /** * Partially compile the source files specified by the given `test`. * * @param fs The mock file-system to use when compiling partials. * @param test The information about the test being compiled. */ function* compilePartials(fs: FileSystem, test: ComplianceTest): Generator { const builtDirectory = getBuildOutputDirectory(fs); for (const generatedPath of compileTest(fs, test.inputFiles, test.compilerOptions, { compilationMode: 'partial', ...test.angularCompilerOptions }).emittedFiles) { yield { path: fs.relative(builtDirectory, generatedPath), content: fs.readFile(generatedPath), }; } } /** * Write the partially compiled files to the appropriate output destination. * * For now just push the concatenated partial files to standard out. * * @param files The partially compiled files. */ function writeGoldenPartial(files: PartiallyCompiledFile[]): void { // tslint:disable-next-line: no-console console.log(renderGoldenPartial(files)); }