mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
test: add compliance output tests for output() (#54217)
Adds compliance output tests for `output()` to verify that we are emitting proper full compilation output, as well as proper partial compilation output that can be linked to match the full output. PR Close #54217
This commit is contained in:
parent
c05e1042b4
commit
65de61ba0d
9 changed files with 234 additions and 0 deletions
|
|
@ -172,3 +172,8 @@ export const viewChild: any = null!;
|
|||
export const viewChildren: any = null!;
|
||||
export const contentChild: any = null!;
|
||||
export const contentChildren: any = null!;
|
||||
|
||||
/** Initializer-based output() API. */
|
||||
export function output<T>(_opts?: {alias?: string}): EventEmitter<T> {
|
||||
return null!;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,114 @@
|
|||
/****************************************************************************************************
|
||||
* PARTIAL FILE: output_in_directive.js
|
||||
****************************************************************************************************/
|
||||
import { Directive, output } from '@angular/core';
|
||||
import * as i0 from "@angular/core";
|
||||
export class TestDir {
|
||||
constructor() {
|
||||
this.a = output();
|
||||
this.b = output({});
|
||||
this.c = output({ alias: 'cPublic' });
|
||||
}
|
||||
}
|
||||
TestDir.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestDir, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
||||
TestDir.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: TestDir, isStandalone: true, outputs: { a: "a", b: "b", c: "cPublic" }, ngImport: i0 });
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestDir, decorators: [{
|
||||
type: Directive,
|
||||
args: [{
|
||||
standalone: true,
|
||||
}]
|
||||
}] });
|
||||
|
||||
/****************************************************************************************************
|
||||
* PARTIAL FILE: output_in_directive.d.ts
|
||||
****************************************************************************************************/
|
||||
import * as i0 from "@angular/core";
|
||||
export declare class TestDir {
|
||||
a: import("@angular/core").EventEmitter<unknown>;
|
||||
b: import("@angular/core").EventEmitter<string>;
|
||||
c: import("@angular/core").EventEmitter<void>;
|
||||
static ɵfac: i0.ɵɵFactoryDeclaration<TestDir, never>;
|
||||
static ɵdir: i0.ɵɵDirectiveDeclaration<TestDir, never, never, {}, { "a": "a"; "b": "b"; "c": "cPublic"; }, never, never, true, never>;
|
||||
}
|
||||
|
||||
/****************************************************************************************************
|
||||
* PARTIAL FILE: output_in_component.js
|
||||
****************************************************************************************************/
|
||||
import { Component, output } from '@angular/core';
|
||||
import * as i0 from "@angular/core";
|
||||
export class TestComp {
|
||||
constructor() {
|
||||
this.a = output();
|
||||
this.b = output({});
|
||||
this.c = output({ alias: 'cPublic' });
|
||||
}
|
||||
}
|
||||
TestComp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestComp, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
||||
TestComp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: TestComp, isStandalone: true, selector: "ng-component", outputs: { a: "a", b: "b", c: "cPublic" }, ngImport: i0, template: 'Works', isInline: true });
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestComp, decorators: [{
|
||||
type: Component,
|
||||
args: [{
|
||||
standalone: true,
|
||||
template: 'Works',
|
||||
}]
|
||||
}] });
|
||||
|
||||
/****************************************************************************************************
|
||||
* PARTIAL FILE: output_in_component.d.ts
|
||||
****************************************************************************************************/
|
||||
import * as i0 from "@angular/core";
|
||||
export declare class TestComp {
|
||||
a: import("@angular/core").EventEmitter<unknown>;
|
||||
b: import("@angular/core").EventEmitter<string>;
|
||||
c: import("@angular/core").EventEmitter<void>;
|
||||
static ɵfac: i0.ɵɵFactoryDeclaration<TestComp, never>;
|
||||
static ɵcmp: i0.ɵɵComponentDeclaration<TestComp, "ng-component", never, {}, { "a": "a"; "b": "b"; "c": "cPublic"; }, never, never, true, never>;
|
||||
}
|
||||
|
||||
/****************************************************************************************************
|
||||
* PARTIAL FILE: mixed_variants.js
|
||||
****************************************************************************************************/
|
||||
import { Directive, EventEmitter, Output, output } from '@angular/core';
|
||||
import * as i0 from "@angular/core";
|
||||
export class TestDir {
|
||||
constructor() {
|
||||
this.click1 = output();
|
||||
this.click2 = output();
|
||||
this._bla = output({ alias: 'decoratorPublicName' });
|
||||
this.clickDecorator1 = new EventEmitter();
|
||||
this.clickDecorator2 = new EventEmitter();
|
||||
this._blaDecorator = new EventEmitter();
|
||||
}
|
||||
}
|
||||
TestDir.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestDir, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
||||
TestDir.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: TestDir, isStandalone: true, outputs: { click1: "click1", click2: "click2", _bla: "decoratorPublicName", clickDecorator1: "clickDecorator1", clickDecorator2: "clickDecorator2", _blaDecorator: "decoratorPublicName" }, ngImport: i0 });
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: TestDir, decorators: [{
|
||||
type: Directive,
|
||||
args: [{
|
||||
standalone: true,
|
||||
}]
|
||||
}], propDecorators: { clickDecorator1: [{
|
||||
type: Output
|
||||
}], clickDecorator2: [{
|
||||
type: Output
|
||||
}], _blaDecorator: [{
|
||||
type: Output,
|
||||
args: ['decoratorPublicName']
|
||||
}] } });
|
||||
|
||||
/****************************************************************************************************
|
||||
* PARTIAL FILE: mixed_variants.d.ts
|
||||
****************************************************************************************************/
|
||||
import { EventEmitter } from '@angular/core';
|
||||
import * as i0 from "@angular/core";
|
||||
export declare class TestDir {
|
||||
click1: EventEmitter<unknown>;
|
||||
click2: EventEmitter<boolean>;
|
||||
_bla: EventEmitter<void>;
|
||||
clickDecorator1: EventEmitter<unknown>;
|
||||
clickDecorator2: EventEmitter<boolean>;
|
||||
_blaDecorator: EventEmitter<void>;
|
||||
static ɵfac: i0.ɵɵFactoryDeclaration<TestDir, never>;
|
||||
static ɵdir: i0.ɵɵDirectiveDeclaration<TestDir, never, never, {}, { "click1": "click1"; "click2": "click2"; "_bla": "decoratorPublicName"; "clickDecorator1": "clickDecorator1"; "clickDecorator2": "clickDecorator2"; "_blaDecorator": "decoratorPublicName"; }, never, never, true, never>;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"$schema": "../test_case_schema.json",
|
||||
"cases": [
|
||||
{
|
||||
"description": "should generate an output mapping for the directive",
|
||||
"inputFiles": ["output_in_directive.ts"],
|
||||
"expectations": [
|
||||
{
|
||||
"files": [
|
||||
{
|
||||
"expected": "output_in_directive.js",
|
||||
"generated": "output_in_directive.js"
|
||||
}
|
||||
],
|
||||
"failureMessage": "Incorrect definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "should generate an output mapping for the component",
|
||||
"inputFiles": ["output_in_component.ts"],
|
||||
"expectations": [
|
||||
{
|
||||
"files": [
|
||||
{
|
||||
"expected": "output_in_component.js",
|
||||
"generated": "output_in_component.js"
|
||||
}
|
||||
],
|
||||
"failureMessage": "Incorrect definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "should handle a mix of decorator-based and initializer-based outputs",
|
||||
"inputFiles": ["mixed_variants.ts"],
|
||||
"expectations": [
|
||||
{
|
||||
"files": [
|
||||
{
|
||||
"expected": "mixed_variants.js",
|
||||
"generated": "mixed_variants.js"
|
||||
}
|
||||
],
|
||||
"failureMessage": "Incorrect output"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
TestDir.ɵdir = /* @__PURE__ */ $r3$.ɵɵdefineDirective({
|
||||
…
|
||||
outputs: {
|
||||
click1: "click1",
|
||||
click2: "click2",
|
||||
_bla: "decoratorPublicName",
|
||||
clickDecorator1: "clickDecorator1",
|
||||
clickDecorator2: "clickDecorator2",
|
||||
_blaDecorator: "decoratorPublicName"
|
||||
},
|
||||
…
|
||||
});
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
import {Directive, EventEmitter, Output, output} from '@angular/core';
|
||||
|
||||
@Directive({
|
||||
standalone: true,
|
||||
})
|
||||
export class TestDir {
|
||||
click1 = output();
|
||||
click2 = output<boolean>();
|
||||
_bla = output<void>({alias: 'decoratorPublicName'});
|
||||
|
||||
@Output() clickDecorator1 = new EventEmitter();
|
||||
@Output() clickDecorator2 = new EventEmitter<boolean>();
|
||||
@Output('decoratorPublicName') _blaDecorator = new EventEmitter<void>();
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
TestComp.ɵcmp = /*@__PURE__*/ $r3$.ɵɵdefineComponent({
|
||||
…
|
||||
outputs: {
|
||||
a: "a",
|
||||
b: "b",
|
||||
c: "cPublic"
|
||||
},
|
||||
…
|
||||
});
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import {Component, output} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
template: 'Works',
|
||||
})
|
||||
export class TestComp {
|
||||
a = output();
|
||||
b = output<string>({});
|
||||
c = output<void>({alias: 'cPublic'});
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
TestDir.ɵdir = /*@__PURE__*/ $r3$.ɵɵdefineDirective({
|
||||
…
|
||||
outputs: {
|
||||
a: "a",
|
||||
b: "b",
|
||||
c: "cPublic"
|
||||
},
|
||||
…
|
||||
});
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import {Directive, output} from '@angular/core';
|
||||
|
||||
@Directive({
|
||||
standalone: true,
|
||||
})
|
||||
export class TestDir {
|
||||
a = output();
|
||||
b = output<string>({});
|
||||
c = output<void>({alias: 'cPublic'});
|
||||
}
|
||||
Loading…
Reference in a new issue