test(language-service): Make tests better by adding more assertions (#32630)
This commit adds more assertions to a few smoke tests in typescript_host_spec.ts PR Close #32630
This commit is contained in:
parent
5cf597249c
commit
7a569a7c52
|
@ -6,6 +6,7 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import {CompileNgModuleMetadata, NgAnalyzedModules} from '@angular/compiler';
|
||||||
import {setup} from '@angular/compiler-cli/test/test_support';
|
import {setup} from '@angular/compiler-cli/test/test_support';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
@ -403,3 +404,18 @@ function getReferenceMarkers(value: string): ReferenceResult {
|
||||||
function removeReferenceMarkers(value: string): string {
|
function removeReferenceMarkers(value: string): string {
|
||||||
return value.replace(referenceMarker, (match, text) => text.replace(/ᐱ/g, ''));
|
return value.replace(referenceMarker, (match, text) => text.replace(/ᐱ/g, ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the StaticSymbol that has the specified `directiveName` and return its
|
||||||
|
* Angular metadata, if any.
|
||||||
|
* @param ngModules analyzed modules
|
||||||
|
* @param directiveName
|
||||||
|
*/
|
||||||
|
export function findDirectiveMetadataByName(
|
||||||
|
ngModules: NgAnalyzedModules, directiveName: string): CompileNgModuleMetadata|undefined {
|
||||||
|
for (const [key, value] of ngModules.ngModuleByPipeOrDirective) {
|
||||||
|
if (key.name === directiveName) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,35 +12,47 @@ import * as ts from 'typescript';
|
||||||
import {TypeScriptServiceHost} from '../src/typescript_host';
|
import {TypeScriptServiceHost} from '../src/typescript_host';
|
||||||
|
|
||||||
import {toh} from './test_data';
|
import {toh} from './test_data';
|
||||||
import {MockTypescriptHost} from './test_utils';
|
import {MockTypescriptHost, findDirectiveMetadataByName} from './test_utils';
|
||||||
|
|
||||||
|
|
||||||
describe('TypeScriptServiceHost', () => {
|
describe('TypeScriptServiceHost', () => {
|
||||||
it('should be able to create a typescript host', () => {
|
it('should be able to create a typescript host and analyze modules', () => {
|
||||||
const tsLSHost = new MockTypescriptHost(['/app/main.ts'], toh);
|
|
||||||
const tsLS = ts.createLanguageService(tsLSHost);
|
|
||||||
expect(() => new TypeScriptServiceHost(tsLSHost, tsLS)).not.toThrow();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should be able to analyze modules', () => {
|
|
||||||
const tsLSHost = new MockTypescriptHost(['/app/main.ts'], toh);
|
const tsLSHost = new MockTypescriptHost(['/app/main.ts'], toh);
|
||||||
const tsLS = ts.createLanguageService(tsLSHost);
|
const tsLS = ts.createLanguageService(tsLSHost);
|
||||||
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
||||||
expect(ngLSHost.getAnalyzedModules()).toBeDefined();
|
const analyzedModules = ngLSHost.getAnalyzedModules();
|
||||||
|
expect(analyzedModules.files.length).toBeGreaterThan(0);
|
||||||
|
expect(analyzedModules.ngModules.length).toBeGreaterThan(0);
|
||||||
|
expect(analyzedModules.ngModuleByPipeOrDirective.size).toBeGreaterThan(0);
|
||||||
|
expect(analyzedModules.symbolsMissingModule).toEqual([]);
|
||||||
|
// NgClass is defined in @angular/common, which is imported in main.ts
|
||||||
|
const ngClass = findDirectiveMetadataByName(analyzedModules, 'NgClass');
|
||||||
|
expect(ngClass).toBeDefined();
|
||||||
|
// AppComponent is defined in app.component.ts
|
||||||
|
const appComp = findDirectiveMetadataByName(analyzedModules, 'AppComponent');
|
||||||
|
expect(appComp).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to analyze modules without a tsconfig.json file', () => {
|
it('should be able to analyze modules without a tsconfig.json file', () => {
|
||||||
const tsLSHost = new MockTypescriptHost(['foo.ts'], toh);
|
const tsLSHost = new MockTypescriptHost(['foo.ts'], toh);
|
||||||
const tsLS = ts.createLanguageService(tsLSHost);
|
const tsLS = ts.createLanguageService(tsLSHost);
|
||||||
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
||||||
expect(ngLSHost.getAnalyzedModules()).toBeDefined();
|
const analyzedModules = ngLSHost.getAnalyzedModules();
|
||||||
|
expect(analyzedModules.files.length).toBeGreaterThan(0);
|
||||||
|
expect(analyzedModules.ngModules.length).toBe(0);
|
||||||
|
expect(analyzedModules.ngModuleByPipeOrDirective.size).toBe(0);
|
||||||
|
expect(analyzedModules.symbolsMissingModule).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not throw if there is no script names', () => {
|
it('should not throw if there is no script names', () => {
|
||||||
const tsLSHost = new MockTypescriptHost([], toh);
|
const tsLSHost = new MockTypescriptHost([], toh);
|
||||||
const tsLS = ts.createLanguageService(tsLSHost);
|
const tsLS = ts.createLanguageService(tsLSHost);
|
||||||
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
const ngLSHost = new TypeScriptServiceHost(tsLSHost, tsLS);
|
||||||
expect(() => ngLSHost.getAnalyzedModules()).not.toThrow();
|
const analyzedModules = ngLSHost.getAnalyzedModules();
|
||||||
|
expect(analyzedModules.files.length).toBe(0);
|
||||||
|
expect(analyzedModules.ngModules.length).toBe(0);
|
||||||
|
expect(analyzedModules.ngModuleByPipeOrDirective.size).toBe(0);
|
||||||
|
expect(analyzedModules.symbolsMissingModule).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should clear the caches if program changes', () => {
|
it('should clear the caches if program changes', () => {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// packages like the native "http" module are resolved to the Angular "http" package.
|
// packages like the native "http" module are resolved to the Angular "http" package.
|
||||||
"baseUrl": "..",
|
"baseUrl": "..",
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
|
"downlevelIteration": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
|
|
Loading…
Reference in New Issue