| 
									
										
										
										
											2020-09-11 14:54:53 -07: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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TODO(josephperrott): migrate golden testing to ng-dev toolset
 | 
					
						
							|  |  |  | const {spawnSync} = require('child_process'); | 
					
						
							|  |  |  | const minimist = require('minimist'); | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Remove all command line flags from the arguments.
 | 
					
						
							|  |  |  | const argv = minimist(process.argv.slice(2)); | 
					
						
							|  |  |  | // The command the user would like to run, either 'accept' or 'test'
 | 
					
						
							|  |  |  | const USER_COMMAND = argv._[0]; | 
					
						
							|  |  |  | // The shell command to query for all tests.
 | 
					
						
							|  |  |  | // Bazel targets for testing goldens
 | 
					
						
							|  |  |  | process.stdout.write('Gathering all symbol extractor targets'); | 
					
						
							|  |  |  | const ALL_TEST_TARGETS = | 
					
						
							|  |  |  |     spawnSync( | 
					
						
							|  |  |  |         'yarn', | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |           '-s', 'bazel', 'query', '--output', 'label', | 
					
						
							| 
									
										
										
										
											2020-12-16 14:51:10 -08:00
										 |  |  |           `'kind(nodejs_test, ...) intersect attr("tags", "symbol_extractor", ...)'` | 
					
						
							| 
									
										
										
										
											2020-09-11 14:54:53 -07:00
										 |  |  |         ], | 
					
						
							|  |  |  |         {encoding: 'utf8', shell: true, cwd: path.resolve(__dirname, '../..')}) | 
					
						
							|  |  |  |         .stdout.trim() | 
					
						
							|  |  |  |         .split('\n') | 
					
						
							|  |  |  |         .map(line => line.trim()); | 
					
						
							|  |  |  | process.stdout.clearLine(); | 
					
						
							|  |  |  | process.stdout.cursorTo(0); | 
					
						
							|  |  |  | // Bazel targets for generating goldens
 | 
					
						
							|  |  |  | const ALL_ACCEPT_TARGETS = ALL_TEST_TARGETS.map(test => `${test}.accept`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Run the provided bazel commands on each provided target individually. */ | 
					
						
							|  |  |  | function runBazelCommandOnTargets(command, targets, present) { | 
					
						
							|  |  |  |   for (const target of targets) { | 
					
						
							|  |  |  |     process.stdout.write(`${present}: ${target}`); | 
					
						
							|  |  |  |     const commandResult = | 
					
						
							|  |  |  |         spawnSync('yarn', ['-s', 'bazel', command, '--config=ivy', target], {encoding: 'utf8'}); | 
					
						
							|  |  |  |     process.stdout.clearLine(); | 
					
						
							|  |  |  |     process.stdout.cursorTo(0); | 
					
						
							|  |  |  |     if (commandResult.status) { | 
					
						
							|  |  |  |       console.error(`Failed ${command}: ${target}`); | 
					
						
							|  |  |  |       console.group(); | 
					
						
							|  |  |  |       console.error(commandResult.stdout || commandResult.stderr); | 
					
						
							|  |  |  |       console.groupEnd(); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       console.info(`Successful ${command}: ${target}`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | switch (USER_COMMAND) { | 
					
						
							|  |  |  |   case 'accept': | 
					
						
							|  |  |  |     runBazelCommandOnTargets('run', ALL_ACCEPT_TARGETS, 'Running'); | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  |   case 'test': | 
					
						
							|  |  |  |     runBazelCommandOnTargets('test', ALL_TEST_TARGETS, 'Testing'); | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  |   default: | 
					
						
							|  |  |  |     console.warn('Invalid command provided.'); | 
					
						
							|  |  |  |     console.warn(); | 
					
						
							|  |  |  |     console.warn(`Run this script with either "accept" and "test"`); | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  | } |