| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. 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 * as fs from 'fs'; | 
					
						
							|  |  |  | import * as path from 'path'; | 
					
						
							|  |  |  | import {SymbolExtractor} from './symbol_extractor'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (require.main === module) { | 
					
						
							|  |  |  |   const args = process.argv.slice(2) as[string, string]; | 
					
						
							| 
									
										
										
										
											2018-03-21 10:55:14 -07:00
										 |  |  |   process.exitCode = main(args) ? 0 : 1; | 
					
						
							| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * CLI main method. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  *   cli javascriptFilePath.js goldenFilePath.json | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-03-21 10:55:14 -07:00
										 |  |  | function main(argv: [string, string, string] | [string, string]): boolean { | 
					
						
							| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  |   const javascriptFilePath = require.resolve(argv[0]); | 
					
						
							|  |  |  |   const goldenFilePath = require.resolve(argv[1]); | 
					
						
							| 
									
										
										
										
											2018-03-21 10:55:14 -07:00
										 |  |  |   const doUpdate = argv[2] == '--accept'; | 
					
						
							| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const javascriptContent = fs.readFileSync(javascriptFilePath).toString(); | 
					
						
							|  |  |  |   const goldenContent = fs.readFileSync(goldenFilePath).toString(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const symbolExtractor = new SymbolExtractor(javascriptFilePath, javascriptContent); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let passed: boolean = false; | 
					
						
							|  |  |  |   if (doUpdate) { | 
					
						
							|  |  |  |     fs.writeFileSync(goldenFilePath, JSON.stringify(symbolExtractor.actual, undefined, 2)); | 
					
						
							|  |  |  |     console.error('Updated gold file:', goldenFilePath); | 
					
						
							|  |  |  |     passed = true; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     passed = symbolExtractor.compareAndPrintError(goldenFilePath, goldenContent); | 
					
						
							|  |  |  |     if (!passed) { | 
					
						
							| 
									
										
										
										
											2018-06-20 16:00:18 -07:00
										 |  |  |       const compile = process.env['compile']; | 
					
						
							|  |  |  |       const defineFlag = (compile !== 'legacy') ? `--define=compile=${compile} ` : ''; | 
					
						
							| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  |       console.error(`TEST FAILED!`); | 
					
						
							|  |  |  |       console.error(`  To update the golden file run: `); | 
					
						
							| 
									
										
										
										
											2018-06-20 16:00:18 -07:00
										 |  |  |       console.error(`    bazel run ${defineFlag}${process.env['BAZEL_TARGET']}.accept`); | 
					
						
							| 
									
										
										
										
											2018-02-02 15:08:25 -08:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return passed; | 
					
						
							|  |  |  | } |