angular-cn/packages/language-service/ivy/test/signature_help_spec.ts

143 lines
4.1 KiB
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 {initMockFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system/testing';
import {getText} from '@angular/language-service/ivy/testing/src/util';
import {LanguageServiceTestEnv, OpenBuffer} from '../testing';
describe('signature help', () => {
beforeEach(() => {
initMockFileSystem('Native');
});
it('should handle an empty argument list', () => {
const main = setup(`
import {Component} from '@angular/core';
@Component({
template: '{{ foo() }}',
})
export class MainCmp {
foo(alpha: string, beta: number): string {
return 'blah';
}
}
`);
main.moveCursorToText('foo(¦)');
const items = main.getSignatureHelpItems()!;
expect(items).toBeDefined();
expect(items.applicableSpan.start).toEqual(main.cursor);
expect(items.applicableSpan.length).toEqual(0);
expect(items.argumentCount).toEqual(0);
expect(items.argumentIndex).toEqual(0);
expect(items.items.length).toEqual(1);
});
it('should handle a single argument', () => {
const main = setup(`
import {Component} from '@angular/core';
@Component({
template: '{{ foo("test") }}',
})
export class MainCmp {
foo(alpha: string, beta: number): string {
return 'blah';
}
}
`);
main.moveCursorToText('foo("test"¦)');
const items = main.getSignatureHelpItems()!;
expect(items).toBeDefined();
expect(getText(main.contents, items.applicableSpan)).toEqual('"test"');
expect(items.argumentCount).toEqual(1);
expect(items.argumentIndex).toEqual(0);
expect(items.items.length).toEqual(1);
});
it('should handle a position within the first of two arguments', () => {
const main = setup(`
import {Component} from '@angular/core';
@Component({
template: '{{ foo("test", 3) }}',
})
export class MainCmp {
foo(alpha: string, beta: number): string {
return 'blah';
}
}
`);
main.moveCursorToText('foo("te¦st", 3)');
const items = main.getSignatureHelpItems()!;
expect(items).toBeDefined();
expect(getText(main.contents, items.applicableSpan)).toEqual('"test", 3');
expect(items.argumentCount).toEqual(2);
expect(items.argumentIndex).toEqual(0);
expect(items.items.length).toEqual(1);
});
it('should handle a position within the second of two arguments', () => {
const main = setup(`
import {Component} from '@angular/core';
@Component({
template: '{{ foo("test", 1 + 2) }}',
})
export class MainCmp {
foo(alpha: string, beta: number): string {
return 'blah';
}
}
`);
main.moveCursorToText('foo("test", 1 +¦ 2)');
const items = main.getSignatureHelpItems()!;
expect(items).toBeDefined();
expect(getText(main.contents, items.applicableSpan)).toEqual('"test", 1 + 2');
expect(items.argumentCount).toEqual(2);
expect(items.argumentIndex).toEqual(1);
expect(items.items.length).toEqual(1);
});
it('should handle a position within a new, EmptyExpr argument', () => {
const main = setup(`
import {Component} from '@angular/core';
@Component({
template: '{{ foo("test", ) }}',
})
export class MainCmp {
foo(alpha: string, beta: number): string {
return 'blah';
}
}
`);
main.moveCursorToText('foo("test", ¦)');
const items = main.getSignatureHelpItems()!;
expect(items).toBeDefined();
expect(getText(main.contents, items.applicableSpan)).toEqual('"test", ');
expect(items.argumentCount).toEqual(2);
expect(items.argumentIndex).toEqual(1);
expect(items.items.length).toEqual(1);
});
});
function setup(mainTs: string): OpenBuffer {
const env = LanguageServiceTestEnv.setup();
const project = env.addProject('test', {
'main.ts': mainTs,
});
return project.openFile('main.ts');
}