From 46c8d5a4ee1f118604bd38aa4ffd7157dd7d021b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Thu, 14 Mar 2019 15:53:31 +0100 Subject: [PATCH] add support for ES6-like syntax for props --- src/qweb.ts | 3 +++ ...eb_vdom.test.ts.snap => qweb.test.ts.snap} | 0 tests/component.test.ts | 23 ++++++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) rename tests/__snapshots__/{qweb_vdom.test.ts.snap => qweb.test.ts.snap} (100%) diff --git a/src/qweb.ts b/src/qweb.ts index c87cbe45..15ecd4e0 100644 --- a/src/qweb.ts +++ b/src/qweb.ts @@ -844,6 +844,9 @@ const widgetDirective: Directive = { .split(",") .map(p => { let [key, val] = p.split(":"); + if (!val) { + val = key; + } return `${key}: ${qweb._formatExpression(val)}`; }) .join(","); diff --git a/tests/__snapshots__/qweb_vdom.test.ts.snap b/tests/__snapshots__/qweb.test.ts.snap similarity index 100% rename from tests/__snapshots__/qweb_vdom.test.ts.snap rename to tests/__snapshots__/qweb.test.ts.snap diff --git a/tests/component.test.ts b/tests/component.test.ts index acfdd346..6325f878 100644 --- a/tests/component.test.ts +++ b/tests/component.test.ts @@ -1,4 +1,4 @@ -import { Component, WEnv } from "../src/component"; +import { Component, Env } from "../src/component"; import { makeDeferred, makeTestFixture, @@ -18,7 +18,7 @@ import { // - env: a WEnv, necessary to create new widgets let fixture: HTMLElement; -let env: WEnv; +let env: Env; beforeEach(() => { fixture = makeTestFixture(); @@ -36,7 +36,7 @@ afterEach(() => { fixture.remove(); }); -class Widget extends Component {} +class Widget extends Component {} function children(w: Widget): Widget[] { const childrenMap = w.__widget__.children; @@ -770,6 +770,23 @@ describe("props evaluation (with t-props directive)", () => { await widget.mount(fixture); expect(fixture.innerHTML).toBe("
42
"); }); + + test("accept ES6-like syntax for props (with getters)", async () => { + class Child extends Widget { + inlineTemplate = ``; + } + + class Parent extends Widget { + inlineTemplate = `
`; + widgets = { child: Child }; + get greetings() { + return `hello ${this.props.name}`; + } + } + const widget = new Parent(env, { name: "aaron" }); + await widget.mount(fixture); + expect(fixture.innerHTML).toBe("
hello aaron
"); + }); }); describe("other directives with t-widget", () => {