78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
/**
|
|
* @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 {join} from 'path';
|
|
import * as ts from 'typescript/lib/tsserverlibrary';
|
|
|
|
const logger: ts.server.Logger = {
|
|
close(): void{},
|
|
hasLevel(level: ts.server.LogLevel): boolean {
|
|
return false;
|
|
},
|
|
loggingEnabled(): boolean {
|
|
return false;
|
|
},
|
|
perftrc(s: string): void{},
|
|
info(s: string): void{},
|
|
startGroup(): void{},
|
|
endGroup(): void{},
|
|
msg(s: string, type?: ts.server.Msg): void{},
|
|
getLogFileName(): string |
|
|
undefined {
|
|
return;
|
|
},
|
|
};
|
|
|
|
export const TEST_SRCDIR = process.env.TEST_SRCDIR!;
|
|
export const PROJECT_DIR =
|
|
join(TEST_SRCDIR, 'angular', 'packages', 'language-service', 'test', 'project');
|
|
export const TSCONFIG = join(PROJECT_DIR, 'tsconfig.json');
|
|
export const APP_COMPONENT = join(PROJECT_DIR, 'app', 'app.component.ts');
|
|
export const APP_MAIN = join(PROJECT_DIR, 'app', 'main.ts');
|
|
export const PARSING_CASES = join(PROJECT_DIR, 'app', 'parsing-cases.ts');
|
|
|
|
export const host: ts.server.ServerHost = {
|
|
...ts.sys,
|
|
readFile(absPath: string, encoding?: string): string |
|
|
undefined {
|
|
// TODO: Need to remove all annotations in templates like we do in
|
|
// MockTypescriptHost
|
|
return ts.sys.readFile(absPath, encoding);
|
|
},
|
|
// TODO: Need to cast as never because this is not a proper ServerHost interface.
|
|
// ts.sys lacks methods like watchFile() and watchDirectory(), but these are not
|
|
// needed for now.
|
|
} as never;
|
|
|
|
/**
|
|
* Create a ConfiguredProject and an actual program for the test project located
|
|
* in packages/language-service/test/project. Project creation exercises the
|
|
* actual code path, but a mock host is used for the filesystem to intercept
|
|
* and modify test files.
|
|
*/
|
|
export function setup() {
|
|
const projectService = new ts.server.ProjectService({
|
|
host,
|
|
logger,
|
|
cancellationToken: ts.server.nullCancellationToken,
|
|
useSingleInferredProject: true,
|
|
useInferredProjectPerProjectRoot: true,
|
|
typingsInstaller: ts.server.nullTypingsInstaller,
|
|
});
|
|
// Opening APP_COMPONENT forces a new ConfiguredProject to be created based
|
|
// on the tsconfig.json in the test project.
|
|
projectService.openClientFile(APP_COMPONENT);
|
|
const project = projectService.findProject(TSCONFIG);
|
|
if (!project) {
|
|
throw new Error(`Failed to create project for ${TSCONFIG}`);
|
|
}
|
|
// The following operation forces a ts.Program to be created.
|
|
const tsLS = project.getLanguageService();
|
|
return {projectService, project, tsLS};
|
|
}
|