mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] components: improve props validation
to be able to specify that additional props are allowed
This commit is contained in:
committed by
Aaron Bohy
parent
cc1eea0945
commit
7e40fa300a
@@ -96,6 +96,58 @@ exports[`default props default values are also set whenever component is updated
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`props validation can specify that additional props are allowed (array) 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
const props1 = {message: 'm',otherProp: 'o'}
|
||||
helpers.validateProps(\`Child\`, props1, ctx)
|
||||
return component(\`Child\`, props1, key + \`__2\`, node, ctx);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`props validation can specify that additional props are allowed (array) 2`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<div>hey</div>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
return block1();
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`props validation can specify that additional props are allowed (object) 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
const props1 = {message: 'm',otherProp: 'o'}
|
||||
helpers.validateProps(\`Child\`, props1, ctx)
|
||||
return component(\`Child\`, props1, key + \`__2\`, node, ctx);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`props validation can specify that additional props are allowed (object) 2`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<div>hey</div>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
return block1();
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`props validation can validate a prop with multiple types 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
|
||||
@@ -723,6 +723,36 @@ describe("props validation", () => {
|
||||
expect(error!).toBeDefined();
|
||||
expect(error!.message).toBe("Missing props 'mandatory' (component 'Child')");
|
||||
});
|
||||
|
||||
test("can specify that additional props are allowed (array)", async () => {
|
||||
class Child extends Component {
|
||||
static props = ["message", "*"];
|
||||
static template = xml`<div>hey</div>`;
|
||||
}
|
||||
class Parent extends Component {
|
||||
static template = xml`<Child message="'m'" otherProp="'o'"/>`;
|
||||
static components = { Child };
|
||||
}
|
||||
|
||||
await expect(mount(Parent, fixture, { dev: true })).resolves.toEqual(expect.anything());
|
||||
});
|
||||
|
||||
test("can specify that additional props are allowed (object)", async () => {
|
||||
class Child extends Component {
|
||||
static props = {
|
||||
message: { type: String },
|
||||
"*": true,
|
||||
};
|
||||
static template = xml`<div>hey</div>`;
|
||||
}
|
||||
class Parent extends Component {
|
||||
static template = xml`<Child message="'m'" otherProp="'o'"/>`;
|
||||
static components = { Child };
|
||||
}
|
||||
|
||||
// we just check that it doesn't throw
|
||||
await expect(mount(Parent, fixture, { dev: true })).resolves.toEqual(expect.anything());
|
||||
});
|
||||
});
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user