mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] app: improve API, small refactoring
This commit is contained in:
committed by
Aaron Bohy
parent
772c275bd4
commit
aad6b806ba
+14
@@ -15,6 +15,20 @@ exports[`app App supports env with getters/setters 1`] = `
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`app can configure an app with props 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<div><block-text-0/></div>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let d1 = ctx['props'].value;
|
||||
return block1([d1]);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`app destroy remove the widget from the DOM 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
@@ -40,8 +40,7 @@ describe("app", () => {
|
||||
static template = xml`<div><t t-esc="env.someVal" /> <t t-esc="Object.keys(env.services)" /></div>`;
|
||||
}
|
||||
|
||||
const app = new App(SomeComponent);
|
||||
app.configure({ env });
|
||||
const app = new App(SomeComponent, { env });
|
||||
const comp = await app.mount(fixture);
|
||||
expect(fixture.innerHTML).toBe("<div>maggot serv1</div>");
|
||||
someVal = "brain";
|
||||
@@ -50,4 +49,14 @@ describe("app", () => {
|
||||
await nextTick();
|
||||
expect(fixture.innerHTML).toBe("<div>brain serv1,serv2</div>");
|
||||
});
|
||||
|
||||
test("can configure an app with props", async () => {
|
||||
class SomeComponent extends Component {
|
||||
static template = xml`<div t-esc="props.value"/>`;
|
||||
}
|
||||
|
||||
const app = new App(SomeComponent, { props: { value: 333 } });
|
||||
await app.mount(fixture);
|
||||
expect(fixture.innerHTML).toBe("<div>333</div>");
|
||||
});
|
||||
});
|
||||
@@ -1060,6 +1060,19 @@ exports[`mount targets default mount option is 'last-child' 1`] = `
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`mount targets mount function: can mount a component (with default position='last-child') 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<div>app</div>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
return block1();
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`support svg components add proper namespace to svg 1`] = `
|
||||
"function anonymous(bdom, helpers
|
||||
) {
|
||||
|
||||
@@ -41,7 +41,7 @@ describe("basics", () => {
|
||||
static template = xml`<span><t t-esc="props.value"/></span>`;
|
||||
}
|
||||
|
||||
const app = new App(Test, { value: 3 });
|
||||
const app = new App(Test, { props: { value: 3 } });
|
||||
const component = await app.mount(fixture);
|
||||
|
||||
expect(fixture.innerHTML).toBe("<span>3</span>");
|
||||
@@ -125,7 +125,7 @@ describe("basics", () => {
|
||||
}
|
||||
}
|
||||
|
||||
const app = new App(Test, p);
|
||||
const app = new App(Test, { props: p });
|
||||
await app.mount(fixture);
|
||||
});
|
||||
|
||||
@@ -819,6 +819,16 @@ describe("mount targets", () => {
|
||||
expect(fixture.innerHTML).toBe("<span></span><div>app</div>");
|
||||
});
|
||||
|
||||
test("mount function: can mount a component (with default position='last-child')", async () => {
|
||||
class Root extends Component {
|
||||
static template = xml`<div>app</div>`;
|
||||
}
|
||||
const span = document.createElement("span");
|
||||
fixture.appendChild(span);
|
||||
await mount(Root, fixture, { position: "last-child" });
|
||||
expect(fixture.innerHTML).toBe("<span></span><div>app</div>");
|
||||
});
|
||||
|
||||
test("default mount option is 'last-child'", async () => {
|
||||
class Root extends Component {
|
||||
static template = xml`<div>app</div>`;
|
||||
|
||||
@@ -623,7 +623,7 @@ test("rendering component again in next microtick", async () => {
|
||||
}
|
||||
|
||||
const env = { config: { flag: false } };
|
||||
await new App(Parent).configure({ env }).mount(fixture);
|
||||
await mount(Parent, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("<div><button>Click</button></div>");
|
||||
expect([
|
||||
"Parent:setup",
|
||||
|
||||
@@ -21,7 +21,7 @@ describe("env handling", () => {
|
||||
class Test extends Component {
|
||||
static template = xml`<div/>`;
|
||||
}
|
||||
const component = await new App(Test).configure({ env }).mount(fixture);
|
||||
const component = await new App(Test, { env }).mount(fixture);
|
||||
expect(Object.isFrozen(component.env)).toBeTruthy();
|
||||
expect(component.env).toEqual({ foo: 42, bar: { value: 42 } });
|
||||
expect(() => {
|
||||
@@ -47,7 +47,7 @@ describe("env handling", () => {
|
||||
static components = { Child };
|
||||
}
|
||||
|
||||
await new App(Test).configure({ env }).mount(fixture);
|
||||
await new App(Test, { env }).mount(fixture);
|
||||
expect(child.env).toEqual(env);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { App, Component, mount, useState, xml } from "../../src";
|
||||
import { Component, mount, useState, xml } from "../../src";
|
||||
import { makeTestFixture, nextTick, snapshotEverything } from "../helpers";
|
||||
|
||||
let fixture: HTMLElement;
|
||||
@@ -64,7 +64,7 @@ describe("basics", () => {
|
||||
static components = { Child, OtherChild };
|
||||
}
|
||||
const env = { options: { flag: true } };
|
||||
const parent = await new App(Parent).configure({ env }).mount(fixture);
|
||||
const parent = await mount(Parent, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("<span>CHILD 1</span>");
|
||||
|
||||
env.options.flag = false;
|
||||
|
||||
@@ -176,7 +176,7 @@ describe("hooks", () => {
|
||||
}
|
||||
}
|
||||
const env = { val: 1 };
|
||||
await new App(Test).configure({ env }).mount(fixture);
|
||||
await mount(Test, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("<div>1</div>");
|
||||
});
|
||||
|
||||
@@ -188,7 +188,7 @@ describe("hooks", () => {
|
||||
}
|
||||
}
|
||||
const env = { val: 3 };
|
||||
const component = await new App(Test).configure({ env }).mount(fixture);
|
||||
const component = await mount(Test, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("<div>3</div>");
|
||||
expect(component.env).not.toHaveProperty("val2");
|
||||
expect(component.env).toHaveProperty("val");
|
||||
@@ -219,7 +219,7 @@ describe("hooks", () => {
|
||||
return someVal;
|
||||
},
|
||||
};
|
||||
const component = await new App(Test).configure({ env }).mount(fixture);
|
||||
const component = await mount(Test, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("<div>maggot brain</div>");
|
||||
someVal = "brain";
|
||||
someVal2 = "maggot";
|
||||
@@ -252,7 +252,7 @@ describe("hooks", () => {
|
||||
}
|
||||
}
|
||||
const env = { val: 3 };
|
||||
await new App(Parent).configure({ env }).mount(fixture);
|
||||
await mount(Parent, fixture, { env });
|
||||
expect(fixture.innerHTML).toBe("3<div>5</div>");
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import {
|
||||
App,
|
||||
Component,
|
||||
mount,
|
||||
onError,
|
||||
@@ -432,10 +431,8 @@ describe("Portal", () => {
|
||||
</div>`;
|
||||
}
|
||||
const env = {};
|
||||
const app = new App(Parent);
|
||||
app.configure({ env });
|
||||
addOutsideDiv(fixture);
|
||||
const parent = await mount(Parent, fixture);
|
||||
const parent = await mount(Parent, fixture, { env });
|
||||
expect(parent.env).toStrictEqual({});
|
||||
});
|
||||
|
||||
@@ -529,10 +526,8 @@ describe("Portal: Props validation", () => {
|
||||
</div>`;
|
||||
}
|
||||
let error: Error;
|
||||
let app = new App(Parent);
|
||||
app.configure({ dev: true });
|
||||
try {
|
||||
await app.mount(fixture);
|
||||
await mount(Parent, fixture, { dev: true });
|
||||
} catch (e) {
|
||||
error = e as Error;
|
||||
}
|
||||
@@ -555,10 +550,8 @@ describe("Portal: Props validation", () => {
|
||||
</div>`;
|
||||
}
|
||||
let error: Error;
|
||||
let app = new App(Parent);
|
||||
app.configure({ dev: true });
|
||||
try {
|
||||
await app.mount(fixture);
|
||||
await mount(Parent, fixture, { dev: true });
|
||||
} catch (e) {
|
||||
error = e as Error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user