[REF] owl: reorganize src code in sub files

This commit is contained in:
Géry Debongnie
2019-07-14 22:18:00 +02:00
parent 15a3f59744
commit 5382e824b1
36 changed files with 1802 additions and 1747 deletions
+12 -10
View File
@@ -3,11 +3,11 @@
exports[`animations t-transition combined with component 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -47,11 +47,11 @@ exports[`animations t-transition combined with component 1`] = `
exports[`animations t-transition combined with t-component and t-if 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
if (context['state'].display) {
@@ -93,15 +93,16 @@ exports[`animations t-transition combined with t-component and t-if 1`] = `
exports[`animations t-transition with no delay/duration 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
p1.hook = {
insert: vn => {
this.utils.transitionInsert(vn, 'jupiler');
utils.transitionInsert(vn, 'jupiler');
},
remove: (vn, rm) => {
this.utils.transitionRemove(vn, 'jupiler', rm);
utils.transitionRemove(vn, 'jupiler', rm);
},
};
c1.push({text: \`blue\`});
@@ -112,15 +113,16 @@ exports[`animations t-transition with no delay/duration 1`] = `
exports[`animations t-transition, on a simple node (insert) 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
p1.hook = {
insert: vn => {
this.utils.transitionInsert(vn, 'chimay');
utils.transitionInsert(vn, 'chimay');
},
remove: (vn, rm) => {
this.utils.transitionRemove(vn, 'chimay', rm);
utils.transitionRemove(vn, 'chimay', rm);
},
};
c1.push({text: \`blue\`});
+2 -2
View File
@@ -1,5 +1,5 @@
import { Component, Env } from "../src/component";
import { QWeb } from "../src/qweb_core";
import { Component, Env } from "../src/component/component";
import { QWeb } from "../src/qweb/index";
import {
makeDeferred,
makeTestFixture,
@@ -3,11 +3,11 @@
exports[`async rendering delayed component with t-asyncroot directive 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -85,11 +85,11 @@ exports[`async rendering delayed component with t-asyncroot directive 1`] = `
exports[`async rendering fast component with t-asyncroot directive 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -167,11 +167,11 @@ exports[`async rendering fast component with t-asyncroot directive 1`] = `
exports[`async rendering t-component with t-asyncroot directive: mixed re-renderings 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -249,11 +249,11 @@ exports[`async rendering t-component with t-asyncroot directive: mixed re-render
exports[`class and style attributes with t-component dynamic t-att-style is properly added and updated on widget root el 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -291,11 +291,11 @@ exports[`class and style attributes with t-component dynamic t-att-style is prop
exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v2) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -336,9 +336,10 @@ exports[`class and style attributes with t-component t-att-class is properly add
exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v2) 2`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let _2 = {'c':true};
Object.assign(_2, this.utils.toObj({d:context['state'].d}))
Object.assign(_2, utils.toObj({d:context['state'].d}))
let c3 = [], p3 = {key:3,class:_2};
var vn3 = h('span', p3, c3);
return vn3;
@@ -348,11 +349,11 @@ exports[`class and style attributes with t-component t-att-class is properly add
exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v3) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -393,9 +394,10 @@ exports[`class and style attributes with t-component t-att-class is properly add
exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v3) 2`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let _2 = {'c':true};
Object.assign(_2, this.utils.toObj(context['state'].d?'d':''))
Object.assign(_2, utils.toObj(context['state'].d?'d':''))
let c3 = [], p3 = {key:3,class:_2};
var vn3 = h('span', p3, c3);
return vn3;
@@ -405,11 +407,11 @@ exports[`class and style attributes with t-component t-att-class is properly add
exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -448,12 +450,12 @@ exports[`class and style attributes with t-component t-att-class is properly add
exports[`composition sub components with some state rendered in a loop 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['state'].numbers;
@@ -506,11 +508,11 @@ exports[`composition sub components with some state rendered in a loop 1`] = `
exports[`composition t-component with dynamic value 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -547,11 +549,11 @@ exports[`composition t-component with dynamic value 1`] = `
exports[`composition t-component with dynamic value 2 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -588,11 +590,11 @@ exports[`composition t-component with dynamic value 2 1`] = `
exports[`other directives with t-component t-on with handler bound to argument 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -629,11 +631,11 @@ exports[`other directives with t-component t-on with handler bound to argument 1
exports[`other directives with t-component t-on with handler bound to empty object (with non empty inner string) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -670,11 +672,11 @@ exports[`other directives with t-component t-on with handler bound to empty obje
exports[`other directives with t-component t-on with handler bound to empty object 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -711,11 +713,11 @@ exports[`other directives with t-component t-on with handler bound to empty obje
exports[`other directives with t-component t-on with handler bound to object 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -752,11 +754,11 @@ exports[`other directives with t-component t-on with handler bound to object 1`]
exports[`other directives with t-component t-on with prevent and self modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -793,11 +795,11 @@ exports[`other directives with t-component t-on with prevent and self modifiers
exports[`other directives with t-component t-on with self and prevent modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -834,11 +836,11 @@ exports[`other directives with t-component t-on with self and prevent modifiers
exports[`other directives with t-component t-on with self modifier 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -875,11 +877,11 @@ exports[`other directives with t-component t-on with self modifier 1`] = `
exports[`other directives with t-component t-on with stop and/or prevent modifiers 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -916,11 +918,11 @@ exports[`other directives with t-component t-on with stop and/or prevent modifie
exports[`random stuff/miscellaneous snapshotting compiled code 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -958,12 +960,12 @@ exports[`random stuff/miscellaneous snapshotting compiled code 1`] = `
exports[`random stuff/miscellaneous t-on with handler bound to dynamic argument on a t-foreach 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['props'].items;
@@ -1017,7 +1019,7 @@ exports[`random stuff/miscellaneous t-on with handler bound to dynamic argument
exports[`t-model directive .lazy modifier 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1040,7 +1042,7 @@ exports[`t-model directive .lazy modifier 1`] = `
exports[`t-model directive basic use, on an input 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1063,7 +1065,7 @@ exports[`t-model directive basic use, on an input 1`] = `
exports[`t-model directive on a select 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1102,7 +1104,7 @@ exports[`t-model directive on a select 1`] = `
exports[`t-model directive on an input type=radio 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'radio';
@@ -1138,7 +1140,7 @@ exports[`t-model directive on an input type=radio 1`] = `
exports[`t-model directive on an input, type=checkbox 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'checkbox';
@@ -1164,11 +1166,11 @@ exports[`t-model directive on an input, type=checkbox 1`] = `
exports[`t-slot directive can define and call slots 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -1207,7 +1209,7 @@ exports[`t-slot directive can define and call slots 2`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1232,7 +1234,7 @@ exports[`t-slot directive slots are rendered with proper context, part 2 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
var _1 = context['props'].to;
let c2 = [], p2 = {key:2,attrs:{href: _1}};
var vn2 = h('a', p2, c2);
@@ -1247,13 +1249,13 @@ exports[`t-slot directive slots are rendered with proper context, part 2 1`] = `
exports[`t-slot directive slots are rendered with proper context, part 2 2`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
context = Object.create(context);
const scope = Object.create(null);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1318,7 +1320,7 @@ exports[`t-slot directive slots are rendered with proper context, part 3 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
var _1 = context['props'].to;
let c2 = [], p2 = {key:2,attrs:{href: _1}};
var vn2 = h('a', p2, c2);
@@ -1333,13 +1335,13 @@ exports[`t-slot directive slots are rendered with proper context, part 3 1`] = `
exports[`t-slot directive slots are rendered with proper context, part 3 2`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
context = Object.create(context);
const scope = Object.create(null);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1404,11 +1406,11 @@ exports[`t-slot directive slots are rendered with proper context, part 3 2`] = `
exports[`t-slot directive slots are rendered with proper context, part 4 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'User '+context['state'].user.name;
@@ -1447,12 +1449,12 @@ exports[`t-slot directive slots are rendered with proper context, part 4 1`] = `
exports[`top level sub widgets basic use 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
let result;
var h = this.utils.h;
var h = this.h;
//COMPONENT
let def2;
let w3 = 3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[3]] : false;
@@ -1487,12 +1489,12 @@ exports[`top level sub widgets basic use 1`] = `
exports[`top level sub widgets can select a sub widget 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
let result;
var h = this.utils.h;
var h = this.h;
if (context['env'].flag) {
//COMPONENT
let def2;
@@ -3,11 +3,11 @@
exports[`props validation props are validated in dev mode (code snapshot) 1`] = `
"function anonymous(context,extra
) {
let utils = this.utils;
let utils = this.constructor.utils;
let QWeb = this.constructor;
let parent = context;
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
//COMPONENT
@@ -1,6 +1,6 @@
import { Component, Env } from "../src/component";
import { QWeb } from "../src/qweb_core";
import { EventBus } from "../src/event_bus";
import { Component, Env } from "../../src/component/component";
import { QWeb } from "../../src/qweb/qweb";
import { EventBus } from "../../src/core/event_bus";
import {
makeDeferred,
makeTestFixture,
@@ -9,7 +9,7 @@ import {
nextTick,
normalize,
editInput
} from "./helpers";
} from "../helpers";
//------------------------------------------------------------------------------
// Setup and helpers
@@ -1,6 +1,6 @@
import { Component, Env } from "../src/component";
import { makeTestFixture, makeTestEnv } from "./helpers";
import { QWeb, UTILS } from "../src/qweb_core";
import { Component, Env } from "../../src/component/component";
import { makeTestFixture, makeTestEnv } from "../helpers";
import { QWeb } from "../../src/qweb";
//------------------------------------------------------------------------------
// Setup and helpers
@@ -251,10 +251,10 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, { someProp: 1 });
QWeb.utils.validateProps(TestWidget, { someProp: 1 });
}).toThrow();
expect(() => {
UTILS.validateProps(TestWidget, { message: 1 });
QWeb.utils.validateProps(TestWidget, { message: 1 });
}).not.toThrow();
});
@@ -264,7 +264,7 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, {});
QWeb.utils.validateProps(TestWidget, {});
}).toThrow();
});
@@ -274,7 +274,7 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, { message: 1, flag: true });
QWeb.utils.validateProps(TestWidget, { message: 1, flag: true });
}).toThrow();
});
@@ -284,7 +284,7 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, { message: 1, flag: true });
QWeb.utils.validateProps(TestWidget, { message: 1, flag: true });
}).toThrow();
});
@@ -294,7 +294,7 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, { message: 1});
QWeb.utils.validateProps(TestWidget, { message: 1});
}).not.toThrow();
});
@@ -304,10 +304,10 @@ describe("props validation", () => {
}
expect(() => {
UTILS.validateProps(TestWidget, { message: undefined});
QWeb.utils.validateProps(TestWidget, { message: undefined});
}).not.toThrow();
expect(() => {
UTILS.validateProps(TestWidget, { message: null});
QWeb.utils.validateProps(TestWidget, { message: null});
}).toThrow();
});
@@ -1,4 +1,4 @@
import { EventBus } from "../src/event_bus";
import { EventBus } from "../../src/core/event_bus";
describe("event bus behaviour", () => {
test("can subscribe and be notified", () => {
@@ -1,5 +1,5 @@
import { Observer } from "../src/observer";
import { nextMicroTick } from "./helpers";
import { Observer } from "../../src/core/observer";
import { nextMicroTick } from "../helpers";
describe("observer", () => {
test("properly observe objects", () => {
+8 -7
View File
@@ -1,8 +1,9 @@
import { Env } from "../src/component";
import { EvalContext, QWeb, UTILS } from "../src/qweb_core";
import { Env } from "../src/component/component";
import { EvalContext, QWeb } from "../src/qweb/qweb";
import { patch } from "../src/vdom";
import "../src/qweb_directives";
import "../src/qweb_extensions";
import "../src/qweb/base_directives";
import "../src/qweb/extensions";
import "../src/component/directive";
export function nextMicroTick(): Promise<void> {
return Promise.resolve();
@@ -90,15 +91,15 @@ export function renderToString(qweb: QWeb, t: string, context: EvalContext = {})
// is useful for animations tests, as we hook before repaints to trigger
// animations (thanks to requestAnimationFrame). Patching nextFrame allows to
// simulate calls to this hook. One must not forget to unpatch afterwards.
let nextFrame = UTILS.nextFrame;
let nextFrame = QWeb.utils.nextFrame;
export function patchNextFrame(f: Function) {
UTILS.nextFrame = (cb: () => void) => {
QWeb.utils.nextFrame = (cb: () => void) => {
setTimeout(() => f(cb));
};
}
export function unpatchNextFrame() {
UTILS.nextFrame = nextFrame;
QWeb.utils.nextFrame = nextFrame;
}
export async function editInput(input: HTMLInputElement | HTMLTextAreaElement, value: string) {
@@ -3,7 +3,7 @@
exports[`attributes class and t-attf-class with ternary operation 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'hello ' + (context['value']?'world':'');
let c2 = [], p2 = {key:2,attrs:{class: _1}};
var vn2 = h('div', p2, c2);
@@ -14,7 +14,7 @@ exports[`attributes class and t-attf-class with ternary operation 1`] = `
exports[`attributes dynamic attribute falsy variable 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['value'];
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -25,7 +25,7 @@ exports[`attributes dynamic attribute falsy variable 1`] = `
exports[`attributes dynamic attribute with a dash 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['id'];
let c2 = [], p2 = {key:2,attrs:{\\"data-action-id\\": _1}};
var vn2 = h('div', p2, c2);
@@ -36,7 +36,7 @@ exports[`attributes dynamic attribute with a dash 1`] = `
exports[`attributes dynamic attributes 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'bar';
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -47,7 +47,7 @@ exports[`attributes dynamic attributes 1`] = `
exports[`attributes dynamic formatted attributes with a dash 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = \`Some text \${context['id']}\`;
let c2 = [], p2 = {key:2,attrs:{\\"aria-label\\": _1}};
var vn2 = h('div', p2, c2);
@@ -58,7 +58,7 @@ exports[`attributes dynamic formatted attributes with a dash 1`] = `
exports[`attributes fixed variable 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['value'];
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -69,7 +69,7 @@ exports[`attributes fixed variable 1`] = `
exports[`attributes format expression 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = (context['value']+37);
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -80,7 +80,7 @@ exports[`attributes format expression 1`] = `
exports[`attributes format expression, other format 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = (context['value']+37);
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -91,7 +91,7 @@ exports[`attributes format expression, other format 1`] = `
exports[`attributes format literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = \`bar\`;
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -102,7 +102,7 @@ exports[`attributes format literal 1`] = `
exports[`attributes format multiple 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = \`a \${context['value1']} is \${context['value2']} of \${context['value3']} ]\`;
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -113,7 +113,7 @@ exports[`attributes format multiple 1`] = `
exports[`attributes format value 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = \`b\${context['value']}r\`;
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
var vn2 = h('div', p2, c2);
@@ -124,11 +124,12 @@ exports[`attributes format value 1`] = `
exports[`attributes from object variables set previously 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = {a:'b'};
let _3 = this.utils.toObj(_2.a);
let _3 = utils.toObj(_2.a);
let c4 = [], p4 = {key:4,class:_3};
var vn4 = h('span', p4, c4);
c1.push(vn4);
@@ -139,11 +140,12 @@ exports[`attributes from object variables set previously 1`] = `
exports[`attributes from variables set previously 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'def';
let _3 = this.utils.toObj(_2);
let _3 = utils.toObj(_2);
let c4 = [], p4 = {key:4,class:_3};
var vn4 = h('span', p4, c4);
c1.push(vn4);
@@ -154,7 +156,7 @@ exports[`attributes from variables set previously 1`] = `
exports[`attributes object 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['value'];
let c2 = [], p2 = {key:2,attrs:{}};
if (_1 instanceof Array) {
@@ -172,7 +174,7 @@ exports[`attributes object 1`] = `
exports[`attributes static attributes 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'a';
var _2 = 'b';
var _3 = 'c';
@@ -185,7 +187,7 @@ exports[`attributes static attributes 1`] = `
exports[`attributes static attributes on void elements 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = '/test.jpg';
var _2 = 'Test';
let c3 = [], p3 = {key:3,attrs:{src: _1,alt: _2}};
@@ -197,7 +199,7 @@ exports[`attributes static attributes on void elements 1`] = `
exports[`attributes static attributes with dashes 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'Close';
let c2 = [], p2 = {key:2,attrs:{\\"aria-label\\": _1}};
var vn2 = h('div', p2, c2);
@@ -208,9 +210,10 @@ exports[`attributes static attributes with dashes 1`] = `
exports[`attributes t-att-class and class should combine together 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let _2 = {'hello':true};
Object.assign(_2, this.utils.toObj(context['value']))
Object.assign(_2, utils.toObj(context['value']))
let c3 = [], p3 = {key:3,class:_2};
var vn3 = h('div', p3, c3);
return vn3;
@@ -220,9 +223,10 @@ exports[`attributes t-att-class and class should combine together 1`] = `
exports[`attributes t-att-class with object 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let _2 = {'static':true};
Object.assign(_2, this.utils.toObj({a:context['b'],c:context['d'],e:context['f']}))
Object.assign(_2, utils.toObj({a:context['b'],c:context['d'],e:context['f']}))
let c3 = [], p3 = {key:3,class:_2};
var vn3 = h('div', p3, c3);
return vn3;
@@ -232,7 +236,7 @@ exports[`attributes t-att-class with object 1`] = `
exports[`attributes t-attf-class should combine with class 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'hello ' + \`world\`;
let c2 = [], p2 = {key:2,attrs:{class: _1}};
var vn2 = h('div', p2, c2);
@@ -243,7 +247,7 @@ exports[`attributes t-attf-class should combine with class 1`] = `
exports[`attributes tuple literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = ['foo','bar'];
let c2 = [], p2 = {key:2,attrs:{}};
if (_1 instanceof Array) {
@@ -261,7 +265,7 @@ exports[`attributes tuple literal 1`] = `
exports[`attributes tuple variable 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['value'];
let c2 = [], p2 = {key:2,attrs:{}};
if (_1 instanceof Array) {
@@ -279,7 +283,7 @@ exports[`attributes tuple variable 1`] = `
exports[`debugging t-debug 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
debugger;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
@@ -297,7 +301,7 @@ exports[`debugging t-debug 1`] = `
exports[`debugging t-log 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 42;
@@ -310,7 +314,7 @@ exports[`foreach does not pollute the rendering context 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = [1];
@@ -340,7 +344,7 @@ exports[`foreach iterate on items (on a element node) 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = [1,2];
@@ -373,7 +377,7 @@ exports[`foreach iterate on items 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = [3,2,1];
@@ -415,7 +419,7 @@ exports[`foreach iterate, dict param 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['value'];
@@ -457,7 +461,7 @@ exports[`foreach iterate, position 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = Array(5);
@@ -496,7 +500,7 @@ exports[`foreach warn if no key in some case 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = [1,2];
@@ -528,7 +532,7 @@ exports[`foreach warn if no key in some case 1`] = `
exports[`loading templates can initialize qweb with a string 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
c1.push({text: \`jupiler\`});
@@ -539,7 +543,7 @@ exports[`loading templates can initialize qweb with a string 1`] = `
exports[`loading templates can load a few templates from a xml string 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('ul', p1, c1);
let c2 = [], p2 = {key:2};
@@ -557,8 +561,9 @@ exports[`loading templates can load a few templates from a xml string 1`] = `
exports[`misc global 1`] = `
"function anonymous(context,extra
) {
let utils = this.constructor.utils;
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = [4,5,6];
@@ -624,7 +629,7 @@ exports[`misc global 1`] = `
c1.push(vn21);
var _22 = context['toto'];
if (_22 || _22 === 0) {
var frag23 = this.utils.getFragment(_22)
var frag23 = utils.getFragment(_22)
var p24 = {hook: {
insert: n => n.elm.parentNode.replaceChild(frag23, n.elm),
}};
@@ -640,7 +645,7 @@ exports[`misc global 1`] = `
exports[`special cases for some boolean html attributes/properties input type= checkbox, with t-att-checked 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = 'checkbox';
var _2 = context['flag'];
let c3 = [], p3 = {key:3,attrs:{type: _1,checked: _2},props:{checked: _2}};
@@ -652,7 +657,7 @@ exports[`special cases for some boolean html attributes/properties input type= c
exports[`special cases for some boolean html attributes/properties various boolean html attributes 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'checkbox';
@@ -692,7 +697,7 @@ exports[`special cases for some boolean html attributes/properties various boole
exports[`static templates div with a span child node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -706,7 +711,7 @@ exports[`static templates div with a span child node 1`] = `
exports[`static templates div with a text node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
c1.push({text: \`word\`});
@@ -717,7 +722,7 @@ exports[`static templates div with a text node 1`] = `
exports[`static templates empty div 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
return vn1;
@@ -727,7 +732,7 @@ exports[`static templates empty div 1`] = `
exports[`static templates simple dynamic value 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var _1 = context['text'];
if (_1 || _1 === 0) {
var vn2 = {text: _1};
@@ -739,7 +744,7 @@ exports[`static templates simple dynamic value 1`] = `
exports[`static templates simple string 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var vn1 = {text: \`hello vdom\`};
return vn1;
}"
@@ -748,7 +753,7 @@ exports[`static templates simple string 1`] = `
exports[`static templates simple string, with some dynamic value 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var vn1 = {text: \`hello \`};
var _2 = context['text'];
if (_2 || _2 === 0) {
@@ -761,7 +766,7 @@ exports[`static templates simple string, with some dynamic value 1`] = `
exports[`t-call (template calling basic caller 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
c1.push({text: \`ok\`});
@@ -772,7 +777,7 @@ exports[`t-call (template calling basic caller 1`] = `
exports[`t-call (template calling inherit context 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 1;
@@ -786,7 +791,7 @@ exports[`t-call (template calling inherit context 1`] = `
exports[`t-call (template calling scoped parameters 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
{
@@ -804,7 +809,7 @@ exports[`t-call (template calling scoped parameters 1`] = `
exports[`t-call (template calling with unused body 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c2 = [], p2 = {key:2};
var vn2 = h('div', p2, c2);
c2.push({text: \`ok\`});
@@ -815,7 +820,7 @@ exports[`t-call (template calling with unused body 1`] = `
exports[`t-call (template calling with unused setbody 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
{
let _1 = 3;
let c2 = [], p2 = {key:2};
@@ -829,7 +834,7 @@ exports[`t-call (template calling with unused setbody 1`] = `
exports[`t-call (template calling with used body 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c2 = [], p2 = {key:2};
var vn2 = h('h1', p2, c2);
c2.push({text: \`ok\`});
@@ -840,7 +845,7 @@ exports[`t-call (template calling with used body 1`] = `
exports[`t-call (template calling with used set body 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
{
@@ -856,7 +861,7 @@ exports[`t-call (template calling with used set body 1`] = `
exports[`t-esc escaping on a node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('span', p1, c1);
var _2 = 'ok';
@@ -870,7 +875,7 @@ exports[`t-esc escaping on a node 1`] = `
exports[`t-esc escaping on a node with a body 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('span', p1, c1);
var _2 = 'ok';
@@ -886,7 +891,7 @@ exports[`t-esc escaping on a node with a body 1`] = `
exports[`t-esc escaping on a node with a body, as a default 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('span', p1, c1);
var _2 = context['var'];
@@ -902,7 +907,7 @@ exports[`t-esc escaping on a node with a body, as a default 1`] = `
exports[`t-esc literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
var _2 = 'ok';
@@ -916,7 +921,7 @@ exports[`t-esc literal 1`] = `
exports[`t-esc variable 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
var _2 = context['var'];
@@ -930,7 +935,7 @@ exports[`t-esc variable 1`] = `
exports[`t-if boolean value condition elif 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
if (context['color']=='black') {
@@ -952,7 +957,7 @@ exports[`t-if boolean value condition elif 1`] = `
exports[`t-if boolean value condition else 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -976,7 +981,7 @@ exports[`t-if boolean value condition else 1`] = `
exports[`t-if boolean value condition false else 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1000,7 +1005,7 @@ exports[`t-if boolean value condition false else 1`] = `
exports[`t-if boolean value condition missing 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
if (context['condition']) {
@@ -1013,7 +1018,7 @@ exports[`t-if boolean value condition missing 1`] = `
exports[`t-if boolean value false condition 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
if (context['condition']) {
@@ -1026,7 +1031,7 @@ exports[`t-if boolean value false condition 1`] = `
exports[`t-if boolean value true condition 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
if (context['condition']) {
@@ -1039,7 +1044,7 @@ exports[`t-if boolean value true condition 1`] = `
exports[`t-if can use some boolean operators in expressions 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
if (context['cond1']&&context['cond2']) {
@@ -1073,7 +1078,7 @@ exports[`t-if can use some boolean operators in expressions 1`] = `
exports[`t-key can use t-key directive on a node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:context['beer'].id};
var vn1 = h('div', p1, c1);
var _2 = context['beer'].name;
@@ -1088,7 +1093,7 @@ exports[`t-key t-key directive in a list 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('ul', p1, c1);
var _2 = context['beers'];
@@ -1123,7 +1128,7 @@ exports[`t-on can bind event handler 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['add']) {
@@ -1140,7 +1145,7 @@ exports[`t-on can bind handlers with arguments 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['add']) {
@@ -1156,7 +1161,7 @@ exports[`t-on can bind handlers with empty object (with non empty inner string)
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['doSomething']) {
@@ -1172,7 +1177,7 @@ exports[`t-on can bind handlers with empty object 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['doSomething']) {
@@ -1189,7 +1194,7 @@ exports[`t-on can bind handlers with loop variable as argument 1`] = `
) {
let owner = context;
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('ul', p1, c1);
var _2 = ['someval'];
@@ -1226,7 +1231,7 @@ exports[`t-on can bind handlers with object arguments 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['add']) {
@@ -1242,7 +1247,7 @@ exports[`t-on can bind two event handlers 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['handleClick']) {
@@ -1264,7 +1269,7 @@ exports[`t-on handler is bound to proper owner 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1,on:{}};
var vn1 = h('button', p1, c1);
if (!context['add']) {
@@ -1281,7 +1286,7 @@ exports[`t-on t-on with prevent and self modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1304,7 +1309,7 @@ exports[`t-on t-on with prevent and/or stop modifiers 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1342,7 +1347,7 @@ exports[`t-on t-on with self and prevent modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1365,7 +1370,7 @@ exports[`t-on t-on with self modifier 1`] = `
"function anonymous(context,extra
) {
let owner = context;
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2,on:{}};
@@ -1399,12 +1404,13 @@ exports[`t-on t-on with self modifier 1`] = `
exports[`t-raw literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
var _2 = 'ok';
if (_2 || _2 === 0) {
var frag3 = this.utils.getFragment(_2)
var frag3 = utils.getFragment(_2)
var p4 = {hook: {
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
}};
@@ -1418,12 +1424,13 @@ exports[`t-raw literal 1`] = `
exports[`t-raw not escaping 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['var'];
if (_2 || _2 === 0) {
var frag3 = this.utils.getFragment(_2)
var frag3 = utils.getFragment(_2)
var p4 = {hook: {
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
}};
@@ -1437,7 +1444,8 @@ exports[`t-raw not escaping 1`] = `
exports[`t-raw t-raw and another sibling node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1446,7 +1454,7 @@ exports[`t-raw t-raw and another sibling node 1`] = `
c2.push({text: \`hello\`});
var _3 = context['var'];
if (_3 || _3 === 0) {
var frag4 = this.utils.getFragment(_3)
var frag4 = utils.getFragment(_3)
var p5 = {hook: {
insert: n => n.elm.parentNode.replaceChild(frag4, n.elm),
}};
@@ -1460,12 +1468,13 @@ exports[`t-raw t-raw and another sibling node 1`] = `
exports[`t-raw variable 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
let utils = this.constructor.utils;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('span', p1, c1);
var _2 = context['var'];
if (_2 || _2 === 0) {
var frag3 = this.utils.getFragment(_2)
var frag3 = utils.getFragment(_2)
var p4 = {hook: {
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
}};
@@ -1479,7 +1488,7 @@ exports[`t-raw variable 1`] = `
exports[`t-ref can get a dynamic ref on a node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1498,7 +1507,7 @@ exports[`t-ref can get a dynamic ref on a node 1`] = `
exports[`t-ref can get a ref on a node 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1518,7 +1527,7 @@ exports[`t-ref refs in a loop 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['items'];
@@ -1556,7 +1565,7 @@ exports[`t-ref refs in a loop 1`] = `
exports[`t-set evaluate value expression 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 1+2;
@@ -1570,7 +1579,7 @@ exports[`t-set evaluate value expression 1`] = `
exports[`t-set evaluate value expression, part 2 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['somevariable']+2;
@@ -1584,7 +1593,7 @@ exports[`t-set evaluate value expression, part 2 1`] = `
exports[`t-set set from attribute literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 'ok';
@@ -1598,7 +1607,7 @@ exports[`t-set set from attribute literal 1`] = `
exports[`t-set set from attribute lookup 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['value'];
@@ -1612,7 +1621,7 @@ exports[`t-set set from attribute lookup 1`] = `
exports[`t-set set from body literal 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
var vn1 = {text: \`ok\`};
return vn1;
}"
@@ -1621,7 +1630,7 @@ exports[`t-set set from body literal 1`] = `
exports[`t-set set from body lookup 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['value'];
@@ -1635,7 +1644,7 @@ exports[`t-set set from body lookup 1`] = `
exports[`t-set set from empty body 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
return vn1;
@@ -1645,7 +1654,7 @@ exports[`t-set set from empty body 1`] = `
exports[`t-set t-set and t-if 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['value'];
@@ -1659,7 +1668,7 @@ exports[`t-set t-set and t-if 1`] = `
exports[`t-set t-set evaluates an expression only once 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = context['value']+' artois';
@@ -1677,7 +1686,7 @@ exports[`t-set t-set should reuse variable if possible 1`] = `
"function anonymous(context,extra
) {
context = Object.create(context);
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 1;
@@ -1714,7 +1723,7 @@ exports[`t-set t-set should reuse variable if possible 1`] = `
exports[`t-set value priority 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
var _2 = 1;
@@ -1728,7 +1737,7 @@ exports[`t-set value priority 1`] = `
exports[`whitespace handling consecutives whitespaces are condensed into a single space 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
c1.push({text: \` abc \`});
@@ -1739,7 +1748,7 @@ exports[`whitespace handling consecutives whitespaces are condensed into a singl
exports[`whitespace handling nothing is done in pre tags 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('pre', p1, c1);
c1.push({text: \` \`});
@@ -1750,7 +1759,7 @@ exports[`whitespace handling nothing is done in pre tags 1`] = `
exports[`whitespace handling nothing is done in pre tags 2`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('pre', p1, c1);
c1.push({text: \`
@@ -1763,7 +1772,7 @@ exports[`whitespace handling nothing is done in pre tags 2`] = `
exports[`whitespace handling nothing is done in pre tags 3`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('pre', p1, c1);
c1.push({text: \`
@@ -1776,7 +1785,7 @@ exports[`whitespace handling nothing is done in pre tags 3`] = `
exports[`whitespace handling white space only text nodes are condensed into a single space 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
c1.push({text: \` \`});
@@ -1787,7 +1796,7 @@ exports[`whitespace handling white space only text nodes are condensed into a si
exports[`whitespace handling whitespace only text nodes with newlines are removed 1`] = `
"function anonymous(context,extra
) {
var h = this.utils.h;
var h = this.h;
let c1 = [], p1 = {key:1};
var vn1 = h('div', p1, c1);
let c2 = [], p2 = {key:2};
@@ -1,5 +1,5 @@
import { QWeb } from "../src/qweb_core";
import { normalize, renderToDOM, renderToString, trim } from "./helpers";
import { QWeb } from "../../src/qweb/index";
import { normalize, renderToDOM, renderToString, trim } from "../helpers";
//------------------------------------------------------------------------------
// Setup and helpers
@@ -1,4 +1,4 @@
import { compileExpr, tokenize } from "../src/qweb_expressions";
import { compileExpr, tokenize } from "../../src/qweb/expression_parser";
describe("tokenizer", () => {
test("simple tokens", () => {
@@ -1,553 +1,10 @@
import { Component, Env } from "../src/component";
import { Store, ConnectedComponent } from "../src/store";
import { makeTestFixture, makeTestEnv, nextMicroTick, nextTick } from "./helpers";
import { misc } from "../src";
import { core } from "../../src";
import { Component, Env } from "../../src/component/component";
import { ConnectedComponent } from "../../src/store/connected_component";
import { Store } from "../../src/store/store";
import { makeTestEnv, makeTestFixture, nextTick } from "../helpers";
const Observer = misc.Observer;
describe("basic use", () => {
test("commit a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
store.commit("inc", 14);
expect(store.state.n).toBe(15);
});
test("dispatch an action", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const actions = {
inc({ commit }, delta) {
commit("inc", delta);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("inc", 14);
expect(store.state.n).toBe(15);
});
test("dispatch an action + commit a mutation with positional arguments", () => {
const state = { n1: 1, n2: 1, n3: 1 };
const mutations = {
batchInc({ state }, delta1, delta2, delta3) {
state.n1 += delta1;
state.n2 += delta2;
state.n3 += delta3;
}
};
const actions = {
batchInc({ commit }, delta1, delta2, delta3) {
commit("batchInc", delta1, delta2, delta3);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n1).toBe(1);
expect(store.state.n2).toBe(1);
expect(store.state.n3).toBe(1);
store.dispatch("batchInc", 14, 30, 88);
expect(store.state.n1).toBe(15);
expect(store.state.n2).toBe(31);
expect(store.state.n3).toBe(89);
});
test("modifying state outside of mutations trigger error", () => {
const state = { n: 1 };
const actions = {
inc({ state }) {
state.n++;
}
};
const store = new Store({ state, mutations: {}, actions });
expect(() => store.dispatch("inc")).toThrow();
expect(() => (store.state.n = 15)).toThrow();
});
test("can dispatch an action in an action", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const actions = {
inc({ commit }, delta) {
commit("inc", delta);
},
inc100({ dispatch }) {
dispatch("inc", 100);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("inc100");
expect(store.state.n).toBe(101);
});
test("can commit a mutation in a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }) {
state.n++;
},
inc10({ commit }) {
for (let i = 0; i < 10; i++) {
commit("inc");
}
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
store.commit("inc10");
expect(store.state.n).toBe(11);
});
test("return data from committing a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }) {
return ++state.n;
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
const res = store.commit("inc");
expect(store.state.n).toBe(2);
expect(res).toBe(2);
});
test("dispatch allow synchronizing between actions", async () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
},
setN({ state }, n) {
state.n = n;
}
};
const actions = {
async dosomething({ commit, dispatch }) {
await dispatch("setTo10");
commit("inc", 3);
},
async setTo10({ commit }) {
await Promise.resolve();
commit("setN", 10);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("dosomething");
expect(store.state.n).toBe(1);
await nextTick();
expect(store.state.n).toBe(13);
});
test("env is given to actions", () => {
expect.assertions(1);
const someEnv = <Env>{};
const actions = {
someaction({ env }) {
expect(env).toBe(someEnv);
}
};
const store = new Store({ state: {}, actions, env: someEnv });
store.dispatch("someaction");
});
test("can have getters from store", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect(store.getters).toBeDefined();
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
});
test("getters are memoized", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
let n = 0;
const getters = {
beerTasterName({ state }, beerID) {
n++;
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
n++;
return state.beers[1].name;
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(2);
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(2);
});
test("getters taking Array as argument aren't memoized", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
}
};
let n = 0;
const getters = {
getBeerNames({ state }, beerIDs) {
n++;
return beerIDs.map(beerID => {
return state.beers[beerID].name;
});
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect((<any>store.getters).getBeerNames([1])).toEqual(["bertinchamps"]);
expect(n).toBe(1);
expect((<any>store.getters).getBeerNames([1])).toEqual(["bertinchamps"]);
expect(n).toBe(2);
});
test("getters cache is nuked on store changes", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
},
2: {
id: 2,
name: "gery"
}
}
};
const mutations = {
changeTaster({ state }, { beerID, tasterID }) {
state.beers[beerID].tasterID = tasterID;
}
};
let n = 0;
const getters = {
beerTasterName({ state }, beerID) {
n++;
return state.tasters[state.beers[beerID].tasterID].name;
}
};
const store = new Store({
state,
mutations: mutations,
actions: {},
getters
});
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(1);
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(1);
store.commit("changeTaster", { beerID: 1, tasterID: 2 });
await nextTick();
expect((<any>store.getters).beerTasterName(1)).toBe("gery");
expect(n).toBe(2);
});
test("getters cache is disabled during a mutation", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps"
}
}
};
const mutations = {
renameBeer({ state, getters }, beerID) {
expect(getters.beerName(beerID)).toBe("bertinchamps");
state.beers[1].name = "chouffe";
expect(getters.beerName(beerID)).toBe("chouffe");
}
};
let n = 0;
const getters = {
beerName({ state }, beerID) {
n++;
return state.beers[beerID].name;
}
};
const store = new Store({
state,
mutations: mutations,
actions: {},
getters
});
store.commit("renameBeer", 1);
expect((<any>store.getters).beerName(1)).toBe("chouffe");
await nextTick();
expect(n).toBe(3);
});
test("getters given to actions", async () => {
expect.assertions(3);
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const actions = {
action({ getters }) {
expect(getters).toBeDefined();
expect(getters.bestBeerName()).toBe("bertinchamps");
expect(getters.beerTasterName(1)).toBe("aaron");
}
};
const store = new Store({ state, mutations: {}, actions, getters });
store.dispatch("action");
});
test("getters given to mutations", async () => {
expect.assertions(3);
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const mutations = {
mutation({ getters }) {
expect(getters).toBeDefined();
expect(getters.bestBeerName()).toBe("bertinchamps");
expect(getters.beerTasterName(1)).toBe("aaron");
}
};
const store = new Store({ state, mutations, actions: {}, getters });
store.commit("mutation");
});
test("can use getters inside a getter", () => {
const getters = {
a({ getters }) {
return `${getters.b()}${getters.c(1)}`;
},
b() {
return "b";
},
c({}, i) {
return `c${i}`;
}
};
const store = new Store({ getters });
expect(store.getters.a()).toBe("bc1");
});
});
describe("advanced state properties", () => {
test("state in the store is reference equal after mutation", async () => {
const state = {};
const mutations = {
donothing() {}
};
const store = new Store({ state, mutations });
expect(store.state).toBe(state);
store.commit("donothing");
expect(store.state).toBe(state);
});
test("can use array properties in mutations", () => {
expect.assertions(3);
const state = { a: [1, 2, 3] };
const mutations = {
m({ state }) {
expect(state.a.length).toBe(3);
const l = state.a.push(53);
expect(l).toBe(4);
}
};
const store = new Store({ state, mutations });
store.commit("m");
expect(store.state.a).toEqual([1, 2, 3, 53]);
});
test("can use object assign in store", async () => {
const mutations = {
dosomething({ state }) {
Object.assign(state.westmalle, { a: 3, b: 4 });
}
};
const store = new Store({
state: { westmalle: { a: 1, b: 2 } },
mutations
});
store.commit("dosomething");
expect(store.state.westmalle).toEqual({ a: 3, b: 4 });
});
test("aku reactive store state 1", async () => {
const mutations = {
inc({ state }) {
state.counter++;
}
};
const state = { counter: 0 };
const store = new Store({ state, mutations });
expect(store.state.counter).toBe(0);
store.commit("inc", {});
expect(store.state.counter).toBe(1);
});
});
describe("updates triggered by the store", () => {
test("multiple commits trigger one update", async () => {
let updateCounter = 0;
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const store = new Store({ state, mutations });
store.on("update", null, () => updateCounter++);
store.commit("inc", 14);
expect(updateCounter).toBe(0);
store.commit("inc", 50);
expect(updateCounter).toBe(0);
await nextMicroTick();
expect(updateCounter).toBe(1);
});
test("empty commits do not trigger updates", async () => {
let updateCounter = 0;
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
},
noop() {},
noop2({ state }) {
const val = state.n;
state.n = val;
}
};
const store = new Store({ state, mutations });
store.on("update", null, () => updateCounter++);
store.commit("noop");
await nextMicroTick();
expect(updateCounter).toBe(0);
store.commit("inc", 50);
await nextMicroTick();
expect(updateCounter).toBe(1);
store.commit("noop2");
await nextMicroTick();
expect(updateCounter).toBe(1);
});
});
const Observer = core.Observer;
describe("connecting a component to store", () => {
let fixture: HTMLElement;
@@ -1301,5 +758,4 @@ describe("connecting a component to store", () => {
expect(fixture.innerHTML).toBe("<div>b</div>");
expect(steps).toEqual(["willpatch", "patched"]);
});
});
+549
View File
@@ -0,0 +1,549 @@
import { Env } from "../../src/component/component";
import { Store } from "../../src/store/store";
import { nextMicroTick, nextTick } from "../helpers";
describe("basic use", () => {
test("commit a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
store.commit("inc", 14);
expect(store.state.n).toBe(15);
});
test("dispatch an action", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const actions = {
inc({ commit }, delta) {
commit("inc", delta);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("inc", 14);
expect(store.state.n).toBe(15);
});
test("dispatch an action + commit a mutation with positional arguments", () => {
const state = { n1: 1, n2: 1, n3: 1 };
const mutations = {
batchInc({ state }, delta1, delta2, delta3) {
state.n1 += delta1;
state.n2 += delta2;
state.n3 += delta3;
}
};
const actions = {
batchInc({ commit }, delta1, delta2, delta3) {
commit("batchInc", delta1, delta2, delta3);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n1).toBe(1);
expect(store.state.n2).toBe(1);
expect(store.state.n3).toBe(1);
store.dispatch("batchInc", 14, 30, 88);
expect(store.state.n1).toBe(15);
expect(store.state.n2).toBe(31);
expect(store.state.n3).toBe(89);
});
test("modifying state outside of mutations trigger error", () => {
const state = { n: 1 };
const actions = {
inc({ state }) {
state.n++;
}
};
const store = new Store({ state, mutations: {}, actions });
expect(() => store.dispatch("inc")).toThrow();
expect(() => (store.state.n = 15)).toThrow();
});
test("can dispatch an action in an action", () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const actions = {
inc({ commit }, delta) {
commit("inc", delta);
},
inc100({ dispatch }) {
dispatch("inc", 100);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("inc100");
expect(store.state.n).toBe(101);
});
test("can commit a mutation in a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }) {
state.n++;
},
inc10({ commit }) {
for (let i = 0; i < 10; i++) {
commit("inc");
}
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
store.commit("inc10");
expect(store.state.n).toBe(11);
});
test("return data from committing a mutation", () => {
const state = { n: 1 };
const mutations = {
inc({ state }) {
return ++state.n;
}
};
const store = new Store({ state, mutations });
expect(store.state.n).toBe(1);
const res = store.commit("inc");
expect(store.state.n).toBe(2);
expect(res).toBe(2);
});
test("dispatch allow synchronizing between actions", async () => {
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
},
setN({ state }, n) {
state.n = n;
}
};
const actions = {
async dosomething({ commit, dispatch }) {
await dispatch("setTo10");
commit("inc", 3);
},
async setTo10({ commit }) {
await Promise.resolve();
commit("setN", 10);
}
};
const store = new Store({ state, mutations, actions });
expect(store.state.n).toBe(1);
store.dispatch("dosomething");
expect(store.state.n).toBe(1);
await nextTick();
expect(store.state.n).toBe(13);
});
test("env is given to actions", () => {
expect.assertions(1);
const someEnv = <Env>{};
const actions = {
someaction({ env }) {
expect(env).toBe(someEnv);
}
};
const store = new Store({ state: {}, actions, env: someEnv });
store.dispatch("someaction");
});
test("can have getters from store", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect(store.getters).toBeDefined();
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
});
test("getters are memoized", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
let n = 0;
const getters = {
beerTasterName({ state }, beerID) {
n++;
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
n++;
return state.beers[1].name;
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(2);
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(2);
});
test("getters taking Array as argument aren't memoized", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
}
};
let n = 0;
const getters = {
getBeerNames({ state }, beerIDs) {
n++;
return beerIDs.map(beerID => {
return state.beers[beerID].name;
});
}
};
const store = new Store({ state, mutations: {}, actions: {}, getters });
expect((<any>store.getters).getBeerNames([1])).toEqual(["bertinchamps"]);
expect(n).toBe(1);
expect((<any>store.getters).getBeerNames([1])).toEqual(["bertinchamps"]);
expect(n).toBe(2);
});
test("getters cache is nuked on store changes", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
},
2: {
id: 2,
name: "gery"
}
}
};
const mutations = {
changeTaster({ state }, { beerID, tasterID }) {
state.beers[beerID].tasterID = tasterID;
}
};
let n = 0;
const getters = {
beerTasterName({ state }, beerID) {
n++;
return state.tasters[state.beers[beerID].tasterID].name;
}
};
const store = new Store({
state,
mutations: mutations,
actions: {},
getters
});
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(1);
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
expect(n).toBe(1);
store.commit("changeTaster", { beerID: 1, tasterID: 2 });
await nextTick();
expect((<any>store.getters).beerTasterName(1)).toBe("gery");
expect(n).toBe(2);
});
test("getters cache is disabled during a mutation", async () => {
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps"
}
}
};
const mutations = {
renameBeer({ state, getters }, beerID) {
expect(getters.beerName(beerID)).toBe("bertinchamps");
state.beers[1].name = "chouffe";
expect(getters.beerName(beerID)).toBe("chouffe");
}
};
let n = 0;
const getters = {
beerName({ state }, beerID) {
n++;
return state.beers[beerID].name;
}
};
const store = new Store({
state,
mutations: mutations,
actions: {},
getters
});
store.commit("renameBeer", 1);
expect((<any>store.getters).beerName(1)).toBe("chouffe");
await nextTick();
expect(n).toBe(3);
});
test("getters given to actions", async () => {
expect.assertions(3);
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const actions = {
action({ getters }) {
expect(getters).toBeDefined();
expect(getters.bestBeerName()).toBe("bertinchamps");
expect(getters.beerTasterName(1)).toBe("aaron");
}
};
const store = new Store({ state, mutations: {}, actions, getters });
store.dispatch("action");
});
test("getters given to mutations", async () => {
expect.assertions(3);
const state = {
beers: {
1: {
id: 1,
name: "bertinchamps",
tasterID: 1
}
},
tasters: {
1: {
id: 1,
name: "aaron"
}
}
};
const getters = {
beerTasterName({ state }, beerID) {
return state.tasters[state.beers[beerID].tasterID].name;
},
bestBeerName({ state }) {
return state.beers[1].name;
}
};
const mutations = {
mutation({ getters }) {
expect(getters).toBeDefined();
expect(getters.bestBeerName()).toBe("bertinchamps");
expect(getters.beerTasterName(1)).toBe("aaron");
}
};
const store = new Store({ state, mutations, actions: {}, getters });
store.commit("mutation");
});
test("can use getters inside a getter", () => {
const getters = {
a({ getters }) {
return `${getters.b()}${getters.c(1)}`;
},
b() {
return "b";
},
c({}, i) {
return `c${i}`;
}
};
const store = new Store({ getters });
expect(store.getters.a()).toBe("bc1");
});
});
describe("advanced state properties", () => {
test("state in the store is reference equal after mutation", async () => {
const state = {};
const mutations = {
donothing() {}
};
const store = new Store({ state, mutations });
expect(store.state).toBe(state);
store.commit("donothing");
expect(store.state).toBe(state);
});
test("can use array properties in mutations", () => {
expect.assertions(3);
const state = { a: [1, 2, 3] };
const mutations = {
m({ state }) {
expect(state.a.length).toBe(3);
const l = state.a.push(53);
expect(l).toBe(4);
}
};
const store = new Store({ state, mutations });
store.commit("m");
expect(store.state.a).toEqual([1, 2, 3, 53]);
});
test("can use object assign in store", async () => {
const mutations = {
dosomething({ state }) {
Object.assign(state.westmalle, { a: 3, b: 4 });
}
};
const store = new Store({
state: { westmalle: { a: 1, b: 2 } },
mutations
});
store.commit("dosomething");
expect(store.state.westmalle).toEqual({ a: 3, b: 4 });
});
test("aku reactive store state 1", async () => {
const mutations = {
inc({ state }) {
state.counter++;
}
};
const state = { counter: 0 };
const store = new Store({ state, mutations });
expect(store.state.counter).toBe(0);
store.commit("inc", {});
expect(store.state.counter).toBe(1);
});
});
describe("updates triggered by the store", () => {
test("multiple commits trigger one update", async () => {
let updateCounter = 0;
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
}
};
const store = new Store({ state, mutations });
store.on("update", null, () => updateCounter++);
store.commit("inc", 14);
expect(updateCounter).toBe(0);
store.commit("inc", 50);
expect(updateCounter).toBe(0);
await nextMicroTick();
expect(updateCounter).toBe(1);
});
test("empty commits do not trigger updates", async () => {
let updateCounter = 0;
const state = { n: 1 };
const mutations = {
inc({ state }, delta) {
state.n += delta;
},
noop() {},
noop2({ state }) {
const val = state.n;
state.n = val;
}
};
const store = new Store({ state, mutations });
store.on("update", null, () => updateCounter++);
store.commit("noop");
await nextMicroTick();
expect(updateCounter).toBe(0);
store.commit("inc", 50);
await nextMicroTick();
expect(updateCounter).toBe(1);
store.commit("noop2");
await nextMicroTick();
expect(updateCounter).toBe(1);
});
});
+2 -1
View File
@@ -1,4 +1,5 @@
import { h, patch, init } from "../src/vdom";
import { h, patch } from "../src/vdom";
import { init } from "../src/vdom/vdom";
function map(list, fn) {
var ret: any[] = [];