refactor(ivy): rename objectLiteral to pureFn to prep for pipes (#22214)

PR Close #22214
This commit is contained in:
Kara Erickson 2018-02-13 18:56:52 -08:00 committed by Victor Berchet
parent e1bf067090
commit a73d5308e0
6 changed files with 187 additions and 161 deletions

View File

@ -21,6 +21,7 @@ export {
PublicFeature as ɵPublicFeature, PublicFeature as ɵPublicFeature,
NgOnChangesFeature as ɵNgOnChangesFeature, NgOnChangesFeature as ɵNgOnChangesFeature,
CssSelector as ɵCssSelector, CssSelector as ɵCssSelector,
NC as ɵNC,
C as ɵC, C as ɵC,
E as ɵE, E as ɵE,
L as ɵL, L as ɵL,
@ -43,15 +44,15 @@ export {
pb3 as ɵpb3, pb3 as ɵpb3,
pb4 as ɵpb4, pb4 as ɵpb4,
pbV as ɵpbV, pbV as ɵpbV,
o1 as ɵo1, f1 as ɵf1,
o2 as ɵo2, f2 as ɵf2,
o3 as ɵo3, f3 as ɵf3,
o4 as ɵo4, f4 as ɵf4,
o5 as ɵo5, f5 as ɵf5,
o6 as ɵo6, f6 as ɵf6,
o7 as ɵo7, f7 as ɵf7,
o8 as ɵo8, f8 as ɵf8,
oV as ɵoV, fV as ɵfV,
cR as ɵcR, cR as ɵcR,
cr as ɵcr, cr as ɵcr,
qR as ɵqR, qR as ɵqR,

View File

@ -79,16 +79,16 @@ export {
queryRefresh as qR, queryRefresh as qR,
} from './query'; } from './query';
export { export {
objectLiteral1 as o1, pureFunction1 as f1,
objectLiteral2 as o2, pureFunction2 as f2,
objectLiteral3 as o3, pureFunction3 as f3,
objectLiteral4 as o4, pureFunction4 as f4,
objectLiteral5 as o5, pureFunction5 as f5,
objectLiteral6 as o6, pureFunction6 as f6,
objectLiteral7 as o7, pureFunction7 as f7,
objectLiteral8 as o8, pureFunction8 as f8,
objectLiteralV as oV, pureFunctionV as fV,
} from './object_literal'; } from './pure_function';
// clang-format on // clang-format on

View File

@ -9,31 +9,31 @@
import {NO_CHANGE, bind, peekBinding} from './instructions'; import {NO_CHANGE, bind, peekBinding} from './instructions';
/** /**
* If the object or array has changed, returns a copy with the updated expression. * If the value of the provided exp has changed, calls the pure function to
* Or if the expression hasn't changed, returns NO_CHANGE. * return an updated value. Or if the value has not changed, returns NO_CHANGE.
* *
* @param factoryFn Function that returns an updated instance of the object/array * @param pureFn Function that returns an updated value
* @param exp Updated expression value * @param exp Updated expression value
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral1(factoryFn: (v: any) => any, exp: any): any { export function pureFunction1(pureFn: (v: any) => any, exp: any): any {
let different = false; let different = false;
const latestValue = exp === NO_CHANGE ? peekBinding() : exp; const latestValue = exp === NO_CHANGE ? peekBinding() : exp;
if (bind(exp) !== NO_CHANGE) different = true; if (bind(exp) !== NO_CHANGE) different = true;
return different ? factoryFn(latestValue) : NO_CHANGE; return different ? pureFn(latestValue) : NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral2(factoryFn: (v1: any, v2: any) => any, exp1: any, exp2: any): any { export function pureFunction2(pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any): any {
let different = false; let different = false;
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1; const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
@ -42,21 +42,21 @@ export function objectLiteral2(factoryFn: (v1: any, v2: any) => any, exp1: any,
const latestVal2 = exp2 === NO_CHANGE ? peekBinding() : exp2; const latestVal2 = exp2 === NO_CHANGE ? peekBinding() : exp2;
if (bind(exp2) !== NO_CHANGE) different = true; if (bind(exp2) !== NO_CHANGE) different = true;
return different ? factoryFn(latestVal1, latestVal2) : NO_CHANGE; return different ? pureFn(latestVal1, latestVal2) : NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral3( export function pureFunction3(
factoryFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any): any { pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any): any {
let different = false; let different = false;
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1; const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
@ -68,22 +68,22 @@ export function objectLiteral3(
const latestVal3 = exp3 === NO_CHANGE ? peekBinding() : exp3; const latestVal3 = exp3 === NO_CHANGE ? peekBinding() : exp3;
if (bind(exp3) !== NO_CHANGE) different = true; if (bind(exp3) !== NO_CHANGE) different = true;
return different ? factoryFn(latestVal1, latestVal2, latestVal3) : NO_CHANGE; return different ? pureFn(latestVal1, latestVal2, latestVal3) : NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
* @param exp4 * @param exp4
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral4( export function pureFunction4(
factoryFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any, pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any,
exp4: any): any { exp4: any): any {
let different = false; let different = false;
@ -99,24 +99,24 @@ export function objectLiteral4(
const latestVal4 = exp4 === NO_CHANGE ? peekBinding() : exp4; const latestVal4 = exp4 === NO_CHANGE ? peekBinding() : exp4;
if (bind(exp4) !== NO_CHANGE) different = true; if (bind(exp4) !== NO_CHANGE) different = true;
return different ? factoryFn(latestVal1, latestVal2, latestVal3, latestVal4) : NO_CHANGE; return different ? pureFn(latestVal1, latestVal2, latestVal3, latestVal4) : NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
* @param exp4 * @param exp4
* @param exp5 * @param exp5
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral5( export function pureFunction5(
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any, exp2: any, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any, exp2: any, exp3: any,
exp3: any, exp4: any, exp5: any): any { exp4: any, exp5: any): any {
let different = false; let different = false;
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1; const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
@ -134,25 +134,24 @@ export function objectLiteral5(
const latestVal5 = exp5 === NO_CHANGE ? peekBinding() : exp5; const latestVal5 = exp5 === NO_CHANGE ? peekBinding() : exp5;
if (bind(exp5) !== NO_CHANGE) different = true; if (bind(exp5) !== NO_CHANGE) different = true;
return different ? factoryFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5) : return different ? pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5) : NO_CHANGE;
NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
* @param exp4 * @param exp4
* @param exp5 * @param exp5
* @param exp6 * @param exp6
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral6( export function pureFunction6(
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any, exp1: any, exp2: any, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any, exp1: any, exp2: any,
exp3: any, exp4: any, exp5: any, exp6: any): any { exp3: any, exp4: any, exp5: any, exp6: any): any {
let different = false; let different = false;
@ -175,15 +174,15 @@ export function objectLiteral6(
if (bind(exp6) !== NO_CHANGE) different = true; if (bind(exp6) !== NO_CHANGE) different = true;
return different ? return different ?
factoryFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6) : pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6) :
NO_CHANGE; NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
@ -191,10 +190,10 @@ export function objectLiteral6(
* @param exp5 * @param exp5
* @param exp6 * @param exp6
* @param exp7 * @param exp7
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral7( export function pureFunction7(
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any,
exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any): any { exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any): any {
let different = false; let different = false;
@ -220,16 +219,15 @@ export function objectLiteral7(
if (bind(exp7) !== NO_CHANGE) different = true; if (bind(exp7) !== NO_CHANGE) different = true;
return different ? return different ?
factoryFn( pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6, latestVal7) :
latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6, latestVal7) :
NO_CHANGE; NO_CHANGE;
} }
/** /**
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn * @param pureFn
* @param exp1 * @param exp1
* @param exp2 * @param exp2
* @param exp3 * @param exp3
@ -238,10 +236,10 @@ export function objectLiteral7(
* @param exp6 * @param exp6
* @param exp7 * @param exp7
* @param exp8 * @param exp8
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteral8( export function pureFunction8(
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any,
exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any): any { exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any): any {
let different = false; let different = false;
@ -269,24 +267,24 @@ export function objectLiteral8(
const latestVal8 = exp8 === NO_CHANGE ? peekBinding() : exp8; const latestVal8 = exp8 === NO_CHANGE ? peekBinding() : exp8;
if (bind(exp8) !== NO_CHANGE) different = true; if (bind(exp8) !== NO_CHANGE) different = true;
return different ? factoryFn( return different ? pureFn(
latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6, latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6,
latestVal7, latestVal8) : latestVal7, latestVal8) :
NO_CHANGE; NO_CHANGE;
} }
/** /**
* objectLiteral instruction that can support any number of bindings. * pureFunction instruction that can support any number of bindings.
* *
* If the object or array has changed, returns a copy with all updated expressions. * If the value of any provided exp has changed, calls the pure function to
* Or if no expressions have changed, returns NO_CHANGE. * return an updated value. Or if no values have changed, returns NO_CHANGE.
* *
* @param factoryFn A factory function that takes binding values and builds an object or array * @param pureFn A pure function that takes binding values and builds an object or array
* containing those values. * containing those values.
* @param exp An array of binding values * @param exp An array of binding values
* @returns A copy of the object/array or NO_CHANGE * @returns Updated value or NO_CHANGE
*/ */
export function objectLiteralV(factoryFn: (v: any[]) => any, exps: any[]): any { export function pureFunctionV(pureFn: (v: any[]) => any, exps: any[]): any {
let different = false; let different = false;
for (let i = 0; i < exps.length; i++) { for (let i = 0; i < exps.length; i++) {
@ -295,5 +293,5 @@ export function objectLiteralV(factoryFn: (v: any[]) => any, exps: any[]): any {
if (bind(exp) !== NO_CHANGE) different = true; if (bind(exp) !== NO_CHANGE) different = true;
} }
return different ? factoryFn(exps) : NO_CHANGE; return different ? pureFn(exps) : NO_CHANGE;
} }

View File

@ -190,41 +190,69 @@ describe('compiler specification', () => {
}); });
describe('value composition', () => { describe('value composition', () => {
type $MyArrayComp$ = MyArrayComp;
it('should support array literals', () => {
type $MyComp$ = MyComp;
type $MyApp$ = MyApp;
@Component({ @Component({
selector: 'my-comp', selector: 'my-array-comp',
template: ` template: `
<p>{{ names[0] }}</p> {{ names[0] }} {{ names[1] }}
<p>{{ names[1] }}</p>
` `
}) })
class MyComp { class MyArrayComp {
@Input() names: string[]; @Input() names: string[];
static ngComponentDef = $r3$.ɵdefineComponent({ static ngComponentDef = $r3$.ɵdefineComponent({
type: MyComp, type: MyArrayComp,
tag: 'my-comp', tag: 'my-array-comp',
factory: function MyComp_Factory() { return new MyComp(); }, factory: function MyArrayComp_Factory() { return new MyArrayComp(); },
template: function MyComp_Template(ctx: $MyComp$, cm: $boolean$) { template: function MyArrayComp_Template(ctx: $MyArrayComp$, cm: $boolean$) {
if (cm) { if (cm) {
$r3$.ɵE(0, 'p'); $r3$.ɵT(0);
$r3$.ɵT(1);
$r3$.ɵe();
$r3$.ɵE(2, 'p');
$r3$.ɵT(3);
$r3$.ɵe();
} }
$r3$.ɵt(1, $r3$.ɵb(ctx.names[0])); $r3$.ɵt(0, $r3$.ɵb2('', ctx.names[0], ' ', ctx.names[1], ''));
$r3$.ɵt(3, $r3$.ɵb(ctx.names[1]));
}, },
inputs: {names: 'names'} inputs: {names: 'names'}
}); });
} }
it('should support array literals of constants', () => {
type $MyApp$ = MyApp;
// NORMATIVE
const $e0_arr$ = ['Nancy', 'Bess'];
// /NORMATIVE
@Component({
selector: 'my-app',
template: `
<my-array-comp [names]="['Nancy', 'Bess']"></my-array-comp>
`
})
class MyApp {
// NORMATIVE
static ngComponentDef = $r3$.ɵdefineComponent({
type: MyApp,
tag: 'my-app',
factory: function MyApp_Factory() { return new MyApp(); },
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
if (cm) {
$r3$.ɵE(0, MyArrayComp);
$r3$.ɵe();
}
$r3$.ɵp(0, 'names', $r3$.ɵb0($e0_arr$));
MyArrayComp.ngComponentDef.h(1, 0);
$r3$.ɵr(1, 0);
}
});
// /NORMATIVE
}
expect(renderComp(MyApp)).toEqual(`<my-array-comp>Nancy Bess</my-array-comp>`);
});
it('should support array literals', () => {
type $MyApp$ = MyApp;
// NORMATIVE // NORMATIVE
const $e0_ff$ = (v: any) => ['Nancy', v]; const $e0_ff$ = (v: any) => ['Nancy', v];
// /NORMATIVE // /NORMATIVE
@ -232,7 +260,7 @@ describe('compiler specification', () => {
@Component({ @Component({
selector: 'my-app', selector: 'my-app',
template: ` template: `
<my-comp [names]="['Nancy', customName]"></my-comp> <my-array-comp [names]="['Nancy', customName]"></my-array-comp>
` `
}) })
class MyApp { class MyApp {
@ -245,18 +273,18 @@ describe('compiler specification', () => {
factory: function MyApp_Factory() { return new MyApp(); }, factory: function MyApp_Factory() { return new MyApp(); },
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) { template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
if (cm) { if (cm) {
$r3$.ɵE(0, MyComp); $r3$.ɵE(0, MyArrayComp);
$r3$.ɵe(); $r3$.ɵe();
} }
$r3$.ɵp(0, 'names', $r3$.ɵo1($e0_ff$, ctx.customName)); $r3$.ɵp(0, 'names', $r3$.ɵf1($e0_ff$, ctx.customName));
MyComp.ngComponentDef.h(1, 0); MyArrayComp.ngComponentDef.h(1, 0);
$r3$.ɵr(1, 0); $r3$.ɵr(1, 0);
} }
}); });
// /NORMATIVE // /NORMATIVE
} }
expect(renderComp(MyApp)).toEqual(`<my-comp><p>Nancy</p><p>Bess</p></my-comp>`); expect(renderComp(MyApp)).toEqual(`<my-array-comp>Nancy Bess</my-array-comp>`);
}); });
it('should support 9+ bindings in array literals', () => { it('should support 9+ bindings in array literals', () => {
@ -352,7 +380,7 @@ describe('compiler specification', () => {
} }
$r3$.ɵp( $r3$.ɵp(
0, 'names', 0, 'names',
$r3$.ɵoV($e0_ff$, [c.n0, c.n1, c.n2, c.n3, c.n4, c.n5, c.n6, c.n7, c.n8])); $r3$.ɵfV($e0_ff$, [c.n0, c.n1, c.n2, c.n3, c.n4, c.n5, c.n6, c.n7, c.n8]));
MyComp.ngComponentDef.h(1, 0); MyComp.ngComponentDef.h(1, 0);
$r3$.ɵr(1, 0); $r3$.ɵr(1, 0);
} }
@ -420,7 +448,7 @@ describe('compiler specification', () => {
$r3$.ɵE(0, ObjectComp); $r3$.ɵE(0, ObjectComp);
$r3$.ɵe(); $r3$.ɵe();
} }
$r3$.ɵp(0, 'config', $r3$.ɵo1($e0_ff$, ctx.name)); $r3$.ɵp(0, 'config', $r3$.ɵf1($e0_ff$, ctx.name));
ObjectComp.ngComponentDef.h(1, 0); ObjectComp.ngComponentDef.h(1, 0);
$r3$.ɵr(1, 0); $r3$.ɵr(1, 0);
} }
@ -500,8 +528,8 @@ describe('compiler specification', () => {
} }
$r3$.ɵp( $r3$.ɵp(
0, 'config', 0, 'config',
$r3$.ɵo2( $r3$.ɵf2(
$e0_ff_2$, ctx.name, $r3$.ɵo1($e0_ff_1$, $r3$.ɵo1($e0_ff$, ctx.duration)))); $e0_ff_2$, ctx.name, $r3$.ɵf1($e0_ff_1$, $r3$.ɵf1($e0_ff$, ctx.duration))));
NestedComp.ngComponentDef.h(1, 0); NestedComp.ngComponentDef.h(1, 0);
$r3$.ɵr(1, 0); $r3$.ɵr(1, 0);
} }

View File

@ -72,7 +72,7 @@ describe('render3 integration test', () => {
if (cm) { if (cm) {
text(0); text(0);
} }
textBinding(0, cm ? value : NO_CHANGE); textBinding(0, bind0(value));
} }
expect(renderToHtml(Template, 'once')).toEqual('once'); expect(renderToHtml(Template, 'once')).toEqual('once');
expect(renderToHtml(Template, 'twice')).toEqual('once'); expect(renderToHtml(Template, 'twice')).toEqual('once');

View File

@ -7,7 +7,7 @@
*/ */
import {defineComponent} from '../../src/render3/index'; import {defineComponent} from '../../src/render3/index';
import {componentRefresh, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, memory} from '../../src/render3/instructions'; import {componentRefresh, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, memory} from '../../src/render3/instructions';
import {objectLiteral1, objectLiteral2, objectLiteral3, objectLiteral4, objectLiteral5, objectLiteral6, objectLiteral7, objectLiteral8, objectLiteralV} from '../../src/render3/object_literal'; import {pureFunction1, pureFunction2, pureFunction3, pureFunction4, pureFunction5, pureFunction6, pureFunction7, pureFunction8, pureFunctionV} from '../../src/render3/pure_function';
import {renderToHtml} from '../../test/render3/render_util'; import {renderToHtml} from '../../test/render3/render_util';
describe('array literals', () => { describe('array literals', () => {
@ -32,7 +32,7 @@ describe('array literals', () => {
elementStart(0, MyComp); elementStart(0, MyComp);
elementEnd(); elementEnd();
} }
elementProperty(0, 'names', objectLiteral1(e0_ff, ctx.customName)); elementProperty(0, 'names', pureFunction1(e0_ff, ctx.customName));
MyComp.ngComponentDef.h(1, 0); MyComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
} }
@ -79,8 +79,8 @@ describe('array literals', () => {
elementStart(0, ManyPropComp); elementStart(0, ManyPropComp);
elementEnd(); elementEnd();
} }
elementProperty(0, 'names1', objectLiteral1(e0_ff, ctx.customName)); elementProperty(0, 'names1', pureFunction1(e0_ff, ctx.customName));
elementProperty(0, 'names2', objectLiteral1(e0_ff_1, ctx.customName2)); elementProperty(0, 'names2', pureFunction1(e0_ff_1, ctx.customName2));
ManyPropComp.ngComponentDef.h(1, 0); ManyPropComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
} }
@ -105,7 +105,7 @@ describe('array literals', () => {
elementStart(0, MyComp); elementStart(0, MyComp);
elementEnd(); elementEnd();
} }
elementProperty(0, 'names', objectLiteral2(e0_ff, ctx.customName, ctx.customName2)); elementProperty(0, 'names', pureFunction2(e0_ff, ctx.customName, ctx.customName2));
MyComp.ngComponentDef.h(1, 0); MyComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
} }
@ -129,41 +129,41 @@ describe('array literals', () => {
}); });
it('should work up to 8 bindings', () => { it('should work up to 8 bindings', () => {
let o3Comp: MyComp; let f3Comp: MyComp;
let o4Comp: MyComp; let f4Comp: MyComp;
let o5Comp: MyComp; let f5Comp: MyComp;
let o6Comp: MyComp; let f6Comp: MyComp;
let o7Comp: MyComp; let f7Comp: MyComp;
let o8Comp: MyComp; let f8Comp: MyComp;
function Template(c: any, cm: boolean) { function Template(c: any, cm: boolean) {
if (cm) { if (cm) {
elementStart(0, MyComp); elementStart(0, MyComp);
o3Comp = memory(1); f3Comp = memory(1);
elementEnd(); elementEnd();
elementStart(2, MyComp); elementStart(2, MyComp);
o4Comp = memory(3); f4Comp = memory(3);
elementEnd(); elementEnd();
elementStart(4, MyComp); elementStart(4, MyComp);
o5Comp = memory(5); f5Comp = memory(5);
elementEnd(); elementEnd();
elementStart(6, MyComp); elementStart(6, MyComp);
o6Comp = memory(7); f6Comp = memory(7);
elementEnd(); elementEnd();
elementStart(8, MyComp); elementStart(8, MyComp);
o7Comp = memory(9); f7Comp = memory(9);
elementEnd(); elementEnd();
elementStart(10, MyComp); elementStart(10, MyComp);
o8Comp = memory(11); f8Comp = memory(11);
elementEnd(); elementEnd();
} }
elementProperty(0, 'names', objectLiteral3(e0_ff, c[5], c[6], c[7])); elementProperty(0, 'names', pureFunction3(e0_ff, c[5], c[6], c[7]));
elementProperty(2, 'names', objectLiteral4(e2_ff, c[4], c[5], c[6], c[7])); elementProperty(2, 'names', pureFunction4(e2_ff, c[4], c[5], c[6], c[7]));
elementProperty(4, 'names', objectLiteral5(e4_ff, c[3], c[4], c[5], c[6], c[7])); elementProperty(4, 'names', pureFunction5(e4_ff, c[3], c[4], c[5], c[6], c[7]));
elementProperty(6, 'names', objectLiteral6(e6_ff, c[2], c[3], c[4], c[5], c[6], c[7])); elementProperty(6, 'names', pureFunction6(e6_ff, c[2], c[3], c[4], c[5], c[6], c[7]));
elementProperty(8, 'names', objectLiteral7(e8_ff, c[1], c[2], c[3], c[4], c[5], c[6], c[7])); elementProperty(8, 'names', pureFunction7(e8_ff, c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
elementProperty( elementProperty(
10, 'names', objectLiteral8(e10_ff, c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7])); 10, 'names', pureFunction8(e10_ff, c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
MyComp.ngComponentDef.h(1, 0); MyComp.ngComponentDef.h(1, 0);
MyComp.ngComponentDef.h(3, 2); MyComp.ngComponentDef.h(3, 2);
MyComp.ngComponentDef.h(5, 4); MyComp.ngComponentDef.h(5, 4);
@ -193,23 +193,23 @@ describe('array literals', () => {
v8: any) => [v1, v2, v3, v4, v5, v6, v7, v8]; v8: any) => [v1, v2, v3, v4, v5, v6, v7, v8];
renderToHtml(Template, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']); renderToHtml(Template, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']);
expect(o3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
expect(o4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
expect(o5Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f5Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
expect(o6Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f6Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
expect(o7Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f7Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
expect(o8Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']); expect(f8Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
renderToHtml(Template, ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', 'i1']); renderToHtml(Template, ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', 'i1']);
expect(o3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f1', 'g1', 'h1']); expect(f3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f1', 'g1', 'h1']);
expect(o4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e1', 'f1', 'g1', 'h1']); expect(f4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e1', 'f1', 'g1', 'h1']);
expect(o5Comp !.names).toEqual(['a', 'b', 'c', 'd1', 'e1', 'f1', 'g1', 'h1']); expect(f5Comp !.names).toEqual(['a', 'b', 'c', 'd1', 'e1', 'f1', 'g1', 'h1']);
expect(o6Comp !.names).toEqual(['a', 'b', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']); expect(f6Comp !.names).toEqual(['a', 'b', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
expect(o7Comp !.names).toEqual(['a', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']); expect(f7Comp !.names).toEqual(['a', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
expect(o8Comp !.names).toEqual(['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']); expect(f8Comp !.names).toEqual(['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
}); });
it('should work with objectLiteralV for 9+ bindings', () => { it('should work with pureFunctionV for 9+ bindings', () => {
/** /**
* <my-comp [names]="['start', v0, v1, v2, v3, {name: v4}, v5, v6, v7, v8, 'end']"> * <my-comp [names]="['start', v0, v1, v2, v3, {name: v4}, v5, v6, v7, v8, 'end']">
* </my-comp> * </my-comp>
@ -219,9 +219,8 @@ describe('array literals', () => {
elementStart(0, MyComp); elementStart(0, MyComp);
elementEnd(); elementEnd();
} }
elementProperty( elementProperty(0, 'names', pureFunctionV(e0_ff, [
0, 'names', objectLiteralV(e0_ff, [ c[0], c[1], c[2], c[3], pureFunction1(e0_ff_1, c[4]), c[5], c[6], c[7], c[8]
c[0], c[1], c[2], c[3], objectLiteral1(e0_ff_1, c[4]), c[5], c[6], c[7], c[8]
])); ]));
MyComp.ngComponentDef.h(1, 0); MyComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
@ -271,7 +270,7 @@ describe('object literals', () => {
elementStart(0, ObjectComp); elementStart(0, ObjectComp);
elementEnd(); elementEnd();
} }
elementProperty(0, 'config', objectLiteral1(e0_ff, ctx.name)); elementProperty(0, 'config', pureFunction1(e0_ff, ctx.name));
ObjectComp.ngComponentDef.h(1, 0); ObjectComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
} }
@ -306,8 +305,8 @@ describe('object literals', () => {
} }
elementProperty( elementProperty(
0, 'config', 0, 'config',
objectLiteral2( pureFunction2(
e0_ff, ctx.name, objectLiteral1(e0_ff_1, objectLiteral1(e0_ff_2, ctx.duration)))); e0_ff, ctx.name, pureFunction1(e0_ff_1, pureFunction1(e0_ff_2, ctx.duration))));
ObjectComp.ngComponentDef.h(1, 0); ObjectComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
} }
@ -372,7 +371,7 @@ describe('object literals', () => {
elementEnd(); elementEnd();
} }
elementProperty( elementProperty(
0, 'config', objectLiteral2(e0_ff, ctx.configs[i].opacity, ctx.configs[i].duration)); 0, 'config', pureFunction2(e0_ff, ctx.configs[i].opacity, ctx.configs[i].duration));
ObjectComp.ngComponentDef.h(1, 0); ObjectComp.ngComponentDef.h(1, 0);
componentRefresh(1, 0); componentRefresh(1, 0);
embeddedViewEnd(); embeddedViewEnd();