From 5026af107f88d288be2e19cc839289ac6a6247b2 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sat, 18 Jan 2025 19:22:30 +0100 Subject: [PATCH 1/3] Align variable names in the freetext editor integration tests The `selectorEditor` name is used 57 times, but only in the freetext editor integration tests file. The `editorSelector` name on the other hand is used 241 times in all editor integration test files, so this commit renames the former name to the latter name to achieve consistency in variable names across all editor integration test files, which also simplifies upcoming changes. --- test/integration/freetext_editor_spec.mjs | 114 +++++++++++----------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index 192f77482..a4b0e67a3 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -1859,17 +1859,17 @@ describe("FreeText Editor", () => { const rect = await getRect(page, ".annotationEditorLayer"); const data = "Hello PDF.js World !!"; - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 200, rect.y + 200); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [pageX, pageY] = await getFirstSerialized(page, x => x.rect); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowRight") ); @@ -1881,7 +1881,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY)); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowDown") ); @@ -1893,7 +1893,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY - 20)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveLeft(page)); [newX, newY] = await getFirstSerialized(page, x => x.rect); expect(Math.round(newX)) @@ -1903,7 +1903,7 @@ describe("FreeText Editor", () => { .withContext(`In ${browserName}`) .toEqual(Math.round(pageY - 20)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveUp(page)); [newX, newY] = await getFirstSerialized(page, x => x.rect); expect(Math.round(newX)) @@ -1928,8 +1928,8 @@ describe("FreeText Editor", () => { ); const pageWidth = page2X - page1X; - const selectorEditor = getEditorSelector(0); - await moveEditor(page, selectorEditor, 5, () => + const editorSelector = getEditorSelector(0); + await moveEditor(page, editorSelector, 5, () => page.keyboard.press("ArrowRight") ); @@ -1953,40 +1953,40 @@ describe("FreeText Editor", () => { const rect = await getRect(page, ".annotationEditorLayer"); const data = "Hello PDF.js World !!"; - let selectorEditor = getEditorSelector(1); + let editorSelector = getEditorSelector(1); await page.mouse.click(rect.x + 100, rect.y + 100); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [pageX, pageY] = await getFirstSerialized(page, x => x.rect); await clearAll(page); - selectorEditor = getEditorSelector(2); + editorSelector = getEditorSelector(2); await page.mouse.click(rect.x + 100, rect.y + 100); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowRight") ); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveDown(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveDown(page)); - await moveEditor(page, selectorEditor, 20, () => + await moveEditor(page, editorSelector, 20, () => page.keyboard.press("ArrowLeft") ); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveUp(page)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveRight(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveRight(page)); - await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 2, () => kbBigMoveLeft(page)); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); const [newX, newY] = await getFirstSerialized(page, x => x.rect); @@ -2130,9 +2130,9 @@ describe("FreeText Editor", () => { .toEqual(1); const { y: y0, height } = await getRect(page, getEditorSelector(0)); - const selectorEditor = getEditorSelector(1); - while ((await getRect(page, selectorEditor)).y > y0 - height) { - await moveEditor(page, selectorEditor, 1, () => kbBigMoveUp(page)); + const editorSelector = getEditorSelector(1); + while ((await getRect(page, editorSelector)).y > y0 - height) { + await moveEditor(page, editorSelector, 1, () => kbBigMoveUp(page)); } // The editor must be moved in the DOM and potentially the focus @@ -2287,20 +2287,20 @@ describe("FreeText Editor", () => { const page1Selector = `.page[data-page-number = "1"] > .annotationEditorLayer.freetextEditing`; let rect = await getRect(page, page1Selector); - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 10, rect.y + 10); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, "Hello"); - await cancelFocusIn(page, selectorEditor); + await page.type(`${editorSelector} .internal`, "Hello"); + await cancelFocusIn(page, editorSelector); await commit(page); // Unselect. await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await waitForUnselectedEditor(page, editorSelector); - const editorRect = await getRect(page, selectorEditor); + const editorRect = await getRect(page, editorSelector); // Select the editor created previously. await page.mouse.click( @@ -2375,20 +2375,20 @@ describe("FreeText Editor", () => { const page1Selector = `.page[data-page-number = "1"] > .annotationEditorLayer.freetextEditing`; const rect = await getRect(page, page1Selector); - const selectorEditor = getEditorSelector(0); + const editorSelector = getEditorSelector(0); await page.mouse.click(rect.x + 10, rect.y + 10); - await page.waitForSelector(selectorEditor, { + await page.waitForSelector(editorSelector, { visible: true, }); - await page.type(`${selectorEditor} .internal`, "Hello"); - await cancelFocusIn(page, selectorEditor); + await page.type(`${editorSelector} .internal`, "Hello"); + await cancelFocusIn(page, editorSelector); await commit(page); // Unselect. await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await waitForUnselectedEditor(page, editorSelector); - const editorRect = await getRect(page, selectorEditor); + const editorRect = await getRect(page, editorSelector); // Select the editor created previously. await page.mouse.click( @@ -2538,18 +2538,18 @@ describe("FreeText Editor", () => { await page.focus("#editorFreeTextButton"); await page.keyboard.press("Enter"); - let selectorEditor = getEditorSelector(0); - await page.waitForSelector(selectorEditor, { + let editorSelector = getEditorSelector(0); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 5, () => kbBigMoveUp(page)); + await moveEditor(page, editorSelector, 5, () => kbBigMoveUp(page)); const data = "Hello PDF.js World !!"; - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); - let content = await page.$eval(selectorEditor, el => + let content = await page.$eval(editorSelector, el => el.innerText.trimEnd() ); @@ -2560,19 +2560,19 @@ describe("FreeText Editor", () => { await page.focus("#editorFreeTextButton"); await page.keyboard.press(" "); - selectorEditor = getEditorSelector(1); - await page.waitForSelector(selectorEditor, { + editorSelector = getEditorSelector(1); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 5, () => kbBigMoveDown(page)); + await moveEditor(page, editorSelector, 5, () => kbBigMoveDown(page)); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await waitForUnselectedEditor(page, editorSelector); content = await page.$eval(getEditorSelector(1), el => el.innerText.trimEnd() @@ -2587,20 +2587,20 @@ describe("FreeText Editor", () => { await Promise.all( pages.map(async ([browserName, page]) => { await page.keyboard.press("Enter"); - let selectorEditor = getEditorSelector(2); - await page.waitForSelector(selectorEditor, { + let editorSelector = getEditorSelector(2); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 10, () => kbBigMoveLeft(page)); + await moveEditor(page, editorSelector, 10, () => kbBigMoveLeft(page)); const data = "Hello PDF.js World !!"; - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await waitForUnselectedEditor(page, editorSelector); let content = await page.$eval(getEditorSelector(2), el => el.innerText.trimEnd() @@ -2609,23 +2609,23 @@ describe("FreeText Editor", () => { expect(content).withContext(`In ${browserName}`).toEqual(data); await page.keyboard.press(" "); - selectorEditor = getEditorSelector(3); - await page.waitForSelector(selectorEditor, { + editorSelector = getEditorSelector(3); + await page.waitForSelector(editorSelector, { visible: true, }); - await moveEditor(page, selectorEditor, 10, () => + await moveEditor(page, editorSelector, 10, () => kbBigMoveRight(page) ); - await page.type(`${selectorEditor} .internal`, data); + await page.type(`${editorSelector} .internal`, data); await commit(page); // Unselect. await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, selectorEditor); + await waitForUnselectedEditor(page, editorSelector); - content = await page.$eval(selectorEditor, el => + content = await page.$eval(editorSelector, el => el.innerText.trimEnd() ); From c051dd78cfeb6d308e946b7d5f9ddfe47d624c7f Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sat, 18 Jan 2025 19:21:55 +0100 Subject: [PATCH 2/3] Implement a helper function for selecting an editor in the integration tests This has multiple advantages: - it improves consistency between the various editor integration tests; - it makes the code easier to read/understand; - it reduces code duplication; - it reduces the number of `getEditorSelector` calls that contained hardcoded IDs, which helps to isolate the tests and to simplify follow-up patches. --- test/integration/freetext_editor_spec.mjs | 147 +++------------------- test/integration/ink_editor_spec.mjs | 19 +-- test/integration/stamp_editor_spec.mjs | 10 +- test/integration/test_utils.mjs | 11 ++ 4 files changed, 37 insertions(+), 150 deletions(-) diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index a4b0e67a3..42a2c41dc 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -43,6 +43,7 @@ import { paste, pasteFromClipboard, scrollIntoView, + selectEditor, switchToEditor, waitForAnnotationEditorLayer, waitForAnnotationModeChanged, @@ -171,15 +172,7 @@ describe("FreeText Editor", () => { it("must copy/paste", async () => { // Run sequentially to avoid clipboard issues. for (const [browserName, page] of pages) { - const editorRect = await getRect(page, getEditorSelector(0)); - - // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(0)); + await selectEditor(page, getEditorSelector(0)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(1), { @@ -243,14 +236,7 @@ describe("FreeText Editor", () => { await page.type(`${getEditorSelector(3)} .internal`, data); await commit(page); - // And select it again. - const editorRect = await getRect(page, getEditorSelector(3)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(3)); + await selectEditor(page, getEditorSelector(3)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(4), { @@ -350,14 +336,7 @@ describe("FreeText Editor", () => { () => !document.querySelector(".selectedEditor") ); - const editorRect = await getRect(page, getEditorSelector(8)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(8)); - + await selectEditor(page, getEditorSelector(8)); expect(await getEditors(page, "selected")) .withContext(`In ${browserName}`) .toEqual([8]); @@ -397,16 +376,7 @@ describe("FreeText Editor", () => { await commit(page); if (i < 4) { - // And select it again. - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); + await selectEditor(page, editorSelector, /* count = */ 2); } } @@ -467,13 +437,7 @@ describe("FreeText Editor", () => { expect(text).withContext(`In ${browserName}`).toEqual("A"); // Add a new A. - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector(`${editorSelector} .overlay:not(.enabled)`); + await selectEditor(page, editorSelector, /* count = */ 2); await page.type(`${editorSelector} .internal`, "A"); await commit(page); @@ -904,12 +868,9 @@ describe("FreeText Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorSelector = getEditorSelector(0); - const editorRect = await getRect(page, editorSelector); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, editorSelector); + const editorSelector = getEditorSelector(0); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[100, 100]]); await waitForSerialized(page, 1); @@ -942,15 +903,7 @@ describe("FreeText Editor", () => { expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); const editorRect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${getEditorSelector(0)} .overlay:not(.enabled)` - ); - + await selectEditor(page, getEditorSelector(0), /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => @@ -1048,16 +1001,7 @@ describe("FreeText Editor", () => { }); const editorSelector = getEditorSelector(1); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); - + await selectEditor(page, editorSelector, /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => @@ -1134,12 +1078,7 @@ describe("FreeText Editor", () => { let editorIds = await getEditors(page, "freeText"); expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); - const editorRect = await getRect(page, getEditorSelector(3)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(3)); + await selectEditor(page, getEditorSelector(3)); await page.keyboard.press("Backspace"); await page.waitForFunction( sel => !document.querySelector(sel), @@ -1199,13 +1138,7 @@ describe("FreeText Editor", () => { const editorIds = await getEditors(page, "freeText"); expect(editorIds.length).withContext(`In ${browserName}`).toEqual(6); - const editorRect = await getRect(page, getEditorSelector(1)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(1)); - + await selectEditor(page, getEditorSelector(1)); await copy(page); await paste(page); await page.waitForSelector(getEditorSelector(6), { @@ -2106,12 +2039,7 @@ describe("FreeText Editor", () => { await commit(page); // Select the second editor. - rect = await getRect(page, getEditorSelector(1)); - await page.mouse.click( - rect.x + 0.5 * rect.width, - rect.y + 0.5 * rect.height - ); - await waitForSelectedEditor(page, getEditorSelector(1)); + await selectEditor(page, getEditorSelector(1)); const pos = n => page.evaluate(sel => { @@ -2300,13 +2228,8 @@ describe("FreeText Editor", () => { await page.keyboard.press("Escape"); await waitForUnselectedEditor(page, editorSelector); - const editorRect = await getRect(page, editorSelector); - // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); + await selectEditor(page, editorSelector); // Go to the last page. await scrollIntoView(page, `.page[data-page-number = "14"]`); @@ -2339,15 +2262,7 @@ describe("FreeText Editor", () => { await page.waitForSelector(getEditorSelector(0), { visible: true, }); - - rect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - rect.x + rect.width / 2, - rect.y + rect.height / 2 - ); - - await waitForSelectedEditor(page, getEditorSelector(0)); - + await selectEditor(page, getEditorSelector(0)); const content = await page.$eval(getEditorSelector(0), el => el.innerText.trimEnd() ); @@ -2388,13 +2303,8 @@ describe("FreeText Editor", () => { await page.keyboard.press("Escape"); await waitForUnselectedEditor(page, editorSelector); - const editorRect = await getRect(page, editorSelector); - // Select the editor created previously. - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); + await selectEditor(page, editorSelector); // Go to the last page. await scrollIntoView(page, `.page[data-page-number = "14"]`); @@ -2769,12 +2679,7 @@ describe("FreeText Editor", () => { } // Select the editor created previously. - const editorRect = await getRect(page, getEditorSelector(0)); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, getEditorSelector(0)); + await selectEditor(page, getEditorSelector(0)); await selectAll(page); @@ -3137,13 +3042,7 @@ describe("FreeText Editor", () => { const getText = edSelector => page.$eval(`${edSelector} .internal`, el => el.innerText.trimEnd()); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector(`${editorSelector} .overlay:not(.enabled)`); + await selectEditor(page, editorSelector, /* count = */ 2); const select = position => page.evaluate( @@ -3254,15 +3153,7 @@ describe("FreeText Editor", () => { const editorSelector = getEditorSelector(0); const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2, - { count: 2 } - ); - await page.waitForSelector( - `${editorSelector} .overlay:not(.enabled)` - ); - + await selectEditor(page, editorSelector, /* count = */ 2); await kbGoToEnd(page); await page.waitForFunction( sel => diff --git a/test/integration/ink_editor_spec.mjs b/test/integration/ink_editor_spec.mjs index 672f8ae21..a79098f7b 100644 --- a/test/integration/ink_editor_spec.mjs +++ b/test/integration/ink_editor_spec.mjs @@ -29,6 +29,7 @@ import { kbUndo, loadAndWait, scrollIntoView, + selectEditor, switchToEditor, waitForAnnotationModeChanged, waitForNoElement, @@ -719,11 +720,7 @@ describe("Ink Editor", () => { const pdfjsA = getEditorSelector(0); const editorRect = await getRect(page, pdfjsA); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, pdfjsA); + await selectEditor(page, pdfjsA); const red = "#ff0000"; page.evaluate(value => { @@ -815,11 +812,8 @@ describe("Ink Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorRect = await getRect(page, edgeB); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, edgeB); + await selectEditor(page, edgeB); await dragAndDrop(page, edgeB, [[100, 100]]); await waitForSerialized(page, 1); @@ -1067,12 +1061,7 @@ describe("Ink Editor", () => { await page.waitForSelector("#editorUndoBar", { hidden: true }); editorSelector = getEditorSelector(0); - const editorRect = await getRect(page, editorSelector); - await page.mouse.click( - editorRect.x + editorRect.width / 2, - editorRect.y + editorRect.height / 2 - ); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[30, 30]], /* steps = */ 10); const finalRect = await getRect(page, `${pageOneSelector} svg`); diff --git a/test/integration/stamp_editor_spec.mjs b/test/integration/stamp_editor_spec.mjs index edb01595e..4d4cb8628 100644 --- a/test/integration/stamp_editor_spec.mjs +++ b/test/integration/stamp_editor_spec.mjs @@ -38,6 +38,7 @@ import { paste, pasteFromClipboard, scrollIntoView, + selectEditor, serializeBitmapDimensions, switchToEditor, waitForAnnotationEditorLayer, @@ -524,9 +525,7 @@ describe("Stamp Editor", () => { await copyImage(page, "../images/firefox_logo.png", 0); const editorSelector = getEditorSelector(0); - - await page.click(editorSelector); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await page.waitForSelector( `${editorSelector} .resizer.topLeft[tabindex="-1"]` @@ -1494,11 +1493,8 @@ describe("Stamp Editor", () => { const serialized = await getSerialized(page); expect(serialized).withContext(`In ${browserName}`).toEqual([]); - const editorRect = await getRect(page, editorSelector); - // Select the annotation we want to move. - await page.mouse.click(editorRect.x + 2, editorRect.y + 2); - await waitForSelectedEditor(page, editorSelector); + await selectEditor(page, editorSelector); await dragAndDrop(page, editorSelector, [[100, 100]]); await waitForSerialized(page, 1); diff --git a/test/integration/test_utils.mjs b/test/integration/test_utils.mjs index 2b868ca89..f67a02e23 100644 --- a/test/integration/test_utils.mjs +++ b/test/integration/test_utils.mjs @@ -347,6 +347,16 @@ async function applyFunctionToEditor(page, editorId, func) { ); } +async function selectEditor(page, selector, count = 1) { + const editorRect = await getRect(page, selector); + await page.mouse.click( + editorRect.x + editorRect.width / 2, + editorRect.y + editorRect.height / 2, + { count } + ); + await waitForSelectedEditor(page, selector); +} + async function waitForSelectedEditor(page, selector) { return page.waitForSelector(`${selector}.selectedEditor`); } @@ -868,6 +878,7 @@ export { paste, pasteFromClipboard, scrollIntoView, + selectEditor, serializeBitmapDimensions, setCaretAt, switchToEditor, From 895edafc2398538fc7e7e2bc2ca912398e4be436 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sat, 18 Jan 2025 20:00:23 +0100 Subject: [PATCH 3/3] Implement a helper function for unselecting an editor in the integration tests This has multiple advantages: - it improves consistency between the various editor integration tests; - it makes the code easier to read/understand; - it reduces code duplication. --- test/integration/freetext_editor_spec.mjs | 16 ++++++---------- test/integration/highlight_editor_spec.mjs | 11 ++++------- test/integration/stamp_editor_spec.mjs | 8 +++----- test/integration/test_utils.mjs | 6 ++++++ 4 files changed, 19 insertions(+), 22 deletions(-) diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index 42a2c41dc..13afe708d 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -45,6 +45,7 @@ import { scrollIntoView, selectEditor, switchToEditor, + unselectEditor, waitForAnnotationEditorLayer, waitForAnnotationModeChanged, waitForEditorMovedInDOM, @@ -2225,8 +2226,7 @@ describe("FreeText Editor", () => { await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); // Select the editor created previously. await selectEditor(page, editorSelector); @@ -2300,8 +2300,7 @@ describe("FreeText Editor", () => { await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); // Select the editor created previously. await selectEditor(page, editorSelector); @@ -2481,8 +2480,7 @@ describe("FreeText Editor", () => { await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); content = await page.$eval(getEditorSelector(1), el => el.innerText.trimEnd() @@ -2509,8 +2507,7 @@ describe("FreeText Editor", () => { await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); let content = await page.$eval(getEditorSelector(2), el => el.innerText.trimEnd() @@ -2532,8 +2529,7 @@ describe("FreeText Editor", () => { await commit(page); // Unselect. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); content = await page.$eval(editorSelector, el => el.innerText.trimEnd() diff --git a/test/integration/highlight_editor_spec.mjs b/test/integration/highlight_editor_spec.mjs index 06e1d44e5..182755090 100644 --- a/test/integration/highlight_editor_spec.mjs +++ b/test/integration/highlight_editor_spec.mjs @@ -33,12 +33,12 @@ import { scrollIntoView, setCaretAt, switchToEditor, + unselectEditor, waitAndClick, waitForAnnotationModeChanged, waitForSelectedEditor, waitForSerialized, waitForTimeout, - waitForUnselectedEditor, } from "./test_utils.mjs"; import { fileURLToPath } from "url"; import fs from "fs"; @@ -1044,8 +1044,7 @@ describe("Highlight Editor", () => { const y = rect.y + rect.height / 2; await page.mouse.click(x, y, { count: 2, delay: 100 }); await page.waitForSelector(`${getEditorSelector(0)}`); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, getEditorSelector(0)); + await unselectEditor(page, getEditorSelector(0)); await setCaretAt( page, @@ -1795,8 +1794,7 @@ describe("Highlight Editor", () => { await page.mouse.click(x, y, { count: 2, delay: 100 }); await page.waitForSelector(editorSelector); await waitForSerialized(page, 1); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); const clickHandle = await waitForPointerUp(page); y = rect.y - rect.height; @@ -1866,8 +1864,7 @@ describe("Highlight Editor", () => { await page.mouse.click(x, y, { count: 3, delay: 100 }); await page.waitForSelector(editorSelector); await waitForSerialized(page, 1); - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); const clickHandle = await waitForPointerUp(page); y = rect.y - 3 * rect.height; diff --git a/test/integration/stamp_editor_spec.mjs b/test/integration/stamp_editor_spec.mjs index 4d4cb8628..7118534c9 100644 --- a/test/integration/stamp_editor_spec.mjs +++ b/test/integration/stamp_editor_spec.mjs @@ -41,6 +41,7 @@ import { selectEditor, serializeBitmapDimensions, switchToEditor, + unselectEditor, waitForAnnotationEditorLayer, waitForAnnotationModeChanged, waitForEntryInStorage, @@ -48,7 +49,6 @@ import { waitForSerialized, waitForStorageEntries, waitForTimeout, - waitForUnselectedEditor, } from "./test_utils.mjs"; import { fileURLToPath } from "url"; import fs from "fs"; @@ -1056,8 +1056,7 @@ describe("Stamp Editor", () => { .toEqual("Review alt text"); // Unselect and select the editor and check that the badge is visible. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); await page.waitForSelector(".editToolbar", { visible: false }); await page.waitForSelector(".noAltTextBadge", { visible: true }); @@ -1106,8 +1105,7 @@ describe("Stamp Editor", () => { .toEqual("Missing alt text"); // Unselect and select the editor and check that the badge is visible. - await page.keyboard.press("Escape"); - await waitForUnselectedEditor(page, editorSelector); + await unselectEditor(page, editorSelector); await page.waitForSelector(".editToolbar", { visible: false }); await page.waitForSelector(".noAltTextBadge", { visible: true }); await page.evaluate(() => { diff --git a/test/integration/test_utils.mjs b/test/integration/test_utils.mjs index f67a02e23..ace187ddd 100644 --- a/test/integration/test_utils.mjs +++ b/test/integration/test_utils.mjs @@ -361,6 +361,11 @@ async function waitForSelectedEditor(page, selector) { return page.waitForSelector(`${selector}.selectedEditor`); } +async function unselectEditor(page, selector) { + await page.keyboard.press("Escape"); + await waitForUnselectedEditor(page, selector); +} + async function waitForUnselectedEditor(page, selector) { return page.waitForSelector(`${selector}:not(.selectedEditor)`); } @@ -882,6 +887,7 @@ export { serializeBitmapDimensions, setCaretAt, switchToEditor, + unselectEditor, waitAndClick, waitForAnnotationEditorLayer, waitForAnnotationModeChanged,