@@ -831,12 +831,64 @@ describe("async rendering", () => {
parent.updateState({ flagB: true });
await nextTick();
expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe("
");
- resolveB();
+ defB.resolve();
expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe("
");
- resolveA();
+ defA.resolve();
await nextTick();
expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
"
ab
"
);
});
+
+ test("creating two async widgets, scenario 2", async () => {
+ let defA = makeDeferred();
+ let defB = makeDeferred();
+
+ class ChildA extends Widget {
+ inlineTemplate = `
a`;
+ updateProps(props): Promise
{
+ return defA.then(() => super.updateProps(props));
+ }
+ }
+ class ChildB extends Widget {
+ inlineTemplate = `b`;
+ willStart(): Promise {
+ return defB;
+ }
+ }
+
+ class Parent extends Widget {
+ inlineTemplate = `
+
+
+
+
`;
+ widgets = { ChildA, ChildB };
+ state = { valA: 1, valB: 2, flagB: false };
+ }
+ const parent = new Parent(env);
+ await parent.mount(fixture);
+ expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
+ "a1
"
+ );
+ parent.updateState({ valA: 2 });
+ await nextTick();
+ expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
+ "a1
"
+ );
+ parent.updateState({ flagB: true });
+ await nextTick();
+ expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
+ "a1
"
+ );
+ defB.resolve();
+ expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
+ "a1
"
+ );
+ defA.resolve();
+ await nextTick();
+ expect(fixture.innerHTML.replace(/\r?\n|\r|\s+/g, "")).toBe(
+ "a2b2
"
+ );
+ });
});