From e74080915de27b98e609877a73cbf9cddeee9ee9 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sat, 7 Dec 2024 19:05:02 +0100 Subject: [PATCH] Fix intermittent issues in the `issue14307.pdf` integration tests The `must check input for US zip format` integration test fails pretty consistently in Puppeteer 23.4.0+ with `Expected '12341' to equal '12345'`. This is reproducible with the `pdf.sandbox.external.js` hack from https://github.com/mozilla/pdf.js/issues/18396#issuecomment-2211273743. Investigation uncovered two issues at play here: 1. We do two `clearInput` calls, but don't await processing of the two sandbox events that are triggered by that action. The three tests that use `issue14307.pdf` are in different `describe` blocks and therefore reload the PDF file, so we can simply remove those calls because the inputs are already empty by default. 2. We don't await processing of the sandbox events that occur after switching to another text field. This causes the expectation failure because the typing actions will happen too soon and interfere with the sandbox event processing. We solve the issue by explicitly awaiting the sandbox roundtrip. Moreover, similar to PR #19001 and #18399 we remove any remaining room for intermittent issues by directly checking for the expected value, which also results in shorter code. --- test/integration/scripting_spec.mjs | 80 +++++++++-------------------- 1 file changed, 24 insertions(+), 56 deletions(-) diff --git a/test/integration/scripting_spec.mjs b/test/integration/scripting_spec.mjs index 0a157479b0904..c8d3f0b144a0a 100644 --- a/test/integration/scripting_spec.mjs +++ b/test/integration/scripting_spec.mjs @@ -1060,38 +1060,26 @@ describe("Interaction", () => { it("must check input for US zip format", async () => { // Run the tests sequentially to avoid any focus issues between the two // browsers when an alert is displayed. - for (const [browserName, page] of pages) { + for (const [, page] of pages) { await waitForScripting(page); - await clearInput(page, getSelector("29R")); - await clearInput(page, getSelector("30R")); - await page.focus(getSelector("29R")); await typeAndWaitForSandbox(page, getSelector("29R"), "12A"); - await page.waitForFunction( - `${getQuerySelector("29R")}.value !== "12A"` - ); - - let text = await page.$eval(getSelector(`29R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("12"); + await page.waitForFunction(`${getQuerySelector("29R")}.value === "12"`); await page.focus(getSelector("29R")); await typeAndWaitForSandbox(page, getSelector("29R"), "34"); await page.click("[data-annotation-id='30R']"); - - await page.waitForFunction( - `${getQuerySelector("29R")}.value !== "1234"` - ); - - text = await page.$eval(getSelector(`29R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual(""); + await waitForSandboxTrip(page); + await page.waitForFunction(`${getQuerySelector("29R")}.value === ""`); await page.focus(getSelector("29R")); await typeAndWaitForSandbox(page, getSelector("29R"), "12345"); await page.click("[data-annotation-id='30R']"); - - text = await page.$eval(getSelector(`29R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("12345"); + await waitForSandboxTrip(page); + await page.waitForFunction( + `${getQuerySelector("29R")}.value === "12345"` + ); } }); }); @@ -1115,38 +1103,28 @@ describe("Interaction", () => { it("must check input for US phone number (long) format", async () => { // Run the tests sequentially to avoid any focus issues between the two // browsers when an alert is displayed. - for (const [browserName, page] of pages) { + for (const [, page] of pages) { await waitForScripting(page); - await clearInput(page, getSelector("29R")); - await clearInput(page, getSelector("30R")); - await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "(123) 456A"); await page.waitForFunction( - `${getQuerySelector("30R")}.value !== "(123) 456A"` + `${getQuerySelector("30R")}.value === "(123) 456"` ); - let text = await page.$eval(getSelector(`30R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("(123) 456"); - await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "-789"); await page.click("[data-annotation-id='29R']"); - - await page.waitForFunction( - `${getQuerySelector("30R")}.value !== "(123) 456-789"` - ); - - text = await page.$eval(getSelector(`30R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual(""); + await waitForSandboxTrip(page); + await page.waitForFunction(`${getQuerySelector("30R")}.value === ""`); await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "(123) 456-7890"); await page.click("[data-annotation-id='29R']"); - - text = await page.$eval(getSelector("30R"), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("(123) 456-7890"); + await waitForSandboxTrip(page); + await page.waitForFunction( + `${getQuerySelector("30R")}.value === "(123) 456-7890"` + ); } }); }); @@ -1170,38 +1148,28 @@ describe("Interaction", () => { it("must check input for US phone number (short) format", async () => { // Run the tests sequentially to avoid any focus issues between the two // browsers when an alert is displayed. - for (const [browserName, page] of pages) { + for (const [, page] of pages) { await waitForScripting(page); - await clearInput(page, getSelector("29R")); - await clearInput(page, getSelector("30R")); - await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "123A"); await page.waitForFunction( - `${getQuerySelector("30R")}.value !== "123A"` + `${getQuerySelector("30R")}.value === "123"` ); - let text = await page.$eval(getSelector(`30R`), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("123"); - await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "-456"); await page.click("[data-annotation-id='29R']"); - - await page.waitForFunction( - `${getQuerySelector("30R")}.value !== "123-456"` - ); - - text = await page.$eval(getSelector("30R"), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual(""); + await waitForSandboxTrip(page); + await page.waitForFunction(`${getQuerySelector("30R")}.value === ""`); await page.focus(getSelector("30R")); await typeAndWaitForSandbox(page, getSelector("30R"), "123-4567"); await page.click("[data-annotation-id='29R']"); - - text = await page.$eval(getSelector("30R"), el => el.value); - expect(text).withContext(`In ${browserName}`).toEqual("123-4567"); + await waitForSandboxTrip(page); + await page.waitForFunction( + `${getQuerySelector("30R")}.value === "123-4567"` + ); } }); });