//import { AsyncRoot } from "../../src/misc/async_root"; import { useState, mount } from "../../src"; import { xml } from "../../src/tags"; import { makeDeferred, makeTestFixture, snapshotEverything, nextTick } from "../helpers"; import { Component } from "../../src/component/component"; let fixture: HTMLElement; snapshotEverything(); beforeEach(() => { fixture = makeTestFixture(); }); describe("Asyncroot", () => { test.skip("delayed component with AsyncRoot component", async () => { class Child extends Component { static template = xml``; } class AsyncChild extends Child { willUpdateProps() { return def; } } class Parent extends Component { static template = xml`
`; static components = { Child, AsyncChild, /*AsyncRoot*/ }; state = useState({ val: 0 }); updateApp() { this.state.val++; } } await mount(Parent, fixture); expect(fixture.querySelector(".children")!.innerHTML).toBe("00"); // click on button to increment Parent counter const def = makeDeferred(); fixture.querySelector("button")!.click(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("10"); def.resolve(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("11"); }); test.skip("fast component with AsyncRoot", async () => { class Child extends Component { static template = xml``; } class AsyncChild extends Child { willUpdateProps() { return def; } } class Parent extends Component { static template = xml`
`; static components = { Child, AsyncChild, /*AsyncRoot*/ }; state = useState({ val: 0 }); updateApp() { this.state.val++; } } await mount(Parent, fixture); expect(fixture.querySelector(".children")!.innerHTML).toBe("00"); // click on button to increment Parent counter const def = makeDeferred(); fixture.querySelector("button")!.click(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("10"); def.resolve(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("11"); }); test.skip("asyncroot component: mixed re-renderings", async () => { class Child extends Component { static template = xml` / `; state = useState({ val: 0 }); increment() { this.state.val++; } } class AsyncChild extends Child { willUpdateProps() { return def; } } class Parent extends Component { static template = xml`
`; static components = { Child, AsyncChild, /*AsyncRoot*/ }; state = useState({ val: 0 }); updateApp() { this.state.val++; } } const parent = await mount(Parent, fixture); expect(fixture.querySelector(".children")!.innerHTML).toBe("0/00/0"); // click on button to increment Parent counter const def = makeDeferred(); fixture.querySelector("button")!.click(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("0/10/0"); // click on each Child to increment their local counter const children = (parent.el).querySelectorAll("span"); children[0]!.click(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("1/10/0"); children[1]!.click(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("1/10/0"); // finalize first re-rendering (coming from the props update) def.resolve(); await nextTick(); expect(fixture.querySelector(".children")!.innerHTML).toBe("1/11/1"); }); });