fix(ivy): support multiple exportAs (#27996)
Allows for multiple, comma-separated `exportAs` names, similarly to `ViewEngine`. These changes fix FW-708. PR Close #27996
This commit is contained in:

committed by
Andrew Kushnir

parent
b78351cc7e
commit
9277142d54
@ -169,7 +169,7 @@ describe('compiler compliance', () => {
|
||||
});
|
||||
|
||||
// TODO(https://github.com/angular/angular/issues/24426): We need to support the parser actually
|
||||
// building the proper attributes based off of xmlns atttribuates.
|
||||
// building the proper attributes based off of xmlns attributes.
|
||||
xit('should support namspaced attributes', () => {
|
||||
const files = {
|
||||
app: {
|
||||
@ -2536,6 +2536,38 @@ describe('compiler compliance', () => {
|
||||
const source = result.source;
|
||||
expectEmit(source, MyAppDefinition, 'Invalid component definition');
|
||||
});
|
||||
|
||||
it('should split multiple `exportAs` values into an array', () => {
|
||||
const files = {
|
||||
app: {
|
||||
'spec.ts': `
|
||||
import {Directive, NgModule} from '@angular/core';
|
||||
|
||||
@Directive({selector: '[some-directive]', exportAs: 'someDir, otherDir'})
|
||||
export class SomeDirective {}
|
||||
|
||||
@NgModule({declarations: [SomeDirective, MyComponent]})
|
||||
export class MyModule{}
|
||||
`
|
||||
}
|
||||
};
|
||||
|
||||
// SomeDirective definition should be:
|
||||
const SomeDirectiveDefinition = `
|
||||
SomeDirective.ngDirectiveDef = $r3$.ɵdefineDirective({
|
||||
type: SomeDirective,
|
||||
selectors: [["", "some-directive", ""]],
|
||||
factory: function SomeDirective_Factory(t) {return new (t || SomeDirective)(); },
|
||||
exportAs: ["someDir", "otherDir"]
|
||||
});
|
||||
`;
|
||||
|
||||
const result = compile(files, angularFiles);
|
||||
const source = result.source;
|
||||
|
||||
expectEmit(source, SomeDirectiveDefinition, 'Incorrect SomeDirective.ngDirectiveDef');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('inherited base classes', () => {
|
||||
|
@ -934,7 +934,25 @@ describe('ngtsc behavioral tests', () => {
|
||||
env.driveMain();
|
||||
|
||||
const jsContents = env.getContents('test.js');
|
||||
expect(jsContents).toContain(`exportAs: "foo"`);
|
||||
expect(jsContents).toContain(`exportAs: ["foo"]`);
|
||||
});
|
||||
|
||||
it('should generate multiple exportAs declarations', () => {
|
||||
env.tsconfig();
|
||||
env.write('test.ts', `
|
||||
import {Component, Directive} from '@angular/core';
|
||||
|
||||
@Directive({
|
||||
selector: '[test]',
|
||||
exportAs: 'foo, bar',
|
||||
})
|
||||
class Dir {}
|
||||
`);
|
||||
|
||||
env.driveMain();
|
||||
|
||||
const jsContents = env.getContents('test.js');
|
||||
expect(jsContents).toContain(`exportAs: ["foo", "bar"]`);
|
||||
});
|
||||
|
||||
it('should generate correct factory stubs for a test module', () => {
|
||||
|
Reference in New Issue
Block a user