From 6355dd7ded8dc0ec0712414c4269d270f3c690e4 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 18 May 2025 14:19:13 +0200 Subject: [PATCH] Fix intermittent failure in the stamp editor's undo-related integration tests The clipboard, used via the `copyImage` helper function, is a shared resource, so access to it cannot happen concurrently because it could result in tests overwriting each other's contents. Most tests using the clipboard are therefore run sequentially, but only the stamp editor's undo-related tests weren't, so this commit fixes the issue by running those tests sequentially too. --- test/integration/stamp_editor_spec.mjs | 123 ++++++++++++------------- 1 file changed, 59 insertions(+), 64 deletions(-) diff --git a/test/integration/stamp_editor_spec.mjs b/test/integration/stamp_editor_spec.mjs index 72dd18e0b..4fe68ad5d 100644 --- a/test/integration/stamp_editor_spec.mjs +++ b/test/integration/stamp_editor_spec.mjs @@ -631,6 +631,7 @@ describe("Stamp Editor", () => { }); it("must check that the alt-text button is here when pasting in the second tab", async () => { + // Run sequentially to avoid clipboard issues. for (let i = 0; i < pages1.length; i++) { const [, page1] = pages1[i]; await page1.bringToFront(); @@ -1592,86 +1593,80 @@ describe("Stamp Editor", () => { }); it("must check that deleting an image can be undone using the undo button", async () => { - await Promise.all( - pages.map(async ([browserName, page]) => { - await switchToStamp(page); + // Run sequentially to avoid clipboard issues. + for (const [, page] of pages) { + await switchToStamp(page); - const editorSelector = getEditorSelector(0); - await copyImage(page, "../images/firefox_logo.png", editorSelector); - await page.waitForSelector(editorSelector); - await waitForSerialized(page, 1); + const editorSelector = getEditorSelector(0); + await copyImage(page, "../images/firefox_logo.png", editorSelector); + await page.waitForSelector(editorSelector); + await waitForSerialized(page, 1); - await page.waitForSelector(`${editorSelector} button.delete`); - await page.click(`${editorSelector} button.delete`); - await waitForSerialized(page, 0); - await page.waitForSelector("#editorUndoBar", { visible: true }); + await page.waitForSelector(`${editorSelector} button.delete`); + await page.click(`${editorSelector} button.delete`); + await waitForSerialized(page, 0); + await page.waitForSelector("#editorUndoBar", { visible: true }); - await page.waitForSelector("#editorUndoBarUndoButton", { - visible: true, - }); - await page.click("#editorUndoBarUndoButton"); - await waitForSerialized(page, 1); - await page.waitForSelector(editorSelector); - await page.waitForSelector(`${editorSelector} canvas`); - }) - ); + await page.waitForSelector("#editorUndoBarUndoButton", { + visible: true, + }); + await page.click("#editorUndoBarUndoButton"); + await waitForSerialized(page, 1); + await page.waitForSelector(editorSelector); + await page.waitForSelector(`${editorSelector} canvas`); + } }); it("must check that the undo deletion popup displays the correct message", async () => { - await Promise.all( - pages.map(async ([browserName, page]) => { - await switchToStamp(page); + // Run sequentially to avoid clipboard issues. + for (const [, page] of pages) { + await switchToStamp(page); - const editorSelector = getEditorSelector(0); - await copyImage(page, "../images/firefox_logo.png", editorSelector); - await page.waitForSelector(editorSelector); - await waitForSerialized(page, 1); + const editorSelector = getEditorSelector(0); + await copyImage(page, "../images/firefox_logo.png", editorSelector); + await page.waitForSelector(editorSelector); + await waitForSerialized(page, 1); - await page.waitForSelector(`${editorSelector} button.delete`); - await page.click(`${editorSelector} button.delete`); - await waitForSerialized(page, 0); + await page.waitForSelector(`${editorSelector} button.delete`); + await page.click(`${editorSelector} button.delete`); + await waitForSerialized(page, 0); - await page.waitForFunction(() => { - const messageElement = document.querySelector( - "#editorUndoBarMessage" - ); - return messageElement && messageElement.textContent.trim() !== ""; - }); - const message = await page.waitForSelector("#editorUndoBarMessage"); - const messageText = await page.evaluate( - el => el.textContent, - message + await page.waitForFunction(() => { + const messageElement = document.querySelector( + "#editorUndoBarMessage" ); - expect(messageText).toContain("Image removed"); - }) - ); + return messageElement && messageElement.textContent.trim() !== ""; + }); + const message = await page.waitForSelector("#editorUndoBarMessage"); + const messageText = await page.evaluate(el => el.textContent, message); + expect(messageText).toContain("Image removed"); + } }); it("must check that the popup disappears when a new image is inserted", async () => { - await Promise.all( - pages.map(async ([browserName, page]) => { - await switchToStamp(page); + // Run sequentially to avoid clipboard issues. + for (const [, page] of pages) { + await switchToStamp(page); - const editorSelector = getEditorSelector(0); - await copyImage(page, "../images/firefox_logo.png", editorSelector); - await page.waitForSelector(editorSelector); - await waitForSerialized(page, 1); + const editorSelector = getEditorSelector(0); + await copyImage(page, "../images/firefox_logo.png", editorSelector); + await page.waitForSelector(editorSelector); + await waitForSerialized(page, 1); - await page.waitForSelector(`${editorSelector} button.delete`); - await page.click(`${editorSelector} button.delete`); - await waitForSerialized(page, 0); + await page.waitForSelector(`${editorSelector} button.delete`); + await page.click(`${editorSelector} button.delete`); + await waitForSerialized(page, 0); - await page.waitForSelector("#editorUndoBar", { visible: true }); - await page.click("#editorStampAddImage"); - const newInput = await page.$("#stampEditorFileInput"); - await newInput.uploadFile( - `${path.join(__dirname, "../images/firefox_logo.png")}` - ); - await waitForImage(page, getEditorSelector(1)); - await waitForSerialized(page, 1); - await page.waitForSelector("#editorUndoBar", { hidden: true }); - }) - ); + await page.waitForSelector("#editorUndoBar", { visible: true }); + await page.click("#editorStampAddImage"); + const newInput = await page.$("#stampEditorFileInput"); + await newInput.uploadFile( + `${path.join(__dirname, "../images/firefox_logo.png")}` + ); + await waitForImage(page, getEditorSelector(1)); + await waitForSerialized(page, 1); + await page.waitForSelector("#editorUndoBar", { hidden: true }); + } }); });