30 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @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
 | ||
|  |  */ | ||
|  | 
 | ||
|  | /** | ||
|  |  * Verify that all functions in the output have a unique name. | ||
|  |  * @param output Compiler output. | ||
|  |  * @param functionNamePattern Only match function whose names match this pattern. | ||
|  |  *    Will be converted into a regular expression. | ||
|  |  * @param expectedCount Expected number of functions. | ||
|  |  */ | ||
|  | export function verifyUniqueFunctions( | ||
|  |     output: string, functionNamePattern?: string, expectedCount?: number): boolean { | ||
|  |   const pattern = functionNamePattern ? new RegExp(functionNamePattern) : null; | ||
|  |   const allTemplateFunctionsNames = (output.match(/function ([^\s(]+)/g) || []) | ||
|  |                                         .map(match => match.slice(9)) | ||
|  |                                         .filter(name => !pattern || pattern.test(name)); | ||
|  |   const uniqueTemplateFunctionNames = new Set(allTemplateFunctionsNames); | ||
|  |   const lengthMatches = allTemplateFunctionsNames.length === uniqueTemplateFunctionNames.size; | ||
|  |   const expectedCountMatches = | ||
|  |       (expectedCount == null ? allTemplateFunctionsNames.length > 0 : | ||
|  |                                allTemplateFunctionsNames.length === expectedCount); | ||
|  |   return lengthMatches && expectedCountMatches && | ||
|  |       allTemplateFunctionsNames.every(name => uniqueTemplateFunctionNames.has(name)); | ||
|  | } |