In preparation for in-memory testing infrastructure, the existing Ivy language service tests are moved to a `legacy` directory. These existing tests rely on a single integration project in `test/project/app`, which presents a number of challenges: * adding extra fields/properties to the integration project for one test can cause others to fail/flake. * it's especially difficult to test any cases that require introducing intentional errors, as those tend to break other tests. * tests load files from disk, which is slower. * tests rely on the real built versions of @angular/core and @angular/common, which makes them both slow to build and require rebuilds on every compiler change. * tests share a single tsconfig.json, making it extremely difficult to test how the language service handles different configuration scenarios (e.g. different type-checking flags). PR Close #39594
28 lines
843 B
TypeScript
28 lines
843 B
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
|
|
*/
|
|
|
|
import {MockService} from './mock_host';
|
|
|
|
export interface HumanizedDefinitionInfo {
|
|
fileName: string;
|
|
textSpan: string;
|
|
contextSpan: string|undefined;
|
|
}
|
|
|
|
export function humanizeDefinitionInfo(
|
|
def: ts.DefinitionInfo, service: MockService): HumanizedDefinitionInfo {
|
|
const snapshot = service.getScriptInfo(def.fileName).getSnapshot();
|
|
return {
|
|
fileName: def.fileName,
|
|
textSpan: snapshot.getText(def.textSpan.start, def.textSpan.start + def.textSpan.length),
|
|
contextSpan: def.contextSpan ?
|
|
snapshot.getText(def.contextSpan.start, def.contextSpan.start + def.contextSpan.length) :
|
|
undefined,
|
|
};
|
|
}
|