[FIX] re-introduce tests

This commit is contained in:
Lucas Perais (lpe)
2021-10-18 17:52:25 +02:00
committed by Aaron Bohy
parent d569ea1c28
commit 10df0b5f4a
17 changed files with 616 additions and 79 deletions
+36 -55
View File
@@ -832,9 +832,7 @@ describe.skip("mount special cases", () => {
// fixture.appendChild(span);
// const w = new MyWidget();
// await w.mount(div);
// expect(fixture.innerHTML).toBe("<div><div>Hey</div></div><span></span>");
// await w.mount(span);
// expect(fixture.innerHTML).toBe("<div></div><span><div>Hey</div></span>");
});
@@ -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`<div>Hey</div>`;
// 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("<div></div><span></span>");
// 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("<div></div><span></span>");
// 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`<div>Hey</div>`;
// 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("<div>Hey</div>");
@@ -914,43 +900,41 @@ describe.skip("mount special cases", () => {
});
test("mounting a destroyed widget", async () => {
// class MyWidget extends Component {
// static template = xml`<div>Hey</div>`;
// }
// 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`<div><div><t t-esc="props.a"/></div></div>`;
// }
// class P extends Component {
// static components = { C1 };
// static template = xml`<div><div><C1 t-props="state" t-if="state.a"/></div></div>`;
// 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`<div>Hey</div>`;
// }
// 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`<div><div><t t-esc="props.a"/></div></div>`;
// }
// class P extends Component {
// static components = { C1 };
// static template = xml`<div><div><C1 t-props="state" t-if="state.a"/></div></div>`;
// 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`<div><div><t t-esc="props.a"/></div></div>`;
// }
// class C2 extends Component {
// static template = xml`<C1 a="props.a"/>`;
// static components = { C1 };
// }
// class P extends Component {
// static components = { C2 };
// static template = xml`<div><div><C2 t-props="state" t-if="state.a"/></div></div>`;
@@ -1007,7 +989,6 @@ describe.skip("mount special cases", () => {
// class C1 extends Component {
// static template = xml`<div><div><t t-esc="props.a"/></div></div>`;
// }
// class C2 extends Component {
// static template = xml`<C1 a="props.a"/>`;
// static components = { C1 };
@@ -1029,4 +1010,4 @@ describe.skip("mount special cases", () => {
// await parent.render();
// expect(fixture.textContent).toBe("fixedsome text");
});
})
});
+1 -1
View File
@@ -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",
`<div>
+31
View File
@@ -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`<div>hey</div>`;
constructor() {
super();
useMyHook(1);
useMyHook(2);
}
}
const component = new MyComponent();
await component.mount(fixture);
expect(fixture.innerHTML).toBe("<div>hey</div>");
component.unmount();
expect(fixture.innerHTML).toBe("");
expect(steps).toEqual([
"hook:mounted1",
"hook:mounted2",
"hook:willunmount2",
"hook:willunmount1",
]);*/
});
});
+14 -19
View File
@@ -1,7 +1,19 @@
describe.skip("reactivity in lifecycle", () => {
test.skip("can use a state hook", async () => {
/* class Counter extends Component {
static template = xml`<div><t t-esc="counter.value"/></div>`;
counter = useState({ value: 42 });
}
const counter = new Counter();
await counter.mount(fixture);
expect(fixture.innerHTML).toBe("<div>42</div>");
counter.counter.value = 3;
await nextTick();
expect(fixture.innerHTML).toBe("<div>3</div>");*/
});
test("state changes in willUnmount do not trigger rerender", async () => {
// const steps: string[] = [];
// class Child extends Component {
// static template = xml`
// <span><t t-esc="props.val"/><t t-esc="state.n"/></span>
@@ -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("<div><span>12</span></div>");
@@ -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("<div>1</div>");
@@ -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("<div>2</div>");
// 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("<div>2</div>");
// 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`<div><t t-esc="state.val"/></div>`;
// state = useState({ val: 1 });
// }
// const detachedDiv = document.createElement("div");
// const app = await mount(App, { target: detachedDiv });
// expect(detachedDiv.innerHTML).toBe("<div>1</div>");
// app.state.val = 2;
// await nextTick();
@@ -149,12 +152,9 @@ describe.skip("reactivity in lifecycle", () => {
// static template = xml`<div><t t-esc="state.val"/></div>`;
// state = useState({ val: 1 });
// }
// const detachedDiv = document.createElement("div");
// const app = await mount(App, { target: detachedDiv });
// expect(detachedDiv.innerHTML).toBe("<div>1</div>");
// 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`<div><t t-esc="state.val"/><Child/></div>`;
// state = useState({ val: "P1" });
// }
// const parent = new Parent();
// await parent.mount(fixture);
// expect(fixture.innerHTML).toBe("<div>P1<span>C1</span></div>");
// parent.unmount();
// expect(fixture.innerHTML).toBe("");
// parent.state.val = "P2";
// child.state.val = "C2";
// await parent.mount(fixture);
// expect(fixture.innerHTML).toBe("<div>P2<span>C2</span></div>");
});
})
});