Skip to content

Commit 8d352b9

Browse files
committed
fix(test): update MultiBrowser live preview tests for mdviewer iframe
- Add helpers to find md/lp iframes by their distinct IDs - Check md iframe visibility instead of src for markdown file detection - Add _ensureMdReaderMode to switch md viewer to reader mode in tests - Add _TEST_FOCUS_CLICK and _TEST_SELECT_TEXT_AND_CLICK handlers to mdviewer bridge for integration test support
1 parent 48ffbec commit 8d352b9

2 files changed

Lines changed: 69 additions & 14 deletions

File tree

src-mdviewer/src/bridge.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,22 @@ export function initBridge() {
156156
case "MDVIEWR_IMAGE_UPLOAD_RESULT":
157157
_handleImageUploadResult(data);
158158
break;
159+
case "_TEST_FOCUS_CLICK":
160+
document.body.click();
161+
break;
162+
case "_TEST_SELECT_TEXT_AND_CLICK": {
163+
const selection = window.getSelection();
164+
const range = document.createRange();
165+
range.selectNodeContents(document.body);
166+
selection.removeAllRanges();
167+
selection.addRange(range);
168+
document.body.click();
169+
break;
170+
}
171+
case "_TEST_UNSELECT_TEXT_AND_CLICK":
172+
window.getSelection().removeAllRanges();
173+
document.body.click();
174+
break;
159175
}
160176
});
161177

test/spec/LiveDevelopmentMultiBrowser-test.js

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,47 @@ define(function (require, exports, module) {
3232

3333
describe("livepreview:MultiBrowser Live Preview", function () {
3434

35+
function _getLivePreviewIFrame() {
36+
return testWindow.document.getElementById("panel-live-preview-frame");
37+
}
38+
39+
function _getMdPreviewIFrame() {
40+
return testWindow.document.getElementById("panel-md-preview-frame");
41+
}
42+
43+
function _getPreviewIFrame() {
44+
return _getMdPreviewIFrame() || _getLivePreviewIFrame();
45+
}
46+
47+
function _ensureMdReaderMode() {
48+
const mdIFrame = _getMdPreviewIFrame();
49+
if (mdIFrame && mdIFrame.contentWindow) {
50+
mdIFrame.contentWindow.postMessage({
51+
type: "MDVIEWR_SET_EDIT_MODE",
52+
editMode: false
53+
}, "*");
54+
}
55+
}
56+
3557
async function _waitForIframeSrc(name) {
3658
await awaitsFor(() => {
37-
let outerIFrame = testWindow.document.getElementById("panel-live-preview-frame");
59+
if (name.endsWith(".md")) {
60+
// For markdown files, check the md iframe is visible with mdViewer loaded
61+
let mdIFrame = _getMdPreviewIFrame();
62+
return mdIFrame && mdIFrame.style.display !== "none" &&
63+
mdIFrame.src && mdIFrame.src.includes("mdViewer");
64+
}
65+
// For HTML/SVG files, check the live preview iframe src
66+
let outerIFrame = _getLivePreviewIFrame();
67+
if (!outerIFrame || !outerIFrame.src) { return false; }
3868
let srcURL = new URL(outerIFrame.src);
3969
return srcURL.pathname.endsWith(name) === true;
4070
}, "waiting for name- " + name);
71+
// Ensure md viewer is in reader mode for tests
72+
if (name.endsWith(".md")) {
73+
_ensureMdReaderMode();
74+
await awaits(100);
75+
}
4176
}
4277

4378
if (Phoenix.isTestWindowPlaywright && !Phoenix.browser.desktop.isChromeBased) {
@@ -873,13 +908,15 @@ define(function (require, exports, module) {
873908
await awaitsForDone(SpecRunnerUtils.openProjectFiles(["readme.md"]),
874909
"readme.md");
875910
await awaits(300);
876-
let iFrame = testWindow.document.getElementById("panel-live-preview-frame");
877-
expect(iFrame.src.endsWith("readme.md")).toBeTrue();
911+
_ensureMdReaderMode();
912+
await awaits(100);
913+
let mdIFrame = _getMdPreviewIFrame();
914+
expect(mdIFrame && mdIFrame.src && mdIFrame.src.includes("mdViewer")).toBeTrue();
878915

879916
await awaitsForDone(SpecRunnerUtils.openProjectFiles([SVG_IMAGE_PATH]),
880917
SVG_IMAGE_PATH);
881918
await awaits(500);
882-
iFrame = testWindow.document.getElementById("panel-live-preview-frame");
919+
let iFrame = _getLivePreviewIFrame();
883920
let srcURL = new URL(iFrame.src);
884921
expect(srcURL.pathname.endsWith(SVG_IMAGE_PATH)).toBeTrue();
885922

@@ -988,16 +1025,18 @@ define(function (require, exports, module) {
9881025

9891026
await waitsForLiveDevelopmentToOpen();
9901027

991-
let iFrame = testWindow.document.getElementById("panel-live-preview-frame");
1028+
let iFrame = _getLivePreviewIFrame();
9921029
expect(iFrame.src.endsWith("simple1.html")).toBeTrue();
9931030
await awaitsForDone(SpecRunnerUtils.openProjectFiles(["readme.md"]),
9941031
"readme.md");
9951032

9961033
// now make the active editor loose focus and click on the markdown md for it to
9971034
// trigger focus.
9981035
await awaits(300);
999-
let outerIFrame = testWindow.document.getElementById("panel-live-preview-frame");
1000-
expect(outerIFrame.src.endsWith("readme.md")).toBeTrue();
1036+
_ensureMdReaderMode();
1037+
await awaits(100);
1038+
let outerIFrame = _getMdPreviewIFrame();
1039+
expect(outerIFrame && outerIFrame.src && outerIFrame.src.includes("mdViewer")).toBeTrue();
10011040
outerIFrame.focus();
10021041
expect(testWindow.document.activeElement).toEqual(outerIFrame);
10031042
outerIFrame.contentWindow.postMessage({
@@ -1022,16 +1061,16 @@ define(function (require, exports, module) {
10221061

10231062
await waitsForLiveDevelopmentToOpen();
10241063

1025-
let iFrame = testWindow.document.getElementById("panel-live-preview-frame");
1064+
let iFrame = _getLivePreviewIFrame();
10261065
expect(iFrame.src.endsWith("simple1.html")).toBeTrue();
10271066
await awaitsForDone(SpecRunnerUtils.openProjectFiles(["readme.md"]),
10281067
"readme.md");
10291068

10301069
// now make the active editor loose focus and click on the markdown md for it to
10311070
// trigger focus.
10321071
await awaits(300);
1033-
let outerIFrame = testWindow.document.getElementById("panel-live-preview-frame");
1034-
expect(outerIFrame.src.endsWith("readme.md")).toBeTrue();
1072+
let outerIFrame = _getMdPreviewIFrame();
1073+
expect(outerIFrame && outerIFrame.src && outerIFrame.src.includes("mdViewer")).toBeTrue();
10351074
outerIFrame.focus();
10361075
expect(testWindow.document.activeElement).toEqual(outerIFrame);
10371076
// now select some /all text in the markdown and click
@@ -1070,8 +1109,8 @@ define(function (require, exports, module) {
10701109
"readme.md");
10711110

10721111
await awaits(300);
1073-
let outerIFrame = testWindow.document.getElementById("panel-live-preview-frame");
1074-
expect(outerIFrame.src.endsWith("readme.md")).toBeTrue();
1112+
let outerIFrame = _getMdPreviewIFrame();
1113+
expect(outerIFrame && outerIFrame.src && outerIFrame.src.includes("mdViewer")).toBeTrue();
10751114

10761115
// todo check hrefs in markdown. currently we do not have mechanism to exec code image and markdown previews
10771116
// in future we should do this check too.
@@ -1174,8 +1213,8 @@ define(function (require, exports, module) {
11741213
"external proj/test.md");
11751214

11761215
await awaits(300);
1177-
let outerIFrame = testWindow.document.getElementById("panel-live-preview-frame");
1178-
expect(outerIFrame.src.endsWith("test.md")).toBeTrue();
1216+
let outerIFrame = _getMdPreviewIFrame();
1217+
expect(outerIFrame && outerIFrame.src && outerIFrame.src.includes("mdViewer")).toBeTrue();
11791218
await endPreviewSession();
11801219
}, 30000);
11811220

0 commit comments

Comments
 (0)