diff --git a/packages/language-service/test/completions_spec.ts b/packages/language-service/test/completions_spec.ts
index edf2b8be09..ccb0386df8 100644
--- a/packages/language-service/test/completions_spec.ts
+++ b/packages/language-service/test/completions_spec.ts
@@ -21,24 +21,24 @@ describe('completions', () => {
let ngService = createLanguageService(ngHost);
it('should be able to get entity completions',
- () => { contains('/app/test.ng', 'entity-amp', '&', '>', '<', 'ι'); });
+ () => { expectContains('/app/test.ng', 'entity-amp', '&', '>', '<', 'ι'); });
it('should be able to return html elements', () => {
let htmlTags = ['h1', 'h2', 'div', 'span'];
let locations = ['empty', 'start-tag-h1', 'h1-content', 'start-tag', 'start-tag-after-h'];
for (let location of locations) {
- contains('/app/test.ng', location, ...htmlTags);
+ expectContains('/app/test.ng', location, ...htmlTags);
}
});
it('should be able to return element diretives',
- () => { contains('/app/test.ng', 'empty', 'my-app'); });
+ () => { expectContains('/app/test.ng', 'empty', 'my-app'); });
it('should be able to return h1 attributes',
- () => { contains('/app/test.ng', 'h1-after-space', 'id', 'dir', 'lang', 'onclick'); });
+ () => { expectContains('/app/test.ng', 'h1-after-space', 'id', 'dir', 'lang', 'onclick'); });
it('should be able to find common angular attributes',
- () => { contains('/app/test.ng', 'div-attributes', '(click)', '[ngClass]'); });
+ () => { expectContains('/app/test.ng', 'div-attributes', '(click)', '[ngClass]'); });
it('should be able to get completions in some random garbage', () => {
const fileName = '/app/test.ng';
@@ -48,8 +48,7 @@ describe('completions', () => {
});
it('should be able to infer the type of a ngForOf', () => {
- addCodeAndCallback(
- `
+ const fileName = mockHost.addCode(`
interface Person {
name: string,
street: string
@@ -58,13 +57,12 @@ describe('completions', () => {
@Component({template: '
{{person.~{name}name}}
{ contains('/app/app.component.ts', 'name', 'name', 'street'); });
+ }`);
+ expectContains(fileName, 'name', 'name', 'street');
});
it('should be able to infer the type of a ngForOf with an async pipe', () => {
- addCodeAndCallback(
- `
+ const fileName = mockHost.addCode(`
interface Person {
name: string,
street: string
@@ -73,8 +71,8 @@ describe('completions', () => {
@Component({template: '{{person.~{name}name}}
;
- }`,
- () => { contains('/app/app.component.ts', 'name', 'name', 'street'); });
+ }`);
+ expectContains(fileName, 'name', 'name', 'street');
});
it('should be able to complete every character in the file', () => {
@@ -135,20 +133,22 @@ describe('completions', () => {
describe('with regression tests', () => {
it('should not crash with an incomplete component', () => {
expect(() => {
- const code = `
-@Component({
- template: '~{inside-template}'
-})
-export class MyComponent {
+ const fileName = mockHost.addCode(`
+ @Component({
+ template: '~{inside-template}'
+ })
+ export class MyComponent {
+
+ }`);
-}`;
- addCodeAndCallback(code, fileName => { contains(fileName, 'inside-template', 'h1'); });
+ expectContains(fileName, 'inside-template', 'h1');
}).not.toThrow();
});
it('should hot crash with an incomplete class', () => {
expect(() => {
- addCodeAndCallback('\nexport class', fileName => { ngHost.getAnalyzedModules(); });
+ mockHost.addCode('\nexport class');
+ ngHost.getAnalyzedModules();
}).not.toThrow();
});
@@ -178,12 +178,11 @@ export class MyComponent {
}
`);
ngHost.getAnalyzedModules();
- contains('/app/my.component.ts', 'tree', 'children');
+ expectContains('/app/my.component.ts', 'tree', 'children');
});
it('should work with input and output', () => {
- addCodeAndCallback(
- `
+ const fileName = mockHost.addCode(`
@Component({
selector: 'foo-component',
template: \`
@@ -195,24 +194,12 @@ export class MyComponent {
text: string;
value: number;
}
- `,
- (fileName) => {
- contains(fileName, 'stringMarker', '[model]', '(model)');
- contains(fileName, 'numberMarker', '[inputAlias]', '(outputAlias)');
- });
+ `);
+ expectContains(fileName, 'stringMarker', '[model]', '(model)');
+ expectContains(fileName, 'numberMarker', '[inputAlias]', '(outputAlias)');
});
- function addCodeAndCallback(code: string, cb: (fileName: string, content?: string) => void) {
- const fileName = mockHost.addCode(code);
- ngHost.getAnalyzedModules();
- try {
- cb(fileName, mockHost.getFileContent(fileName) !);
- } finally {
- mockHost.override(fileName, undefined !);
- }
- }
-
- function contains(fileName: string, locationMarker: string, ...names: string[]) {
+ function expectContains(fileName: string, locationMarker: string, ...names: string[]) {
let location = mockHost.getMarkerLocations(fileName) ![locationMarker];
if (location == null) {
throw new Error(`No marker ${locationMarker} found.`);