fix(ivy): inherited host listeners called twice (#29170)
Fixes host listeners being inherited twice when going through `setClassMetadata`. This PR resolves FW-1142. PR Close #29170
This commit is contained in:

committed by
Kara Erickson

parent
b6f6b1178f
commit
a746b5b1ea
@ -6,8 +6,10 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {WrappedNodeExpr} from '@angular/compiler';
|
||||
import {convertToR3QueryMetadata, extendsDirectlyFromObject} from '../../../src/render3/jit/directive';
|
||||
import {Directive, HostListener} from '@angular/core';
|
||||
import {setClassMetadata} from '@angular/core/src/render3/metadata';
|
||||
|
||||
import {convertToR3QueryMetadata, directiveMetadata, extendsDirectlyFromObject} from '../../../src/render3/jit/directive';
|
||||
|
||||
describe('jit directive helper functions', () => {
|
||||
|
||||
@ -96,4 +98,37 @@ describe('jit directive helper functions', () => {
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('directiveMetadata', () => {
|
||||
it('should not inherit propMetadata from super class', () => {
|
||||
class SuperDirective {}
|
||||
setClassMetadata(
|
||||
SuperDirective, [{type: Directive, args: []}], null,
|
||||
{handleClick: [{type: HostListener, args: ['click']}]});
|
||||
|
||||
class SubDirective extends SuperDirective {}
|
||||
setClassMetadata(SubDirective, [{type: Directive, args: []}], null, null);
|
||||
|
||||
expect(directiveMetadata(SuperDirective, {}).propMetadata.handleClick).toBeTruthy();
|
||||
expect(directiveMetadata(SubDirective, {}).propMetadata.handleClick).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should not inherit propMetadata from grand super class', () => {
|
||||
class SuperSuperDirective {}
|
||||
setClassMetadata(
|
||||
SuperSuperDirective, [{type: Directive, args: []}], null,
|
||||
{handleClick: [{type: HostListener, args: ['click']}]});
|
||||
|
||||
class SuperDirective {}
|
||||
setClassMetadata(SuperDirective, [{type: Directive, args: []}], null, null);
|
||||
|
||||
class SubDirective extends SuperDirective {}
|
||||
|
||||
setClassMetadata(SubDirective, [{type: Directive, args: []}], null, null);
|
||||
|
||||
expect(directiveMetadata(SuperSuperDirective, {}).propMetadata.handleClick).toBeTruthy();
|
||||
expect(directiveMetadata(SuperDirective, {}).propMetadata.handleClick).toBeFalsy();
|
||||
expect(directiveMetadata(SubDirective, {}).propMetadata.handleClick).toBeFalsy();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user