diff --git a/packages/language-service/src/typescript_host.ts b/packages/language-service/src/typescript_host.ts index a547f91d81..4eb60a6eb6 100644 --- a/packages/language-service/src/typescript_host.ts +++ b/packages/language-service/src/typescript_host.ts @@ -1097,7 +1097,9 @@ function findTsConfig(fileName: string): string { while (fs.existsSync(dir)) { const candidate = path.join(dir, 'tsconfig.json'); if (fs.existsSync(candidate)) return candidate; - dir = path.dirname(dir); + const parentDir = path.dirname(dir); + if (parentDir === dir) break; + dir = parentDir; } } diff --git a/packages/language-service/test/test_data.ts b/packages/language-service/test/test_data.ts index 85d37c4022..737fc130aa 100644 --- a/packages/language-service/test/test_data.ts +++ b/packages/language-service/test/test_data.ts @@ -9,6 +9,7 @@ import {MockData} from './test_utils'; export const toh = { + 'foo.ts': `export * from './app/app.component.ts';`, app: { 'app.component.ts': `import { Component } from '@angular/core'; diff --git a/packages/language-service/test/typescript_host_spec.ts b/packages/language-service/test/typescript_host_spec.ts new file mode 100644 index 0000000000..7b4db27e72 --- /dev/null +++ b/packages/language-service/test/typescript_host_spec.ts @@ -0,0 +1,42 @@ +/** + * @license + * Copyright Google Inc. 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 'reflect-metadata'; +import * as ts from 'typescript'; + +import {TypeScriptServiceHost} from '../src/typescript_host'; + +import {toh} from './test_data'; +import {MockTypescriptHost} from './test_utils'; + + +describe('completions', () => { + let host: ts.LanguageServiceHost; + let service: ts.LanguageService; + let ngHost: TypeScriptServiceHost; + + beforeEach(() => { + host = new MockTypescriptHost(['/app/main.ts'], toh); + service = ts.createLanguageService(host); + }); + + it('should be able to create a typescript host', + () => { expect(() => new TypeScriptServiceHost(host, service)).not.toThrow(); }); + + beforeEach(() => { ngHost = new TypeScriptServiceHost(host, service); }); + + it('should be able to analyze modules', + () => { expect(ngHost.getAnalyzedModules()).toBeDefined(); }); + + it('should be able to analyze modules in without a tsconfig.json file', () => { + host = new MockTypescriptHost(['foo.ts'], toh); + service = ts.createLanguageService(host); + ngHost = new TypeScriptServiceHost(host, service); + expect(ngHost.getAnalyzedModules()).toBeDefined(); + }); +});