Skip to content

Commit

Permalink
fix(language-service): Increase project/script version in MockHost.re…
Browse files Browse the repository at this point in the history
…set() (#33200)

PR Close #33200
  • Loading branch information
Keen Yee Liau authored and matsko committed Oct 16, 2019
1 parent becd62d commit 43241a5
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 17 deletions.
31 changes: 18 additions & 13 deletions packages/language-service/test/hover_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,22 @@ import {TypeScriptServiceHost} from '../src/typescript_host';

import {MockTypescriptHost} from './test_utils';

describe('hover', () => {
let mockHost: MockTypescriptHost;
let tsLS: ts.LanguageService;
let ngLSHost: TypeScriptServiceHost;
let ngLS: LanguageService;
fdescribe('hover', () => {
// const mockHost: MockTypescriptHost;
// const tsLS: ts.LanguageService;
// const ngLSHost: TypeScriptServiceHost;
// const ngLS: LanguageService;
const mockHost = new MockTypescriptHost(['/app/main.ts']);
const tsLS = ts.createLanguageService(mockHost);
const ngLSHost = new TypeScriptServiceHost(mockHost, tsLS);
const ngLS = createLanguageService(ngLSHost);

beforeEach(() => {
mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts']);
tsLS = ts.createLanguageService(mockHost);
ngLSHost = new TypeScriptServiceHost(mockHost, tsLS);
ngLS = createLanguageService(ngLSHost);
// mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts']);
// tsLS = ts.createLanguageService(mockHost);
// ngLSHost = new TypeScriptServiceHost(mockHost, tsLS);
// ngLS = createLanguageService(ngLSHost);
mockHost.reset();
});

it('should be able to find field in an interpolation', () => {
Expand Down Expand Up @@ -183,20 +188,20 @@ describe('hover', () => {
});

it('should be able to find the NgModule of a directive', () => {
const fileName = '/app/parsing-cases.ts';
const fileName = '/app/app.component.ts';
mockHost.override(fileName, `
import {Directive} from '@angular/core';
@Directive({
selector: '[string-model]',
})
export class «StringModel» {}`);
const marker = mockHost.getReferenceMarkerFor(fileName, 'StringModel');
export class «AppComponent» {}`);
const marker = mockHost.getReferenceMarkerFor(fileName, 'AppComponent');
const quickInfo = ngLS.getHoverAt(fileName, marker.start);
expect(quickInfo).toBeTruthy();
const {textSpan, displayParts} = quickInfo !;
expect(textSpan).toEqual(marker);
expect(toText(displayParts)).toBe('(directive) AppModule.StringModel: class');
expect(toText(displayParts)).toBe('(directive) AppModule.AppComponent: class');
});
});

Expand Down
20 changes: 16 additions & 4 deletions packages/language-service/test/test_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ const COMPILER_OPTIONS: Readonly<ts.CompilerOptions> = {
};

export class MockTypescriptHost implements ts.LanguageServiceHost {
private angularPath?: string;
private readonly angularPath: string;
private readonly nodeModulesPath: string;
private readonly scriptVersion = new Map<string, number>();
private readonly overrides = new Map<string, string>();
Expand Down Expand Up @@ -127,14 +127,16 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
}

addScript(fileName: string, content: string) {
if (this.scriptVersion.has(fileName)) {
throw new Error(`${fileName} is already in the root files.`);
}
this.scriptVersion.set(fileName, 0);
this.projectVersion++;
this.overrides.set(fileName, content);
this.overrideDirectory.add(path.dirname(fileName));
this.scriptNames.push(fileName);
}

forgetAngular() { this.angularPath = undefined; }

overrideOptions(options: Partial<ts.CompilerOptions>) {
this.options = {...this.options, ...options};
this.projectVersion++;
Expand Down Expand Up @@ -185,6 +187,16 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
* Reset the project to its original state, effectively removing all overrides.
*/
reset() {
// project version and script version must be monotonically increasing,
// they must not be reset to zero.
this.projectVersion++;
for (const fileName of this.overrides.keys()) {
const version = this.scriptVersion.get(fileName);
if (version === undefined) {
throw new Error(`No prior version found for ${fileName}`);
}
this.scriptVersion.set(fileName, version + 1);
}
// Remove overrides from scriptNames
let length = 0;
for (let i = 0; i < this.scriptNames.length; ++i) {
Expand Down Expand Up @@ -251,7 +263,7 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
return result;
}
}
if (this.angularPath && name.startsWith('/' + node_modules + at_angular)) {
if (name.startsWith('/' + node_modules + at_angular)) {
return this.myPath.posix.join(
this.angularPath, name.substr(node_modules.length + at_angular.length + 1));
}
Expand Down

0 comments on commit 43241a5

Please sign in to comment.