test(compiler-cli): improve compliance test performance (#39956)

The newly built compliance test runner was not using the shared source
file cache that was added in b627f7f02e,
which offers a significant performance boost to the compliance test
targets.

PR Close #39956
This commit is contained in:
JoostK 2020-12-03 20:43:53 +01:00 committed by Misko Hevery
parent de8f0fe5ee
commit a7e4db3344
4 changed files with 31 additions and 15 deletions

View File

@ -7,5 +7,6 @@
*/ */
export * from './src/utils'; export * from './src/utils';
export * from './src/cached_source_files'; export * from './src/cached_source_files';
export * from './src/compiler_host';
export * from './src/mock_file_loading'; export * from './src/mock_file_loading';
export * from './src/runfile_helpers'; export * from './src/runfile_helpers';

View File

@ -0,0 +1,25 @@
/**
* @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 * as ts from 'typescript';
import {NgtscCompilerHost} from '../../file_system';
import {getCachedSourceFile} from './cached_source_files';
/**
* A compiler host intended to improve test performance by caching default library source files for
* reuse across tests.
*/
export class NgtscTestCompilerHost extends NgtscCompilerHost {
getSourceFile(fileName: string, languageVersion: ts.ScriptTarget): ts.SourceFile|undefined {
const cachedSf = getCachedSourceFile(fileName, () => this.readFile(fileName));
if (cachedSf !== null) {
return cachedSf;
}
return super.getSourceFile(fileName, languageVersion);
}
}

View File

@ -7,9 +7,9 @@
*/ */
import * as ts from 'typescript'; import * as ts from 'typescript';
import {AbsoluteFsPath, FileSystem, NgtscCompilerHost} from '../../../src/ngtsc/file_system'; import {AbsoluteFsPath, FileSystem} from '../../../src/ngtsc/file_system';
import {initMockFileSystem} from '../../../src/ngtsc/file_system/testing'; import {initMockFileSystem} from '../../../src/ngtsc/file_system/testing';
import {loadStandardTestFiles, loadTestDirectory} from '../../../src/ngtsc/testing'; import {loadStandardTestFiles, loadTestDirectory, NgtscTestCompilerHost} from '../../../src/ngtsc/testing';
import {Diagnostics, performCompilation} from '../../../src/perform_compile'; import {Diagnostics, performCompilation} from '../../../src/perform_compile';
import {CompilerOptions} from '../../../src/transformers/api'; import {CompilerOptions} from '../../../src/transformers/api';
@ -52,7 +52,7 @@ export function compileTest(
const outDir = getBuildOutputDirectory(fs); const outDir = getBuildOutputDirectory(fs);
const options = getOptions(rootDir, outDir, compilerOptions, angularCompilerOptions); const options = getOptions(rootDir, outDir, compilerOptions, angularCompilerOptions);
const rootNames = files.map(f => fs.resolve(f)); const rootNames = files.map(f => fs.resolve(f));
const host = new NgtscCompilerHost(fs, options); const host = new NgtscTestCompilerHost(fs, options);
const {diagnostics, emitResult} = performCompilation({rootNames, host, options}); const {diagnostics, emitResult} = performCompilation({rootNames, host, options});
const emittedFiles = emitResult ? emitResult.emittedFiles!.map(p => fs.resolve(rootDir, p)) : []; const emittedFiles = emitResult ? emitResult.emittedFiles!.map(p => fs.resolve(rootDir, p)) : [];
const errors = parseDiagnostics(diagnostics); const errors = parseDiagnostics(diagnostics);

View File

@ -12,13 +12,13 @@ import * as ts from 'typescript';
import {createCompilerHost, createProgram} from '../../index'; import {createCompilerHost, createProgram} from '../../index';
import {main, mainDiagnosticsForTest, readNgcCommandLineAndConfiguration} from '../../src/main'; import {main, mainDiagnosticsForTest, readNgcCommandLineAndConfiguration} from '../../src/main';
import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, NgtscCompilerHost, relativeFrom} from '../../src/ngtsc/file_system'; import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, relativeFrom} from '../../src/ngtsc/file_system';
import {Folder, MockFileSystem} from '../../src/ngtsc/file_system/testing'; import {Folder, MockFileSystem} from '../../src/ngtsc/file_system/testing';
import {IndexedComponent} from '../../src/ngtsc/indexer'; import {IndexedComponent} from '../../src/ngtsc/indexer';
import {NgtscProgram} from '../../src/ngtsc/program'; import {NgtscProgram} from '../../src/ngtsc/program';
import {DeclarationNode} from '../../src/ngtsc/reflection'; import {DeclarationNode} from '../../src/ngtsc/reflection';
import {LazyRoute} from '../../src/ngtsc/routing'; import {LazyRoute} from '../../src/ngtsc/routing';
import {getCachedSourceFile} from '../../src/ngtsc/testing'; import {NgtscTestCompilerHost} from '../../src/ngtsc/testing';
import {setWrapHostForTest} from '../../src/transformers/compiler_host'; import {setWrapHostForTest} from '../../src/transformers/compiler_host';
@ -268,16 +268,6 @@ export class NgtscTestEnvironment {
} }
} }
class NgtscTestCompilerHost extends NgtscCompilerHost {
getSourceFile(fileName: string, languageVersion: ts.ScriptTarget): ts.SourceFile|undefined {
const cachedSf = getCachedSourceFile(fileName, () => this.readFile(fileName));
if (cachedSf !== null) {
return cachedSf;
}
return super.getSourceFile(fileName, languageVersion);
}
}
class AugmentedCompilerHost extends NgtscTestCompilerHost { class AugmentedCompilerHost extends NgtscTestCompilerHost {
delegate!: ts.CompilerHost; delegate!: ts.CompilerHost;
} }