If a type has been renamed when it was exported, we need to reference the external public alias name rather than the internal original name for the type. Otherwise we will try to import the type by its internal name, which is not publicly accessible. Fixes #38238 PR Close #38666
51 lines
2.3 KiB
TypeScript
51 lines
2.3 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 * as ts from 'typescript';
|
|
import {CtorParameter, TypeValueReferenceKind} from '../../../src/ngtsc/reflection';
|
|
|
|
/**
|
|
* Check that a given list of `CtorParameter`s has `typeValueReference`s of specific `ts.Identifier`
|
|
* names.
|
|
*/
|
|
export function expectTypeValueReferencesForParameters(
|
|
parameters: CtorParameter[], expectedParams: (string|null)[],
|
|
fromModule: (string|null)[] = []) {
|
|
parameters!.forEach((param, idx) => {
|
|
const expected = expectedParams[idx];
|
|
if (expected !== null) {
|
|
if (param.typeValueReference.kind === TypeValueReferenceKind.UNAVAILABLE) {
|
|
fail(`Incorrect typeValueReference generated for ${param.name}, expected "${
|
|
expected}" because "${param.typeValueReference.reason}"`);
|
|
} else if (
|
|
param.typeValueReference.kind === TypeValueReferenceKind.LOCAL &&
|
|
fromModule[idx] != null) {
|
|
fail(`Incorrect typeValueReference generated for ${param.name}, expected non-LOCAL (from ${
|
|
fromModule[idx]}) but was marked LOCAL`);
|
|
} else if (
|
|
param.typeValueReference.kind !== TypeValueReferenceKind.LOCAL &&
|
|
fromModule[idx] == null) {
|
|
fail(`Incorrect typeValueReference generated for ${
|
|
param.name}, expected LOCAL but was imported from ${
|
|
param.typeValueReference.moduleName}`);
|
|
} else if (param.typeValueReference.kind === TypeValueReferenceKind.LOCAL) {
|
|
if (!ts.isIdentifier(param.typeValueReference.expression) &&
|
|
!ts.isPropertyAccessExpression(param.typeValueReference.expression)) {
|
|
fail(`Incorrect typeValueReference generated for ${
|
|
param.name}, expected an identifier but got "${
|
|
param.typeValueReference.expression.getText()}"`);
|
|
} else {
|
|
expect(param.typeValueReference.expression.getText()).toEqual(expected);
|
|
}
|
|
} else if (param.typeValueReference.kind === TypeValueReferenceKind.IMPORTED) {
|
|
expect(param.typeValueReference.moduleName).toBe(fromModule[idx]!);
|
|
expect(param.typeValueReference.importedName).toBe(expected);
|
|
}
|
|
}
|
|
});
|
|
}
|