/
githubmirror
/
angular
Обзор
Документация
Войти
/
githubmirror
/
angular
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/language-service/testing/src/env.ts
126 строк
3 KB
Andrew Scott
test(language-service): optimize language service test environment and flatten test setup
16 мар 2026, 23:49
16 мар 2026, 23:49
470cf43
Код
Авторство
О чём код?
/** * @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.dev/license */ import {absoluteFrom, getFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system'; import { MockFileSystem, initMockFileSystem, lockMockFileSystem, } from '@angular/compiler-cli/src/ngtsc/file_system/testing'; import {loadStandardTestFiles} from '@angular/compiler-cli/src/ngtsc/testing'; import ts from 'typescript'; import {MockServerHost} from './host'; import {Project, ProjectFiles, TestableOptions} from './project'; /** * Testing environment for the Angular Language Service, which creates an in-memory tsserver * instance that backs a Language Service to emulate an IDE that uses the LS. */ export class LanguageServiceTestEnv { private static fsInitialized = false; static setup(): LanguageServiceTestEnv { let fs = getFileSystem(); if (!(fs instanceof MockFileSystem)) { initMockFileSystem('Native'); fs = getFileSystem(); } if (!LanguageServiceTestEnv.fsInitialized) { (fs as MockFileSystem).init( loadStandardTestFiles({ fakeCommon: true, rxjs: true, }), ); lockMockFileSystem(); LanguageServiceTestEnv.fsInitialized = true; } const host = new MockServerHost(); const projectService = new ts.server.ProjectService({ logger, cancellationToken: ts.server.nullCancellationToken, host, documentRegistry: ts.createDocumentRegistry( host.useCaseSensitiveFileNames, host.getCurrentDirectory(), ), typingsInstaller: ts.server.nullTypingsInstaller, session: undefined, useInferredProjectPerProjectRoot: true, useSingleInferredProject: true, } as unknown as ts.server.ProjectServiceOptions); return new LanguageServiceTestEnv(host, projectService); } private projects = new Map<string, Project>(); private projectFiles = new Map<string, Set<string>>(); constructor( private host: MockServerHost, private projectService: ts.server.ProjectService, ) {} addProject( name: string, files: ProjectFiles, angularCompilerOptions: TestableOptions = {}, tsCompilerOptions = {}, ): Project { const project = Project.initialize( name, this.projectService, files, angularCompilerOptions, tsCompilerOptions, ); this.projects.set(name, project); return project; } getProject(name: string): Project | undefined { return this.projects.get(name); } getTextFromTsSpan(fileName: string, span: ts.TextSpan): string | null { const scriptInfo = this.projectService.getScriptInfo(fileName); if (scriptInfo === undefined) { return null; } return scriptInfo.getSnapshot().getText(span.start, span.start + span.length); } expectNoSourceDiagnostics(): void { for (const project of this.projects.values()) { project.expectNoSourceDiagnostics(); } } } 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; }, };