From 356d54175bf0150b48e3b14810915024033a213c Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 4 Aug 2024 19:57:50 +0200 Subject: [PATCH] Use the `waitForEvent` helper function in the text layer integration tests The `waitForClick` helper function is functionality-wise mostly a reduced copy of the more generic `waitForEvent` helper function that we use for other integration tests, so we can safely replace it to reduce the amount of code. Moreover, the `waitForClick` code is prone to intermittent failures given recent assertion failures we have seen on the bots (one of them is linked in #18396) while `waitForEvent` has recently been fixed to avoid intermittent failures, so usiong it should also get rid of the flakiness for these integration tests. --- test/integration/text_layer_spec.mjs | 70 +++++++++------------------- 1 file changed, 23 insertions(+), 47 deletions(-) diff --git a/test/integration/text_layer_spec.mjs b/test/integration/text_layer_spec.mjs index 13b796efd5a14..3eae3efb849ec 100644 --- a/test/integration/text_layer_spec.mjs +++ b/test/integration/text_layer_spec.mjs @@ -14,11 +14,11 @@ */ import { - awaitPromise, closePages, closeSinglePage, getSpanRectFromText, loadAndWait, + waitForEvent, } from "./test_utils.mjs"; import { startBrowser } from "../test.mjs"; @@ -228,34 +228,6 @@ describe("Text layer", () => { ) ); - function waitForClick(page, selector, timeout) { - return page.evaluateHandle( - (sel, timeoutDelay) => { - const element = document.querySelector(sel); - const timeoutSignal = AbortSignal.timeout(timeoutDelay); - return [ - new Promise(resolve => { - timeoutSignal.addEventListener( - "abort", - () => resolve(false), - { once: true } - ); - element.addEventListener( - "click", - e => { - e.preventDefault(); - resolve(true); - }, - { once: true, signal: timeoutSignal } - ); - }), - ]; - }, - selector, - timeout - ); - } - it("allows selecting within the link", async () => { await Promise.all( pages.map(async ([browserName, page]) => { @@ -315,16 +287,18 @@ describe("Text layer", () => { await moveInSteps(page, positionStart, positionEnd, 20); await page.mouse.up(); - const clickPromiseHandle = await waitForClick( + await waitForEvent({ page, - "#pdfjs_internal_id_8R", - 1000 - ); - - await page.mouse.click(positionEnd.x, positionEnd.y); - - const clicked = await awaitPromise(clickPromiseHandle); - expect(clicked).toBeTrue(); + eventName: "click", + action: () => page.mouse.click(positionEnd.x, positionEnd.y), + selector: "#pdfjs_internal_id_8R", + validator: e => { + // Don't navigate to the link destination: the `click` event + // firing is enough validation that the link can be clicked. + e.preventDefault(); + return true; + }, + }); }) ); }); @@ -348,16 +322,18 @@ describe("Text layer", () => { await page.keyboard.press("ArrowRight"); await page.keyboard.up("Shift"); - const clickPromiseHandle = await waitForClick( + await waitForEvent({ page, - "#pdfjs_internal_id_8R", - 1000 - ); - - await page.mouse.click(positionEnd.x, positionEnd.y); - - const clicked = await awaitPromise(clickPromiseHandle); - expect(clicked).toBeTrue(); + eventName: "click", + action: () => page.mouse.click(positionEnd.x, positionEnd.y), + selector: "#pdfjs_internal_id_8R", + validator: e => { + // Don't navigate to the link destination: the `click` event + // firing is enough validation that the link can be clicked. + e.preventDefault(); + return true; + }, + }); }) ); });