diff --git a/tests/components/basics.test.ts b/tests/components/basics.test.ts index c644a4a5..90d63321 100644 --- a/tests/components/basics.test.ts +++ b/tests/components/basics.test.ts @@ -832,9 +832,7 @@ describe.skip("mount special cases", () => { // fixture.appendChild(span); // const w = new MyWidget(); // await w.mount(div); - // expect(fixture.innerHTML).toBe("
Hey
"); - // await w.mount(span); // expect(fixture.innerHTML).toBe("
Hey
"); }); @@ -842,7 +840,6 @@ describe.skip("mount special cases", () => { test("widget can be mounted on different target, another situation", async () => { // const def = makeDeferred(); // const steps: string[] = []; - // class MyWidget extends Component { // static template = xml`
Hey
`; // async willStart() { @@ -857,14 +854,10 @@ describe.skip("mount special cases", () => { // fixture.appendChild(div); // fixture.appendChild(span); // const w = new MyWidget(); - // w.mount(div).catch(() => steps.push("1 catch")); - // await nextTick(); // expect(fixture.innerHTML).toBe("
"); - // w.mount(span).then(() => steps.push("2 resolved")); - // // we wait two microticks because this is the number of internal promises // // that need to be resolved/rejected, and because we want to prove here // // that the first mount operation is cancelled immediately, and not after @@ -874,7 +867,6 @@ describe.skip("mount special cases", () => { // expect(steps).toEqual([]); // await nextTick(); // expect(fixture.innerHTML).toBe("
"); - // def.resolve(); // await nextTick(); // expect(steps).toEqual(["2 resolved"]); @@ -884,7 +876,6 @@ describe.skip("mount special cases", () => { test("component can be mounted on same target, another situation", async () => { // const def = makeDeferred(); // const steps: string[] = []; - // class MyWidget extends Component { // static template = xml`
Hey
`; // async willStart() { @@ -895,18 +886,13 @@ describe.skip("mount special cases", () => { // } // } // const w = new MyWidget(); - // w.mount(fixture).then(() => steps.push("1 resolved")); - // await nextTick(); // expect(fixture.innerHTML).toBe(""); - // w.mount(fixture).then(() => steps.push("2 resolved")); - // await nextTick(); // expect(steps).toEqual([]); // expect(fixture.innerHTML).toBe(""); - // def.resolve(); // await nextTick(); // expect(fixture.innerHTML).toBe("
Hey
"); @@ -914,43 +900,41 @@ describe.skip("mount special cases", () => { }); test("mounting a destroyed widget", async () => { - // class MyWidget extends Component { - // static template = xml`
Hey
`; - // } - // const w = new MyWidget(); - // w.destroy(); // because, why not - - // let error; - // try { - // await w.mount(fixture); - // } catch (e) { - // error = e; - // } - // expect(scheduler.tasks.length).toBe(0); - // expect(error).toBeDefined(); - // expect(error.message).toBe("Cannot mount a destroyed component"); - // }); - - // test("destroying a sub-component cleans itself from parent's vnode", async () => { - // class C1 extends Component { - // static template = xml`
`; - // } - // class P extends Component { - // static components = { C1 }; - // static template = xml`
`; - // state = { - // a: "first", - // }; - // } - // const parent = new P(); - // await parent.mount(fixture); - // expect(fixture.textContent).toBe("first"); - // parent.unmount(); - // parent.state.a = ""; - // parent.mount(fixture); - // parent.state.a = "fixed"; - // await parent.render(); - // expect(fixture.textContent).toBe("fixed"); + // class MyWidget extends Component { + // static template = xml`
Hey
`; + // } + // const w = new MyWidget(); + // w.destroy(); // because, why not + // let error; + // try { + // await w.mount(fixture); + // } catch (e) { + // error = e; + // } + // expect(scheduler.tasks.length).toBe(0); + // expect(error).toBeDefined(); + // expect(error.message).toBe("Cannot mount a destroyed component"); + // }); + // test("destroying a sub-component cleans itself from parent's vnode", async () => { + // class C1 extends Component { + // static template = xml`
`; + // } + // class P extends Component { + // static components = { C1 }; + // static template = xml`
`; + // state = { + // a: "first", + // }; + // } + // const parent = new P(); + // await parent.mount(fixture); + // expect(fixture.textContent).toBe("first"); + // parent.unmount(); + // parent.state.a = ""; + // parent.mount(fixture); + // parent.state.a = "fixed"; + // await parent.render(); + // expect(fixture.textContent).toBe("fixed"); }); test("destroying a sub-component cleans itself from parent's vnode, part 2", async () => { @@ -979,12 +963,10 @@ describe.skip("mount special cases", () => { // class C1 extends Component { // static template = xml`
`; // } - // class C2 extends Component { // static template = xml``; // static components = { C1 }; // } - // class P extends Component { // static components = { C2 }; // static template = xml`
`; @@ -1007,7 +989,6 @@ describe.skip("mount special cases", () => { // class C1 extends Component { // static template = xml`
`; // } - // class C2 extends Component { // static template = xml``; // static components = { C1 }; @@ -1029,4 +1010,4 @@ describe.skip("mount special cases", () => { // await parent.render(); // expect(fixture.textContent).toBe("fixedsome text"); }); -}) \ No newline at end of file +}); diff --git a/tests/components/event_handling.test.ts b/tests/components/event_handling.test.ts index 9b777bdd..9cf7face 100644 --- a/tests/components/event_handling.test.ts +++ b/tests/components/event_handling.test.ts @@ -74,7 +74,7 @@ describe("event handling", () => { }); test.skip("t-on with prevent and/or stop modifiers", async () => { - /* expect.assertions(7); + /* expect.assertions(7); qweb.addTemplate( "test", `
diff --git a/tests/components/lifecycle.test.ts b/tests/components/lifecycle.test.ts index 6f8942e4..1954d99d 100644 --- a/tests/components/lifecycle.test.ts +++ b/tests/components/lifecycle.test.ts @@ -938,4 +938,35 @@ describe("lifecycle hooks", () => { expect(mounted).toBe(true); expect(created).toBe(true); }); + + test.skip("two different call to mounted/willunmount should work", async () => { + /*const steps: string[] = []; + function useMyHook(i) { + onMounted(() => { + steps.push("hook:mounted" + i); + }); + onWillUnmount(() => { + steps.push("hook:willunmount" + i); + }); + } + class MyComponent extends Component { + static template = xml`
hey
`; + constructor() { + super(); + useMyHook(1); + useMyHook(2); + } + } + const component = new MyComponent(); + await component.mount(fixture); + expect(fixture.innerHTML).toBe("
hey
"); + component.unmount(); + expect(fixture.innerHTML).toBe(""); + expect(steps).toEqual([ + "hook:mounted1", + "hook:mounted2", + "hook:willunmount2", + "hook:willunmount1", + ]);*/ + }); }); diff --git a/tests/components/reactivity.test.ts b/tests/components/reactivity.test.ts index 8868012d..c64b8da8 100644 --- a/tests/components/reactivity.test.ts +++ b/tests/components/reactivity.test.ts @@ -1,7 +1,19 @@ describe.skip("reactivity in lifecycle", () => { + test.skip("can use a state hook", async () => { + /* class Counter extends Component { + static template = xml`
`; + counter = useState({ value: 42 }); + } + const counter = new Counter(); + await counter.mount(fixture); + expect(fixture.innerHTML).toBe("
42
"); + counter.counter.value = 3; + await nextTick(); + expect(fixture.innerHTML).toBe("
3
");*/ + }); + test("state changes in willUnmount do not trigger rerender", async () => { // const steps: string[] = []; - // class Child extends Component { // static template = xml` // @@ -17,7 +29,6 @@ describe.skip("reactivity in lifecycle", () => { // patched() { // steps.push("patched"); // } - // willUnmount() { // steps.push("willUnmount"); // this.state.n = 3; @@ -32,7 +43,6 @@ describe.skip("reactivity in lifecycle", () => { // static components = { Child }; // state = useState({ val: 1, flag: true }); // } - // const widget = await mount(Parent, { target: fixture }); // expect(steps).toEqual(["render"]); // expect(fixture.innerHTML).toBe("
12
"); @@ -52,7 +62,6 @@ describe.skip("reactivity in lifecycle", () => { // this.state.val = 3; // } // } - // const widget = new TestWidget(); // await widget.mount(fixture); // expect(fixture.innerHTML).toBe("
1
"); @@ -78,13 +87,11 @@ describe.skip("reactivity in lifecycle", () => { // } // } // TestWidget.prototype.__render = jest.fn(TestWidget.prototype.__render); - // const widget = new TestWidget(); // widget.state.val = 2; // await widget.mount(fixture); // expect(fixture.innerHTML).toBe("
2
"); // expect(TestWidget.prototype.__render).toHaveBeenCalledTimes(1); - // // unmount and re-mount, as in this case, willStart won't be called, so it's // // slightly different // widget.unmount(); @@ -109,14 +116,12 @@ describe.skip("reactivity in lifecycle", () => { // } // TestWidget.prototype.__render = jest.fn(TestWidget.prototype.__render); // TestWidget.prototype.__patch = jest.fn(TestWidget.prototype.__patch); - // const widget = new TestWidget(); // let prom = widget.mount(fixture); // widget.state.val = 2; // await prom; // expect(fixture.innerHTML).toBe("
2
"); // expect(TestWidget.prototype.__render).toHaveBeenCalledTimes(1); - // // unmount and re-mount, as in this case, willStart won't be called, so it's // // slightly different // widget.unmount(); @@ -134,10 +139,8 @@ describe.skip("reactivity in lifecycle", () => { // static template = xml`
`; // state = useState({ val: 1 }); // } - // const detachedDiv = document.createElement("div"); // const app = await mount(App, { target: detachedDiv }); - // expect(detachedDiv.innerHTML).toBe("
1
"); // app.state.val = 2; // await nextTick(); @@ -149,12 +152,9 @@ describe.skip("reactivity in lifecycle", () => { // static template = xml`
`; // state = useState({ val: 1 }); // } - // const detachedDiv = document.createElement("div"); // const app = await mount(App, { target: detachedDiv }); - // expect(detachedDiv.innerHTML).toBe("
1
"); - // app.destroy(); // app.state.val = 2; // await nextTick(); @@ -173,24 +173,19 @@ describe.skip("reactivity in lifecycle", () => { // child = this; // } // } - // class Parent extends Component { // static components = { Child }; // static template = xml`
`; // state = useState({ val: "P1" }); // } - // const parent = new Parent(); // await parent.mount(fixture); // expect(fixture.innerHTML).toBe("
P1C1
"); - // parent.unmount(); // expect(fixture.innerHTML).toBe(""); - // parent.state.val = "P2"; // child.state.val = "C2"; - // await parent.mount(fixture); // expect(fixture.innerHTML).toBe("
P2C2
"); }); -}) \ No newline at end of file +}); diff --git a/tests/qweb/attributes.test.ts b/tests/qweb/attributes.test.ts index a10eb543..7f623003 100644 --- a/tests/qweb/attributes.test.ts +++ b/tests/qweb/attributes.test.ts @@ -382,7 +382,7 @@ describe("special cases for some specific html attributes/properties", () => { test.skip("textarea with t-att-value", () => { // render input with initial value -/* qweb.addTemplate("test", `