Skip to content

Commit a9f10d0

Browse files
My failure to provoke the same failure in e2e
1 parent b3cbe8d commit a9f10d0

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

src/e2e/import-project.spec.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
*
44
* SPDX-License-Identifier: MIT
55
*/
6+
import { Page } from "playwright/test";
7+
import { DataSamplesPage } from "./app/data-samples";
8+
import { ImportPage } from "./app/import-page";
69
import { test } from "./fixtures";
710

811
test.describe("import project (microbit.org case)", () => {
@@ -19,4 +22,55 @@ test.describe("import project (microbit.org case)", () => {
1922
await dataSamplesPage.expectOnPage();
2023
await dataSamplesPage.expectActions(["exercising", "not exercising"]);
2124
});
25+
26+
test("cross-tab behavior regression", async ({
27+
newPage: newPage1,
28+
dataSamplesPage: dataSamplesPage1,
29+
context,
30+
}) => {
31+
// https://github.com/microbit-foundation/ml-trainer/issues/618
32+
await newPage1.goto();
33+
await newPage1.startNewSession();
34+
await dataSamplesPage1.expectOnPage();
35+
36+
const page2 = await context.newPage();
37+
const importPage2 = new ImportPage(page2);
38+
await importPage2.gotoSimpleAIExerciseTimer();
39+
await importPage2.startSession();
40+
const dataSamplesPage2 = new DataSamplesPage(page2);
41+
await dataSamplesPage2.expectOnPage();
42+
await dataSamplesPage2.expectActions(["exercising", "not exercising"]);
43+
44+
await triggerVisibilityChanged(page2, true);
45+
await triggerVisibilityChanged(page2, false);
46+
47+
await dataSamplesPage2.expectActions([]);
48+
});
2249
});
50+
51+
const triggerVisibilityChanged = async (page: Page, hidden: boolean) => {
52+
const frames = page.frames();
53+
if (frames.length > 0) {
54+
await Promise.allSettled(
55+
page.frames().map((frame) => frame.waitForLoadState("networkidle"))
56+
);
57+
}
58+
59+
const makecode = frames.find((f) => {
60+
return (
61+
// Allow for fragments, extra params.
62+
f.url().startsWith("https://makecode.microbit.org/?lang=en&controller=2")
63+
);
64+
});
65+
66+
const setHidden = (value: boolean) => {
67+
Object.defineProperty(document, "visibilityState", {
68+
value: value ? "hidden" : "visible",
69+
writable: true,
70+
});
71+
Object.defineProperty(document, "hidden", { value, writable: true });
72+
document.dispatchEvent(new Event("visibilitychange", { bubbles: true }));
73+
};
74+
await makecode!.evaluate(setHidden, hidden);
75+
await new Promise((resolve) => setTimeout(resolve, 3000));
76+
};

0 commit comments

Comments
 (0)