| 
									
										
										
										
											2020-11-11 15:29:43 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @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<PartiallyCompiledFile> { | 
					
						
							|  |  |  |   const builtDirectory = getBuildOutputDirectory(fs); | 
					
						
							| 
									
										
										
										
											2020-11-12 19:43:35 +00:00
										 |  |  |   for (const generatedPath of compileTest(fs, test.inputFiles, test.compilerOptions, { | 
					
						
							|  |  |  |          compilationMode: 'partial', | 
					
						
							|  |  |  |          ...test.angularCompilerOptions | 
					
						
							|  |  |  |        }).emittedFiles) { | 
					
						
							| 
									
										
										
										
											2020-11-11 15:29:43 +00:00
										 |  |  |     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)); | 
					
						
							|  |  |  | } |