2020-11-30 18:11:28 +01:00
|
|
|
/* Copyright 2020 Mozilla Foundation
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2023-10-12 13:16:58 +02:00
|
|
|
import {
|
2023-12-09 15:00:11 +01:00
|
|
|
awaitPromise,
|
2022-06-17 22:01:20 +02:00
|
|
|
clearInput,
|
|
|
|
closePages,
|
2024-07-04 10:33:53 +02:00
|
|
|
closeSinglePage,
|
2023-11-13 11:05:03 +01:00
|
|
|
getAnnotationStorage,
|
2022-06-17 22:01:20 +02:00
|
|
|
getComputedStyleSelector,
|
2023-07-29 18:15:23 +02:00
|
|
|
getFirstSerialized,
|
2023-10-12 13:16:58 +02:00
|
|
|
getQuerySelector,
|
|
|
|
getSelector,
|
2023-10-26 22:42:41 +02:00
|
|
|
kbDeleteLastWord,
|
|
|
|
kbSelectAll,
|
2023-10-12 13:16:58 +02:00
|
|
|
loadAndWait,
|
2023-09-27 22:35:57 +02:00
|
|
|
scrollIntoView,
|
2023-11-13 11:05:03 +01:00
|
|
|
waitForEntryInStorage,
|
2024-04-03 22:24:17 +02:00
|
|
|
waitForSandboxTrip,
|
2024-02-10 18:21:34 +01:00
|
|
|
waitForTimeout,
|
2023-10-12 13:16:58 +02:00
|
|
|
} from "./test_utils.mjs";
|
2020-12-10 22:45:14 +01:00
|
|
|
|
2024-07-06 19:07:03 +02:00
|
|
|
async function waitForScripting(page) {
|
|
|
|
await page.waitForFunction(
|
|
|
|
"window.PDFViewerApplication.scriptingReady === true"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
async function typeAndWaitForSandbox(page, selector, value) {
|
|
|
|
/**
|
|
|
|
* Type the given value in a text field, indicated by the given selector on
|
|
|
|
* the given page, that triggers the sandbox after every character insertion.
|
|
|
|
*
|
|
|
|
* Text fields can either dispatch a sandbox event on e.g. focus loss or after
|
|
|
|
* every character insertion. The latter is problematic because Puppeteer can
|
|
|
|
* only insert the next character correctly if the sandbox is fully done
|
|
|
|
* processing the sandbox event that was issued for the previous character.
|
|
|
|
* This helper function fixes the issue by typing each character individually
|
|
|
|
* and waiting for the sandbox to finish before continuing with the next one.
|
|
|
|
*/
|
|
|
|
for (const character of value) {
|
|
|
|
await page.type(selector, character);
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-30 18:11:28 +01:00
|
|
|
describe("Interaction", () => {
|
2021-01-05 15:53:30 +01:00
|
|
|
async function actAndWaitForInput(page, selector, action, clear = true) {
|
2022-10-25 15:28:22 +02:00
|
|
|
await page.waitForSelector(selector, {
|
|
|
|
timeout: 0,
|
|
|
|
});
|
2021-01-05 15:53:30 +01:00
|
|
|
if (clear) {
|
|
|
|
await clearInput(page, selector);
|
|
|
|
}
|
2020-12-23 18:57:44 +01:00
|
|
|
await action();
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`document.querySelector('${selector}').value !== ""`
|
2020-12-23 18:57:44 +01:00
|
|
|
);
|
|
|
|
return page.$eval(selector, el => el.value);
|
|
|
|
}
|
|
|
|
|
2020-11-30 18:11:28 +01:00
|
|
|
describe("in 160F-2019.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("160F-2019.pdf", getSelector("416R"));
|
2020-11-30 18:11:28 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2020-12-10 22:45:14 +01:00
|
|
|
await closePages(pages);
|
2020-11-30 18:11:28 +01:00
|
|
|
});
|
|
|
|
|
2020-12-07 19:22:14 +01:00
|
|
|
it("must check that first text field has focus", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2022-10-01 17:50:58 +02:00
|
|
|
await page.waitForFunction(`window.document.activeElement !== null`);
|
2020-12-18 23:12:52 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
// The document has an open action in order to give the focus to 401R.
|
|
|
|
const id = await page.evaluate(() => {
|
|
|
|
const element = window.document.activeElement;
|
|
|
|
return element.getAttribute("data-element-id");
|
|
|
|
});
|
2020-12-07 19:22:14 +01:00
|
|
|
expect(id).withContext(`In ${browserName}`).toEqual("401R");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
it("must show a text field and then make in invisible when content is removed", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
let visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("427R"),
|
2020-11-18 14:59:57 +01:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("416R"), "3.14159");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("419R"));
|
2020-11-18 14:59:57 +01:00
|
|
|
|
2021-05-08 15:36:16 +02:00
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getComputedStyleSelector("427R")}.visibility !== "hidden"`
|
2021-05-08 15:36:16 +02:00
|
|
|
);
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("427R"),
|
2020-11-18 14:59:57 +01:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("visible");
|
|
|
|
|
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("416R"));
|
2020-11-18 14:59:57 +01:00
|
|
|
// and leave it
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("419R"));
|
2020-11-18 14:59:57 +01:00
|
|
|
|
2021-05-08 15:36:16 +02:00
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getComputedStyleSelector("427R")}.visibility !== "visible"`
|
2021-05-08 15:36:16 +02:00
|
|
|
);
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("427R"),
|
2020-11-18 14:59:57 +01:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2020-11-30 18:11:28 +01:00
|
|
|
it("must format the field with 2 digits and leave field with a click", async () => {
|
|
|
|
await Promise.all(
|
2020-12-10 22:45:14 +01:00
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("416R"), "3.14159");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("419R"));
|
2025-03-16 19:46:31 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("416R")}.value === "3,14"`
|
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("427R")}.value === "3,14"`
|
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must format the field with 2 digits, leave field with a click and again", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("448R"), "61803");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("419R"));
|
2025-03-16 19:46:31 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("448R")}.value === "61.803,00"`
|
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("448R"));
|
2025-03-16 19:46:31 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("448R")}.value === "61803"`
|
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
|
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("448R"));
|
2020-11-18 14:59:57 +01:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("448R"), "1.61803");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("419R"));
|
2025-03-16 19:46:31 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("448R")}.value === "1,62"`
|
|
|
|
);
|
2020-11-30 18:11:28 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must format the field with 2 digits and leave field with a TAB", async () => {
|
|
|
|
await Promise.all(
|
2020-12-10 22:45:14 +01:00
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("422R"), "2.7182818");
|
2020-11-30 18:11:28 +01:00
|
|
|
await page.keyboard.press("Tab");
|
2022-01-08 17:57:06 +01:00
|
|
|
await page.waitForFunction(
|
2025-03-16 19:46:31 +01:00
|
|
|
`${getQuerySelector("422R")}.value === "2,72"`
|
2022-01-08 17:57:06 +01:00
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
2025-03-16 20:07:17 +01:00
|
|
|
`${getQuerySelector("427R")}.value === "2,72"`
|
2022-01-08 17:57:06 +01:00
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must format the field with 2 digits and hit ESC", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("436R"), "0.69314");
|
2020-11-18 14:59:57 +01:00
|
|
|
await page.keyboard.press("Escape");
|
2022-01-08 17:57:06 +01:00
|
|
|
await page.waitForFunction(
|
2025-03-16 19:46:31 +01:00
|
|
|
`${getQuerySelector("436R")}.value === "0.69314"`
|
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
2025-03-16 20:07:17 +01:00
|
|
|
`${getQuerySelector("471R")}.value === "0,69"`
|
2022-01-08 17:57:06 +01:00
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must format the field with 2 digits on key ENTER", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("419R"), "0.577215");
|
2020-11-18 14:59:57 +01:00
|
|
|
await page.keyboard.press("Enter");
|
2022-01-08 17:57:06 +01:00
|
|
|
await page.waitForFunction(
|
2025-03-16 19:46:31 +01:00
|
|
|
`${getQuerySelector("419R")}.value === "0.577215"`
|
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
2025-03-16 20:07:17 +01:00
|
|
|
`${getQuerySelector("427R")}.value === "0,58"`
|
2022-01-08 17:57:06 +01:00
|
|
|
);
|
2020-11-18 14:59:57 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must reset all", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-03-06 17:19:57 +01:00
|
|
|
// click on a radio button
|
|
|
|
await page.click("[data-annotation-id='449R']");
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
// this field has no actions but it must be cleared on reset
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("405R"), "employee");
|
2020-11-18 14:59:57 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let checked = await page.$eval(getSelector("449R"), el => el.checked);
|
2021-03-06 17:19:57 +01:00
|
|
|
expect(checked).toEqual(true);
|
|
|
|
|
2020-11-18 14:59:57 +01:00
|
|
|
// click on reset button
|
|
|
|
await page.click("[data-annotation-id='402R']");
|
|
|
|
|
2022-01-08 17:57:06 +01:00
|
|
|
await Promise.all(
|
2022-06-17 22:01:20 +02:00
|
|
|
["416R", "422R", "419R", "405R"].map(id => {
|
|
|
|
const querySelector = getQuerySelector(id);
|
|
|
|
return page.waitForFunction(`${querySelector}.value === ""`);
|
|
|
|
})
|
2022-01-08 17:57:06 +01:00
|
|
|
);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let text = await page.$eval(getSelector("416R"), el => el.value);
|
2020-11-18 14:59:57 +01:00
|
|
|
expect(text).toEqual("");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("422R"), el => el.value);
|
2020-11-18 14:59:57 +01:00
|
|
|
expect(text).toEqual("");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("419R"), el => el.value);
|
2020-11-18 14:59:57 +01:00
|
|
|
expect(text).toEqual("");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("405R"), el => el.value);
|
2020-11-18 14:59:57 +01:00
|
|
|
expect(text).toEqual("");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
checked = await page.$eval(getSelector("449R"), el => el.checked);
|
2021-03-06 17:19:57 +01:00
|
|
|
expect(checked).toEqual(false);
|
2022-05-02 19:28:00 +02:00
|
|
|
|
|
|
|
const visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("427R"),
|
2022-05-02 19:28:00 +02:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).toEqual("hidden");
|
2020-11-30 18:11:28 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2020-11-18 18:54:26 +01:00
|
|
|
|
|
|
|
describe("in js-buttons.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("js-buttons.pdf", getSelector("80R"));
|
2020-11-18 18:54:26 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2020-11-18 18:54:26 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must show values in a text input when clicking on radio buttons", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2020-11-18 18:54:26 +01:00
|
|
|
|
|
|
|
const expected = [
|
2022-06-17 22:01:20 +02:00
|
|
|
["81R", "Group1=Choice1::1"],
|
|
|
|
["82R", "Group1=Choice2::2"],
|
|
|
|
["83R", "Group1=Choice3::3"],
|
|
|
|
["84R", "Group1=Choice4::4"],
|
2020-11-18 18:54:26 +01:00
|
|
|
];
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const [id, expectedText] of expected) {
|
2020-11-18 18:54:26 +01:00
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("80R"));
|
2020-11-18 18:54:26 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector(id));
|
2020-11-18 18:54:26 +01:00
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("80R")}.value !== ""`
|
2020-11-18 18:54:26 +01:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("80R"), el => el.value);
|
2020-11-18 18:54:26 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expectedText);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must show values in a text input when clicking on checkboxes", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2020-11-18 18:54:26 +01:00
|
|
|
const expected = [
|
2022-06-17 22:01:20 +02:00
|
|
|
["85R", "Check1=Yes::5"],
|
|
|
|
["87R", "Check2=Yes::6"],
|
|
|
|
["88R", "Check3=Yes::7"],
|
|
|
|
["89R", "Check4=Yes::8"],
|
|
|
|
["85R", "Check1=Off::5"],
|
|
|
|
["87R", "Check2=Off::6"],
|
|
|
|
["88R", "Check3=Off::7"],
|
|
|
|
["89R", "Check4=Off::8"],
|
2020-11-18 18:54:26 +01:00
|
|
|
];
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const [id, expectedText] of expected) {
|
2020-11-18 18:54:26 +01:00
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("80R"));
|
2020-11-18 18:54:26 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector(id));
|
2020-11-18 18:54:26 +01:00
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("80R")}.value !== ""`
|
2020-11-18 18:54:26 +01:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("80R"), el => el.value);
|
2020-11-18 18:54:26 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expectedText);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must show values in a text input when clicking on checkboxes in a group", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2020-11-18 18:54:26 +01:00
|
|
|
const expected = [
|
2022-06-17 22:01:20 +02:00
|
|
|
["90R", "Check5=Yes1::9"],
|
|
|
|
["91R", "Check5=Yes2::10"],
|
|
|
|
["92R", "Check5=Yes3::11"],
|
|
|
|
["93R", "Check5=Yes4::12"],
|
|
|
|
["93R", "Check5=Off::12"],
|
2020-11-18 18:54:26 +01:00
|
|
|
];
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const [id, expectedText] of expected) {
|
2020-11-18 18:54:26 +01:00
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("80R"));
|
2020-11-18 18:54:26 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector(id));
|
2020-11-18 18:54:26 +01:00
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("80R")}.value !== ""`
|
2020-11-18 18:54:26 +01:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("80R"), el => el.value);
|
2021-01-08 16:43:16 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expectedText);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must show values in a text input when clicking on checkboxes or radio with no actions", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-01-08 16:43:16 +01:00
|
|
|
const expected = [
|
|
|
|
["", "Off;Off"],
|
2022-06-17 22:01:20 +02:00
|
|
|
["94R", "Yes;Off"],
|
|
|
|
["95R", "Yes;NoAct2"],
|
|
|
|
["96R", "Yes;NoAct3"],
|
|
|
|
["94R", "Off;NoAct3"],
|
|
|
|
["95R", "Off;NoAct2"],
|
2021-01-08 16:43:16 +01:00
|
|
|
];
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const [id, expectedText] of expected) {
|
2021-01-08 16:43:16 +01:00
|
|
|
// Clear the textfield
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("80R"));
|
2021-01-08 16:43:16 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
if (id) {
|
|
|
|
await page.click(getSelector(id));
|
2021-01-08 16:43:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
await page.click("[data-annotation-id='97R']");
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("80R")}.value !== ""`
|
2021-01-08 16:43:16 +01:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("80R"), el => el.value);
|
2020-11-18 18:54:26 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expectedText);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2020-12-23 18:57:44 +01:00
|
|
|
|
|
|
|
describe("in doc_actions.pdf for printing", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-08-20 22:24:08 +01:00
|
|
|
pages = await loadAndWait("doc_actions.pdf", getSelector("47R"), null, {
|
|
|
|
earlySetup: () => {
|
|
|
|
// No need to trigger the print dialog.
|
|
|
|
window.print = () => {};
|
|
|
|
},
|
|
|
|
});
|
2020-12-23 18:57:44 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
it("must execute WillPrint and DidPrint actions", async () => {
|
2024-08-20 22:24:08 +01:00
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
|
|
|
await waitForScripting(page);
|
2021-01-05 15:53:30 +01:00
|
|
|
|
2024-08-20 22:24:08 +01:00
|
|
|
await clearInput(page, getSelector("47R"));
|
|
|
|
await page.evaluate(_ => {
|
|
|
|
window.document.activeElement.blur();
|
|
|
|
});
|
|
|
|
await page.waitForFunction(`${getQuerySelector("47R")}.value === ""`);
|
2020-12-23 18:57:44 +01:00
|
|
|
|
2024-08-20 22:24:08 +01:00
|
|
|
const text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
getSelector("47R"),
|
|
|
|
async () => {
|
2024-09-17 18:08:03 +02:00
|
|
|
await page.click("#printButton");
|
2024-08-20 22:24:08 +01:00
|
|
|
}
|
|
|
|
);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("WillPrint");
|
2020-12-23 18:57:44 +01:00
|
|
|
|
2024-08-20 22:24:08 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("50R")}.value === "DidPrint"`
|
|
|
|
);
|
|
|
|
await closeSinglePage(page);
|
|
|
|
})
|
|
|
|
);
|
2020-12-23 18:57:44 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("in doc_actions.pdf for saving", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("doc_actions.pdf", getSelector("47R"));
|
2020-12-23 18:57:44 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2020-12-23 18:57:44 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must execute WillSave and DidSave actions", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2021-01-05 15:53:30 +01:00
|
|
|
|
2020-12-23 18:57:44 +01:00
|
|
|
try {
|
|
|
|
// Disable download in chrome
|
|
|
|
// (it leads to an error in firefox so the try...)
|
|
|
|
await page._client.send("Page.setDownloadBehavior", {
|
|
|
|
behavior: "deny",
|
|
|
|
});
|
2023-06-12 11:46:11 +02:00
|
|
|
} catch {}
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("47R"));
|
2021-01-05 15:53:30 +01:00
|
|
|
await page.evaluate(_ => {
|
|
|
|
window.document.activeElement.blur();
|
|
|
|
});
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("47R")}.value === ""`);
|
2021-01-05 15:53:30 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
getSelector("47R"),
|
|
|
|
async () => {
|
2024-09-17 18:08:03 +02:00
|
|
|
await page.click("#downloadButton");
|
2022-06-17 22:01:20 +02:00
|
|
|
}
|
|
|
|
);
|
2020-12-23 18:57:44 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("WillSave");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("50R")}.value !== ""`);
|
2020-12-23 18:57:44 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("50R"), el => el.value);
|
2020-12-23 18:57:44 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("DidSave");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-01-05 15:53:30 +01:00
|
|
|
|
|
|
|
describe("in doc_actions.pdf for page actions", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("doc_actions.pdf", getSelector("47R"));
|
2021-01-05 15:53:30 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-01-05 15:53:30 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must execute PageOpen and PageClose actions", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2021-01-05 15:53:30 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("47R")}.value !== ""`);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let text = await page.$eval(getSelector("47R"), el => el.value);
|
2021-01-05 15:53:30 +01:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("PageOpen 1");
|
|
|
|
|
|
|
|
for (let run = 0; run < 5; run++) {
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const ref of ["18R", "19R", "20R", "21R", "47R", "50R"]) {
|
|
|
|
await page.evaluate(selector => {
|
|
|
|
const element = window.document.querySelector(selector);
|
2021-01-05 15:53:30 +01:00
|
|
|
if (element) {
|
|
|
|
element.value = "";
|
|
|
|
}
|
2022-06-17 22:01:20 +02:00
|
|
|
}, getSelector(ref));
|
2021-01-05 15:53:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
for (const [refOpen, refClose, pageNumOpen, pageNumClose] of [
|
2022-06-17 22:01:20 +02:00
|
|
|
["18R", "50R", 2, 1],
|
|
|
|
["21R", "19R", 3, 2],
|
|
|
|
["47R", "20R", 1, 3],
|
2021-01-05 15:53:30 +01:00
|
|
|
]) {
|
|
|
|
text = await actAndWaitForInput(
|
|
|
|
page,
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector(refOpen),
|
2023-09-27 22:35:57 +02:00
|
|
|
() => scrollIntoView(page, getSelector(refOpen)),
|
2021-01-05 15:53:30 +01:00
|
|
|
false
|
|
|
|
);
|
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`PageOpen ${pageNumOpen}`);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector(refClose), el => el.value);
|
2021-01-05 15:53:30 +01:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`PageClose ${pageNumClose}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-01-08 18:40:09 +01:00
|
|
|
|
|
|
|
describe("in js-authors.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("js-authors.pdf", getSelector("25R"));
|
2021-01-08 18:40:09 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-05-05 19:05:08 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
2021-01-08 18:40:09 +01:00
|
|
|
it("must print authors in a text field", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
getSelector("25R"),
|
|
|
|
async () => {
|
|
|
|
await page.click("[data-annotation-id='26R']");
|
|
|
|
}
|
|
|
|
);
|
2021-01-08 18:40:09 +01:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("author1::author2::author3::author4::author5");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-01-25 14:40:57 -08:00
|
|
|
|
|
|
|
describe("in listbox_actions.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("listbox_actions.pdf", getSelector("33R"));
|
2021-01-25 14:40:57 -08:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-01-25 14:40:57 -08:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must print selected value in a text field", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-01-25 14:40:57 -08:00
|
|
|
for (const num of [7, 6, 4, 3, 2, 1]) {
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("33R"));
|
2021-01-25 14:40:57 -08:00
|
|
|
await page.click(`option[value=Export${num}]`);
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("33R")}.value !== ""`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("33R"), el => el.value);
|
2021-01-25 14:40:57 -08:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`Item${num},Export${num}`);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must clear and restore list elements", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-01-25 14:40:57 -08:00
|
|
|
// Click on ClearItems button.
|
|
|
|
await page.click("[data-annotation-id='34R']");
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("30R")}.children.length === 0`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
|
|
|
|
|
|
|
// Click on Restore button.
|
|
|
|
await page.click("[data-annotation-id='37R']");
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("30R")}.children.length !== 0`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
|
|
|
|
|
|
|
for (const num of [7, 6, 4, 3, 2, 1]) {
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("33R"));
|
2021-01-25 14:40:57 -08:00
|
|
|
await page.click(`option[value=Export${num}]`);
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("33R")}.value !== ""`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("33R"), el => el.value);
|
2021-01-25 14:40:57 -08:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`Item${num},Export${num}`);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must insert new elements", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-01-25 14:40:57 -08:00
|
|
|
let len = 6;
|
|
|
|
for (const num of [1, 3, 5, 6, 431, -1, 0]) {
|
|
|
|
++len;
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("33R"));
|
|
|
|
await clearInput(page, getSelector("39R"));
|
|
|
|
await page.type(
|
|
|
|
getSelector("39R"),
|
2024-10-06 19:46:59 +02:00
|
|
|
`${num},Insert${num},Tresni${num}`
|
2022-06-17 22:01:20 +02:00
|
|
|
);
|
2021-01-25 14:40:57 -08:00
|
|
|
|
|
|
|
// Click on AddItem button.
|
|
|
|
await page.click("[data-annotation-id='38R']");
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("30R")}.children.length === ${len}`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
|
|
|
|
|
|
|
// Click on newly added option.
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.select(getSelector("30R"), `Tresni${num}`);
|
2021-01-25 14:40:57 -08:00
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("33R")}.value !== ""`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("33R"), el => el.value);
|
2021-01-25 14:40:57 -08:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`Insert${num},Tresni${num}`);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must delete some element", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-01-25 14:40:57 -08:00
|
|
|
let len = 6;
|
|
|
|
// Click on Restore button.
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("33R"));
|
2021-01-25 14:40:57 -08:00
|
|
|
await page.click("[data-annotation-id='37R']");
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("30R")}.children.length === ${len}`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
|
|
|
|
|
|
|
for (const num of [2, 5]) {
|
|
|
|
--len;
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("39R"));
|
|
|
|
await page.type(getSelector("39R"), `${num}`);
|
2021-01-25 14:40:57 -08:00
|
|
|
|
|
|
|
// Click on DeleteItem button.
|
|
|
|
await page.click("[data-annotation-id='36R']");
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("30R")}.children.length === ${len}`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const num of [6, 4, 2, 1]) {
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("33R"));
|
2021-01-25 14:40:57 -08:00
|
|
|
await page.click(`option[value=Export${num}]`);
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("33R")}.value !== ""`
|
2021-01-25 14:40:57 -08:00
|
|
|
);
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("33R"), el => el.value);
|
2021-01-25 14:40:57 -08:00
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`Item${num},Export${num}`);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-02-20 15:23:54 +01:00
|
|
|
|
|
|
|
describe("in js-colors.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("js-colors.pdf", getSelector("34R"));
|
2021-02-20 15:23:54 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-05-05 19:05:08 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
2021-02-26 00:16:19 +01:00
|
|
|
it("must change colors", async () => {
|
2021-02-20 15:23:54 +01:00
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-02-20 15:23:54 +01:00
|
|
|
for (const [name, ref] of [
|
2022-06-17 22:01:20 +02:00
|
|
|
["Text1", "34R"],
|
|
|
|
["Check1", "35R"],
|
|
|
|
["Radio1", "37R"],
|
|
|
|
["Choice1", "38R"],
|
2021-02-20 15:23:54 +01:00
|
|
|
]) {
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("34R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("34R"), `${name}`);
|
2021-02-20 15:23:54 +01:00
|
|
|
|
2023-07-29 18:15:23 +02:00
|
|
|
for (const [id, propName, storedName, expected, storedExpected] of [
|
|
|
|
[
|
|
|
|
41,
|
|
|
|
"backgroundColor",
|
|
|
|
"backgroundColor",
|
|
|
|
"rgb(255, 0, 0)",
|
|
|
|
[255, 0, 0],
|
|
|
|
],
|
|
|
|
[43, "color", "color", "rgb(0, 255, 0)", [0, 255, 0]],
|
|
|
|
[
|
|
|
|
44,
|
|
|
|
"border-top-color",
|
|
|
|
"borderColor",
|
|
|
|
"rgb(0, 0, 255)",
|
|
|
|
[0, 0, 255],
|
|
|
|
],
|
2021-02-26 00:16:19 +01:00
|
|
|
]) {
|
|
|
|
const current = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector(ref),
|
2021-02-26 00:16:19 +01:00
|
|
|
(el, _propName) => getComputedStyle(el)[_propName],
|
|
|
|
propName
|
|
|
|
);
|
2021-02-20 15:23:54 +01:00
|
|
|
|
2021-02-26 00:16:19 +01:00
|
|
|
await page.click(`[data-annotation-id='${id}R']`);
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getComputedStyleSelector(
|
|
|
|
ref
|
|
|
|
)}["${propName}"] !== "${current}"`
|
2021-02-26 00:16:19 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
const color = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector(ref),
|
2021-02-26 00:16:19 +01:00
|
|
|
(el, _propName) => getComputedStyle(el)[_propName],
|
|
|
|
propName
|
|
|
|
);
|
|
|
|
expect(color).withContext(`In ${browserName}`).toEqual(expected);
|
2023-07-29 18:15:23 +02:00
|
|
|
|
|
|
|
const storedValue = (await getFirstSerialized(page))[storedName];
|
|
|
|
expect(storedValue)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(storedExpected);
|
2021-02-26 00:16:19 +01:00
|
|
|
}
|
2021-02-20 15:23:54 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-03-30 17:50:35 +02:00
|
|
|
|
|
|
|
describe("in issue13132.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue13132.pdf", getSelector("171R"));
|
2021-03-30 17:50:35 +02:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-03-30 17:50:35 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must compute sum of fields", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2021-03-30 17:50:35 +02:00
|
|
|
|
2023-10-29 18:20:58 +01:00
|
|
|
await scrollIntoView(page, getSelector("138R"));
|
2021-03-30 17:50:35 +02:00
|
|
|
|
|
|
|
let sum = 0;
|
|
|
|
for (const [id, val] of [
|
2022-06-17 22:01:20 +02:00
|
|
|
["138R", 1],
|
|
|
|
["77R", 2],
|
|
|
|
["93R", 3],
|
|
|
|
["151R", 4],
|
|
|
|
["79R", 5],
|
2021-03-30 17:50:35 +02:00
|
|
|
]) {
|
2022-06-17 22:01:20 +02:00
|
|
|
const prev = await page.$eval(getSelector("171R"), el => el.value);
|
2021-03-30 17:50:35 +02:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector(id), val.toString());
|
2021-03-30 17:50:35 +02:00
|
|
|
await page.keyboard.press("Tab");
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("171R")}.value !== "${prev}"`
|
2021-03-30 17:50:35 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
sum += val;
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
const total = await page.$eval(getSelector("171R"), el => el.value);
|
2021-03-30 17:50:35 +02:00
|
|
|
expect(total).withContext(`In ${browserName}`).toEqual(`£${sum}`);
|
|
|
|
}
|
|
|
|
|
2023-04-25 11:35:21 +02:00
|
|
|
await page.waitForSelector('.page[data-page-number = "4"]', {
|
|
|
|
timeout: 0,
|
|
|
|
});
|
|
|
|
|
2021-03-30 17:50:35 +02:00
|
|
|
// Some unrendered annotations have been updated, so check
|
|
|
|
// that they've the correct value when rendered.
|
2023-09-27 22:35:57 +02:00
|
|
|
await scrollIntoView(page, '.page[data-page-number = "4"]');
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.waitForSelector(getSelector("299R"), {
|
2021-03-30 17:50:35 +02:00
|
|
|
timeout: 0,
|
|
|
|
});
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
const total = await page.$eval(getSelector("299R"), el => el.value);
|
2021-03-30 17:50:35 +02:00
|
|
|
expect(total).withContext(`In ${browserName}`).toEqual(`£${sum}`);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-04-30 16:43:27 +02:00
|
|
|
|
|
|
|
describe("Check field properties", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("evaljs.pdf", getSelector("55R"));
|
2021-04-30 16:43:27 +02:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-04-30 16:43:27 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check page index", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2021-04-30 16:43:27 +02:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("55R"));
|
2021-04-30 16:43:27 +02:00
|
|
|
await page.type(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("55R"),
|
2021-04-30 16:43:27 +02:00
|
|
|
`
|
|
|
|
['Text1', 'Text2', 'Text4',
|
|
|
|
'List Box7', 'Group6'].map(x => this.getField(x).page).join(',')
|
2021-04-20 19:21:52 +02:00
|
|
|
`
|
2021-04-30 16:43:27 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
// Click on execute button to eval the above code.
|
|
|
|
await page.click("[data-annotation-id='57R']");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("56R")}.value !== ""`);
|
2021-04-30 16:43:27 +02:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await page.$eval(getSelector("56R"), el => el.value);
|
2021-04-30 16:43:27 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("0,0,1,1,1");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
2021-05-03 18:03:16 +02:00
|
|
|
|
|
|
|
it("must check display", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2021-05-03 18:03:16 +02:00
|
|
|
for (const [type, vis] of [
|
|
|
|
["hidden", "hidden"],
|
|
|
|
["noPrint", "visible"],
|
|
|
|
["noView", "hidden"],
|
|
|
|
["visible", "visible"],
|
|
|
|
]) {
|
|
|
|
let visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("56R"),
|
2021-05-03 18:03:16 +02:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await clearInput(page, getSelector("55R"));
|
2021-05-03 18:03:16 +02:00
|
|
|
await page.type(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("55R"),
|
2021-05-03 18:03:16 +02:00
|
|
|
`this.getField("Text2").display = display.${type};`
|
|
|
|
);
|
|
|
|
|
|
|
|
await page.click("[data-annotation-id='57R']");
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getComputedStyleSelector(
|
|
|
|
"56R"
|
|
|
|
)}.visibility !== "${visibility}"`
|
2021-05-03 18:03:16 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
visibility = await page.$eval(
|
2022-06-17 22:01:20 +02:00
|
|
|
getSelector("56R"),
|
2021-05-03 18:03:16 +02:00
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual(vis);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
2021-04-30 16:43:27 +02:00
|
|
|
});
|
2021-04-20 19:21:52 +02:00
|
|
|
|
|
|
|
describe("in issue13269.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue13269.pdf", getSelector("27R"));
|
2021-04-20 19:21:52 +02:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-04-20 19:21:52 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must update fields with the same name from JS", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2021-04-20 19:21:52 +02:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.type(getSelector("27R"), "hello");
|
2021-04-20 19:21:52 +02:00
|
|
|
await page.keyboard.press("Enter");
|
|
|
|
|
|
|
|
await Promise.all(
|
2022-06-17 22:01:20 +02:00
|
|
|
["24R", "25R", "26R"].map(async id =>
|
|
|
|
page.waitForFunction(`${getQuerySelector(id)}.value !== ""`)
|
2021-04-20 19:21:52 +02:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
const expected = "hello world";
|
2022-06-17 22:01:20 +02:00
|
|
|
for (const id of ["24R", "25R", "26R"]) {
|
|
|
|
const text = await page.$eval(getSelector(id), el => el.value);
|
2021-04-20 19:21:52 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expected);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2021-10-26 00:09:26 +10:00
|
|
|
|
|
|
|
describe("in secHandler.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("secHandler.pdf", getSelector("25R"));
|
2021-10-26 00:09:26 +10:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2021-10-26 00:09:26 +10:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
2025-03-16 20:08:56 +01:00
|
|
|
|
2021-10-26 00:09:26 +10:00
|
|
|
it("must print securityHandler value in a text field", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
const text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
getSelector("25R"),
|
|
|
|
async () => {
|
|
|
|
await page.click("[data-annotation-id='26R']");
|
|
|
|
}
|
|
|
|
);
|
2021-10-26 00:09:26 +10:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("Standard");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-01-08 17:57:06 +01:00
|
|
|
|
|
|
|
describe("in issue14307.pdf (1)", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue14307.pdf", getSelector("30R"));
|
2022-01-08 17:57:06 +01:00
|
|
|
pages.map(async ([, page]) => {
|
|
|
|
page.on("dialog", async dialog => {
|
|
|
|
await dialog.dismiss();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-01-08 17:57:06 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check input for US zip format", async () => {
|
2022-12-13 16:08:36 +01:00
|
|
|
// Run the tests sequentially to avoid any focus issues between the two
|
|
|
|
// browsers when an alert is displayed.
|
2024-12-07 19:05:02 +01:00
|
|
|
for (const [, page] of pages) {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("29R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("29R"), "12A");
|
2024-12-07 19:05:02 +01:00
|
|
|
await page.waitForFunction(`${getQuerySelector("29R")}.value === "12"`);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("29R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("29R"), "34");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='30R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(`${getQuerySelector("29R")}.value === ""`);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("29R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("29R"), "12345");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='30R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("29R")}.value === "12345"`
|
|
|
|
);
|
2022-12-13 16:08:36 +01:00
|
|
|
}
|
2022-01-08 17:57:06 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("in issue14307.pdf (2)", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue14307.pdf", getSelector("30R"));
|
2022-01-08 17:57:06 +01:00
|
|
|
pages.map(async ([, page]) => {
|
|
|
|
page.on("dialog", async dialog => {
|
|
|
|
await dialog.dismiss();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-01-08 17:57:06 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check input for US phone number (long) format", async () => {
|
2022-12-13 16:08:36 +01:00
|
|
|
// Run the tests sequentially to avoid any focus issues between the two
|
|
|
|
// browsers when an alert is displayed.
|
2024-12-07 19:05:02 +01:00
|
|
|
for (const [, page] of pages) {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "(123) 456A");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.waitForFunction(
|
2024-12-07 19:05:02 +01:00
|
|
|
`${getQuerySelector("30R")}.value === "(123) 456"`
|
2022-12-13 16:08:36 +01:00
|
|
|
);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "-789");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='29R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(`${getQuerySelector("30R")}.value === ""`);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "(123) 456-7890");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='29R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("30R")}.value === "(123) 456-7890"`
|
|
|
|
);
|
2022-12-13 16:08:36 +01:00
|
|
|
}
|
2022-01-08 17:57:06 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("in issue14307.pdf (3)", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue14307.pdf", getSelector("30R"));
|
2022-01-08 17:57:06 +01:00
|
|
|
pages.map(async ([, page]) => {
|
|
|
|
page.on("dialog", async dialog => {
|
|
|
|
await dialog.dismiss();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-01-08 17:57:06 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check input for US phone number (short) format", async () => {
|
2022-12-13 16:08:36 +01:00
|
|
|
// Run the tests sequentially to avoid any focus issues between the two
|
|
|
|
// browsers when an alert is displayed.
|
2024-12-07 19:05:02 +01:00
|
|
|
for (const [, page] of pages) {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "123A");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.waitForFunction(
|
2024-12-07 19:05:02 +01:00
|
|
|
`${getQuerySelector("30R")}.value === "123"`
|
2022-12-13 16:08:36 +01:00
|
|
|
);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "-456");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='29R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(`${getQuerySelector("30R")}.value === ""`);
|
2022-01-08 17:57:06 +01:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.focus(getSelector("30R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "123-4567");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click("[data-annotation-id='29R']");
|
2024-12-07 19:05:02 +01:00
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("30R")}.value === "123-4567"`
|
|
|
|
);
|
2022-12-13 16:08:36 +01:00
|
|
|
}
|
2022-01-08 17:57:06 +01:00
|
|
|
});
|
|
|
|
});
|
2022-05-02 19:28:00 +02:00
|
|
|
|
|
|
|
describe("in issue14862.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue14862.pdf", getSelector("27R"));
|
2022-05-02 19:28:00 +02:00
|
|
|
pages.map(async ([, page]) => {
|
|
|
|
page.on("dialog", async dialog => {
|
|
|
|
await dialog.dismiss();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-05-02 19:28:00 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
it("must convert input to uppercase", async () => {
|
2022-05-02 19:28:00 +02:00
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("27R"), "Hello");
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-03 15:00:35 +01:00
|
|
|
`${getQuerySelector("27R")}.value === "HELLO"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("27R"), " world");
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-03 15:00:35 +01:00
|
|
|
`${getQuerySelector("27R")}.value === "HELLO WORLD"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
await page.keyboard.press("Backspace");
|
2024-11-03 15:00:35 +01:00
|
|
|
await waitForSandboxTrip(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.keyboard.press("Backspace");
|
2024-11-03 15:00:35 +01:00
|
|
|
await waitForSandboxTrip(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-03 15:00:35 +01:00
|
|
|
`${getQuerySelector("27R")}.value === "HELLO WOR"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("27R"), "12.dL");
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-03 15:00:35 +01:00
|
|
|
`${getQuerySelector("27R")}.value === "HELLO WORDL"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("27R"), " ");
|
2023-10-26 22:42:41 +02:00
|
|
|
await kbDeleteLastWord(page);
|
2024-11-03 15:00:35 +01:00
|
|
|
await waitForSandboxTrip(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-03 15:00:35 +01:00
|
|
|
`${getQuerySelector("27R")}.value === "HELLO "`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.$eval(getSelector("27R"), el => {
|
2022-05-02 19:28:00 +02:00
|
|
|
// Select LL
|
|
|
|
el.selectionStart = 2;
|
|
|
|
el.selectionEnd = 4;
|
|
|
|
});
|
2024-11-03 15:00:35 +01:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("27R"), "a");
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("27R")}.value === "HEAO "`
|
|
|
|
);
|
2022-05-02 19:28:00 +02:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that an infinite loop is not triggered", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.click(getSelector("28R"));
|
2024-11-17 21:05:37 +01:00
|
|
|
await page.keyboard.press("Home");
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("28R"), "Hello");
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.waitForFunction(
|
2024-11-17 21:05:37 +01:00
|
|
|
`${getQuerySelector("28R")}.value === "Hello123"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2024-11-17 21:05:37 +01:00
|
|
|
// The action triggers a `calculateNow` which in turn triggers a
|
|
|
|
// `resetForm (inducing a `calculateNow`) and a `calculateNow`.
|
|
|
|
// Without infinite loop prevention the field would be empty.
|
2022-05-02 19:28:00 +02:00
|
|
|
await page.click("[data-annotation-id='31R']");
|
|
|
|
await page.waitForFunction(
|
2024-11-17 21:05:37 +01:00
|
|
|
`${getQuerySelector("28R")}.value === "123"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("in issue14705.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue14705.pdf", getSelector("29R"));
|
2022-05-02 19:28:00 +02:00
|
|
|
pages.map(async ([, page]) => {
|
|
|
|
page.on("dialog", async dialog => {
|
|
|
|
await dialog.dismiss();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-05-02 19:28:00 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that field value is correctly updated", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-05-02 19:28:00 +02:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("29R"), "Hello World");
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("27R"));
|
2022-05-02 19:28:00 +02:00
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("29R")}.value !== "Hello World"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let text = await page.$eval(getSelector("29R"), el => el.value);
|
2022-05-02 19:28:00 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("checked");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("27R"));
|
2022-05-02 19:28:00 +02:00
|
|
|
|
|
|
|
await page.waitForFunction(
|
2022-06-17 22:01:20 +02:00
|
|
|
`${getQuerySelector("29R")}.value !== "checked"`
|
2022-05-02 19:28:00 +02:00
|
|
|
);
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("29R"), el => el.value);
|
2022-05-02 19:28:00 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("unchecked");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-05-22 14:37:17 +02:00
|
|
|
|
|
|
|
describe("in bug1766987.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("bug1766987.pdf", getSelector("75R"));
|
2022-05-22 14:37:17 +02:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-05-22 14:37:17 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that field value is correctly formatted", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-05-22 14:37:17 +02:00
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
let text = await page.$eval(getSelector("75R"), el => el.value);
|
2022-05-22 14:37:17 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("150.32 €");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("82R"), el => el.value);
|
2022-05-22 14:37:17 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("12.74 Kwh");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("91R"), el => el.value);
|
2022-05-22 14:37:17 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("352.19 Kwh");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
text = await page.$eval(getSelector("101R"), el => el.value);
|
2022-05-22 14:37:17 +02:00
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("20.57 €");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-06-17 15:20:40 +02:00
|
|
|
|
|
|
|
describe("in issue15053.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-17 22:01:20 +02:00
|
|
|
pages = await loadAndWait("issue15053.pdf", getSelector("44R"));
|
2022-06-17 15:20:40 +02:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-06-17 15:20:40 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a button and text field with a border are hidden", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-06-17 15:20:40 +02:00
|
|
|
|
|
|
|
let visibility = await page.$eval(
|
|
|
|
"[data-annotation-id='35R']",
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("visible");
|
|
|
|
|
|
|
|
visibility = await page.$eval(
|
|
|
|
"[data-annotation-id='51R']",
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("visible");
|
|
|
|
|
2022-06-17 22:01:20 +02:00
|
|
|
await page.click(getSelector("44R"));
|
2023-09-17 19:45:28 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`document.querySelector("[data-annotation-id='35R']").style.visibility === "hidden"`
|
|
|
|
);
|
2022-06-17 15:20:40 +02:00
|
|
|
|
|
|
|
visibility = await page.$eval(
|
|
|
|
"[data-annotation-id='35R']",
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
|
|
|
|
visibility = await page.$eval(
|
|
|
|
"[data-annotation-id='51R']",
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-06-19 16:39:54 +02:00
|
|
|
|
|
|
|
describe("in bug1675139.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-19 16:39:54 +02:00
|
|
|
pages = await loadAndWait("bug1675139.pdf", getSelector("48R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-06-19 16:39:54 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
2022-06-23 15:47:45 +02:00
|
|
|
it("must check that data-main-rotation is correct", async () => {
|
2022-06-19 16:39:54 +02:00
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-06-19 16:39:54 +02:00
|
|
|
|
|
|
|
let base = 0;
|
|
|
|
|
|
|
|
while (base !== 360) {
|
|
|
|
for (const [ref, angle] of [
|
|
|
|
[47, 0],
|
|
|
|
[42, 90],
|
|
|
|
[45, 180],
|
|
|
|
[46, 270],
|
|
|
|
]) {
|
2022-10-25 15:28:22 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
(sel, b, a) => {
|
|
|
|
const el = document.querySelector(sel);
|
|
|
|
const rotation =
|
|
|
|
parseInt(el.getAttribute("data-main-rotation")) || 0;
|
|
|
|
return rotation === (360 + ((360 - (b + a)) % 360)) % 360;
|
|
|
|
},
|
|
|
|
{},
|
2022-06-19 16:39:54 +02:00
|
|
|
`[data-annotation-id='${ref}R']`,
|
2022-10-25 15:28:22 +02:00
|
|
|
base,
|
|
|
|
angle
|
2022-06-19 16:39:54 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
base += 90;
|
|
|
|
await page.click(getSelector("48R"));
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-06-24 14:23:06 +02:00
|
|
|
|
|
|
|
describe("in issue15092.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-06-24 14:23:06 +02:00
|
|
|
pages = await loadAndWait("issue15092.pdf", getSelector("39R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-06-24 14:23:06 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
2024-08-18 18:56:32 +02:00
|
|
|
it("must check that a value is correctly updated on a field and its siblings", async () => {
|
2022-06-24 14:23:06 +02:00
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-06-24 14:23:06 +02:00
|
|
|
|
|
|
|
await clearInput(page, getSelector("39R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("39R"), "123");
|
2022-06-24 14:23:06 +02:00
|
|
|
|
|
|
|
await clearInput(page, getSelector("42R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("42R"), "456");
|
2022-06-24 14:23:06 +02:00
|
|
|
|
|
|
|
await page.click(getSelector("45R"));
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
2024-08-18 18:56:32 +02:00
|
|
|
`${getQuerySelector("43R")}.value === "579.00"`
|
2022-06-24 14:23:06 +02:00
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
2024-08-18 18:56:32 +02:00
|
|
|
`${getQuerySelector("46R")}.value === "579.00"`
|
2022-06-24 14:23:06 +02:00
|
|
|
);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-08-18 19:27:53 +02:00
|
|
|
|
|
|
|
describe("in bug1782564.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-08-18 19:27:53 +02:00
|
|
|
pages = await loadAndWait("bug1782564.pdf", getSelector("7R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-08-18 19:27:53 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that charLimit is correctly set", async () => {
|
|
|
|
await Promise.all(
|
2024-07-05 16:56:31 +02:00
|
|
|
pages.map(async ([, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-08-18 19:27:53 +02:00
|
|
|
|
2024-07-05 16:56:31 +02:00
|
|
|
// The default charLimit is 0, which indicates unlimited text length.
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("7R"), "abcdefghij");
|
2022-08-18 19:27:53 +02:00
|
|
|
await page.waitForFunction(
|
2024-07-05 16:56:31 +02:00
|
|
|
`${getQuerySelector("7R")}.value === "abcdefghij"`
|
2022-08-18 19:27:53 +02:00
|
|
|
);
|
|
|
|
|
2024-07-05 16:56:31 +02:00
|
|
|
// Increase the charLimit to 1 (this truncates the existing text).
|
|
|
|
await page.click(getSelector("9R"));
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.waitForFunction(`${getQuerySelector("7R")}.value === "a"`);
|
2022-08-18 19:27:53 +02:00
|
|
|
|
|
|
|
await clearInput(page, getSelector("7R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("7R"), "xyz");
|
2024-07-05 16:56:31 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("7R")}.value === "x"`);
|
2022-08-18 19:27:53 +02:00
|
|
|
|
2024-07-05 16:56:31 +02:00
|
|
|
// Increase the charLimit to 2.
|
2022-08-18 19:27:53 +02:00
|
|
|
await page.click(getSelector("9R"));
|
2024-07-05 16:56:31 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2022-08-18 19:27:53 +02:00
|
|
|
|
|
|
|
await clearInput(page, getSelector("7R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("7R"), "xyz");
|
2024-07-05 16:56:31 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("7R")}.value === "xy"`
|
|
|
|
);
|
2022-08-18 19:27:53 +02:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-11-28 15:53:17 +01:00
|
|
|
|
|
|
|
describe("in bug1802888.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-11-28 15:53:17 +01:00
|
|
|
pages = await loadAndWait("bug1802888.pdf", getSelector("30R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-11-28 15:53:17 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check field value is treated by default as a number", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-11-28 15:53:17 +01:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "123");
|
2022-11-28 15:53:17 +01:00
|
|
|
await page.click(getSelector("31R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("31R"), "456");
|
2022-11-28 15:53:17 +01:00
|
|
|
await page.click(getSelector("26R"));
|
|
|
|
await page.click(getSelector("27R"));
|
|
|
|
await page.waitForFunction(`${getQuerySelector("26R")}.value !== ""`);
|
|
|
|
|
|
|
|
const value = await page.$eval(getSelector("26R"), el => el.value);
|
|
|
|
expect(value).withContext(`In ${browserName}`).toEqual("579");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-11-29 16:37:02 +01:00
|
|
|
|
|
|
|
describe("in issue15753.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-11-29 16:37:02 +01:00
|
|
|
pages = await loadAndWait("issue15753.pdf", getSelector("27R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-11-29 16:37:02 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check field value is correctly updated when committed with ENTER key", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-11-29 16:37:02 +01:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("27R"), "abc");
|
2022-11-29 16:37:02 +01:00
|
|
|
await page.keyboard.press("Enter");
|
|
|
|
await page.waitForFunction(`${getQuerySelector("28R")}.value !== ""`);
|
|
|
|
let value = await page.$eval(getSelector("28R"), el => el.value);
|
|
|
|
expect(value).withContext(`In ${browserName}`).toEqual("abc");
|
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("27R"), "def");
|
2022-11-29 16:37:02 +01:00
|
|
|
|
|
|
|
await page.keyboard.press("Enter");
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("28R")}.value !== "abc"`
|
|
|
|
);
|
|
|
|
value = await page.$eval(getSelector("28R"), el => el.value);
|
|
|
|
expect(value).withContext(`In ${browserName}`).toEqual("abcdef");
|
|
|
|
|
2023-10-26 22:42:41 +02:00
|
|
|
await kbSelectAll(page);
|
2022-11-29 16:37:02 +01:00
|
|
|
await page.keyboard.press("Backspace");
|
|
|
|
|
|
|
|
await page.keyboard.press("Enter");
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("28R")}.value !== "abcdef"`
|
|
|
|
);
|
|
|
|
value = await page.$eval(getSelector("28R"), el => el.value);
|
|
|
|
expect(value).withContext(`In ${browserName}`).toEqual("");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-12-13 00:07:45 +01:00
|
|
|
|
|
|
|
describe("in issue15815.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-12-13 00:07:45 +01:00
|
|
|
pages = await loadAndWait("issue15815.pdf", getSelector("24R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-12-13 00:07:45 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check field value is correctly updated when committed with ENTER key", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-12-13 00:07:45 +01:00
|
|
|
|
|
|
|
let value = "A";
|
|
|
|
for (const [displayValue, exportValue] of [
|
|
|
|
["B", "x2"],
|
|
|
|
["C", "x3"],
|
|
|
|
["A", "x1"],
|
|
|
|
]) {
|
|
|
|
await clearInput(page, getSelector("27R"));
|
|
|
|
await page.select(getSelector("24R"), exportValue);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("27R")}.value !== ""`
|
|
|
|
);
|
|
|
|
const text = await page.$eval(getSelector("27R"), el => el.value);
|
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`value=${value}, changeEx=${exportValue}`);
|
|
|
|
value = displayValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const exportValue of ["x3", "x2", "x1"]) {
|
|
|
|
await clearInput(page, getSelector("27R"));
|
|
|
|
await page.type(getSelector("27R"), exportValue);
|
|
|
|
await page.click("[data-annotation-id='28R']");
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("24R")}.value === "${exportValue}"`
|
|
|
|
);
|
2022-12-13 00:07:45 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2022-12-13 16:08:36 +01:00
|
|
|
|
|
|
|
describe("in issue15818.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2022-12-13 16:08:36 +01:00
|
|
|
pages = await loadAndWait("issue15818.pdf", getSelector("27R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2022-12-13 16:08:36 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check the field value set when the document is open", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-12-13 16:08:36 +01:00
|
|
|
|
|
|
|
await page.waitForFunction(`${getQuerySelector("27R")}.value !== ""`);
|
|
|
|
|
|
|
|
const text = await page.$eval(getSelector("27R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("hello world");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check the format action is called when setFocus is used", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2022-12-13 16:08:36 +01:00
|
|
|
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("30R"), "abc");
|
2022-12-13 16:08:36 +01:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("30R")}.value !== "abc"`
|
|
|
|
);
|
|
|
|
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`window.document.activeElement.getAttribute("data-element-id") !== "30R"`
|
|
|
|
);
|
2022-12-13 16:08:36 +01:00
|
|
|
const focusedId = await page.evaluate(_ =>
|
|
|
|
window.document.activeElement.getAttribute("data-element-id")
|
|
|
|
);
|
|
|
|
|
|
|
|
expect(focusedId).withContext(`In ${browserName}`).toEqual("31R");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-01-04 19:49:31 +01:00
|
|
|
|
|
|
|
describe("in autoprint.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-10-07 19:20:06 +02:00
|
|
|
// Autoprinting is triggered by the `Open` event, which is one of the
|
|
|
|
// first events to be dispatched to the sandbox, even before scripting
|
|
|
|
// is reported to be ready. It's therefore important that `loadAndWait`
|
2023-12-09 15:00:11 +01:00
|
|
|
// returns control as soon as possible after opening the PDF document.
|
|
|
|
// Note that the `autoprint.pdf` file is very small, so printing
|
2023-10-07 19:20:06 +02:00
|
|
|
// it is usually very fast and therefore activating the selector check
|
|
|
|
// too late will cause it to never resolve because printing is already
|
|
|
|
// done (and the printed page div removed) before we even get to it.
|
2024-08-16 18:06:53 +01:00
|
|
|
pages = await loadAndWait("autoprint.pdf", "", null /* zoom = */, {
|
2024-08-20 22:24:08 +01:00
|
|
|
earlySetup: () => {
|
|
|
|
// No need to trigger the print dialog.
|
|
|
|
window.print = () => {};
|
2024-08-16 18:06:53 +01:00
|
|
|
},
|
|
|
|
appSetup: app => {
|
|
|
|
app._testPrintResolver = Promise.withResolvers();
|
|
|
|
},
|
|
|
|
eventBusSetup: eventBus => {
|
|
|
|
eventBus.on(
|
2024-09-04 13:49:02 +02:00
|
|
|
"afterprint",
|
2024-08-16 18:06:53 +01:00
|
|
|
() => {
|
|
|
|
window.PDFViewerApplication._testPrintResolver.resolve();
|
|
|
|
},
|
|
|
|
{ once: true }
|
|
|
|
);
|
|
|
|
},
|
|
|
|
});
|
2023-01-04 19:49:31 +01:00
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-01-04 19:49:31 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check if printing is triggered when the document is open", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2024-08-20 22:24:08 +01:00
|
|
|
await awaitPromise(
|
|
|
|
await page.evaluateHandle(() => [
|
|
|
|
window.PDFViewerApplication._testPrintResolver.promise,
|
|
|
|
])
|
|
|
|
);
|
2023-01-04 19:49:31 +01:00
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
describe("in bug1811694.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-01-26 13:04:48 +01:00
|
|
|
pages = await loadAndWait("bug1811694.pdf", getSelector("25R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-01-26 13:04:48 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field value with a number isn't changed", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
await page.click(getSelector("25R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("25R"), "00000000123");
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("25R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("00000000123");
|
|
|
|
|
|
|
|
await page.click(getSelector("26R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
text = await page.$eval(getSelector("25R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("00000000123");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("in bug1811510.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-01-26 13:04:48 +01:00
|
|
|
pages = await loadAndWait("bug1811510.pdf", getSelector("22R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-01-26 13:04:48 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field value with a number with a comma has the correct value", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("22R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("5,25");
|
|
|
|
|
|
|
|
await page.$eval(getSelector("31R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("5,25");
|
|
|
|
|
|
|
|
await page.click(getSelector("22R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
text = await page.$eval(getSelector("22R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("5,25");
|
|
|
|
|
|
|
|
await page.click(getSelector("31R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("31R")}.value !== "5,25"`
|
|
|
|
);
|
2023-01-26 13:04:48 +01:00
|
|
|
|
|
|
|
text = await page.$eval(getSelector("31R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("5.25");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-02-19 16:33:05 +01:00
|
|
|
|
|
|
|
describe("in issue16067.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-02-19 16:33:05 +01:00
|
|
|
pages = await loadAndWait("issue16067.pdf", getSelector("6R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-02-19 16:33:05 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field has the correct value when a choice is changed", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-02-19 16:33:05 +01:00
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("44R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("");
|
|
|
|
|
|
|
|
await page.select(getSelector("6R"), "Yes");
|
2024-04-15 15:55:28 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("44R")}.value !== ""`);
|
2023-02-19 16:33:05 +01:00
|
|
|
text = await page.$eval(getSelector("44R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("Yes");
|
|
|
|
|
|
|
|
await clearInput(page, getSelector("44R"));
|
|
|
|
|
|
|
|
await page.select(getSelector("6R"), "No");
|
2024-04-15 15:55:28 +02:00
|
|
|
await page.waitForFunction(`${getQuerySelector("44R")}.value !== ""`);
|
2023-02-19 16:33:05 +01:00
|
|
|
text = await page.$eval(getSelector("44R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("No");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-05-16 23:03:01 +02:00
|
|
|
|
|
|
|
describe("in bug1825002.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-05-16 23:03:01 +02:00
|
|
|
pages = await loadAndWait("bug1825002.pdf", getSelector("23R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-05-16 23:03:01 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field has the correct formatted value", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-05-16 23:03:01 +02:00
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("23R"), el => el.value);
|
|
|
|
expect(text)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("ABCDEFGHIJKLMN");
|
|
|
|
|
|
|
|
await page.click(getSelector("23R"));
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("23R")}.value !== "ABCDEFGHIJKLMN"`
|
|
|
|
);
|
|
|
|
|
|
|
|
text = await page.$eval(getSelector("23R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("123,45.7A");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field is empty", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-05-16 23:03:01 +02:00
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("26R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("");
|
|
|
|
|
|
|
|
await page.click(getSelector("26R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("26R"), "abcde");
|
2023-05-16 23:03:01 +02:00
|
|
|
await page.click(getSelector("23R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await clearInput(page, getSelector("26R"));
|
2023-05-16 23:03:01 +02:00
|
|
|
await page.click(getSelector("23R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2023-05-16 23:03:01 +02:00
|
|
|
|
|
|
|
text = await page.$eval(getSelector("26R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-07-21 09:49:11 +02:00
|
|
|
|
|
|
|
describe("in bug1844576.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-07-21 09:49:11 +02:00
|
|
|
pages = await loadAndWait("bug1844576.pdf", getSelector("9R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-07-21 09:49:11 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a field has the correct formatted value", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
|
|
|
|
2023-09-17 12:55:13 +02:00
|
|
|
const hasVisibleCanvas = await page.$eval(
|
|
|
|
`[data-annotation-id="9R"] > canvas`,
|
|
|
|
elem => elem && !elem.hasAttribute("hidden")
|
|
|
|
);
|
2023-07-21 09:49:11 +02:00
|
|
|
expect(hasVisibleCanvas)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(true);
|
|
|
|
|
2023-09-17 12:55:13 +02:00
|
|
|
const hasHiddenInput = await page.$eval(
|
|
|
|
`[data-annotation-id="9R"] > input`,
|
|
|
|
elem => elem?.hasAttribute("hidden")
|
|
|
|
);
|
2023-07-21 09:49:11 +02:00
|
|
|
expect(hasHiddenInput).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
|
|
|
|
await page.click(getSelector("12R"));
|
2023-09-17 12:59:56 +02:00
|
|
|
await page.waitForSelector(
|
|
|
|
`[data-annotation-id="9R"] > canvas[hidden]`
|
|
|
|
);
|
2023-07-21 09:49:11 +02:00
|
|
|
|
2023-09-17 12:55:13 +02:00
|
|
|
const hasHiddenCanvas = await page.$eval(
|
|
|
|
`[data-annotation-id="9R"] > canvas`,
|
|
|
|
elem => elem?.hasAttribute("hidden")
|
|
|
|
);
|
2023-07-21 09:49:11 +02:00
|
|
|
expect(hasHiddenCanvas)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(true);
|
|
|
|
|
2023-09-17 12:55:13 +02:00
|
|
|
const hasVisibleInput = await page.$eval(
|
|
|
|
`[data-annotation-id="9R"] > input`,
|
|
|
|
elem => elem && !elem.hasAttribute("hidden")
|
|
|
|
);
|
2023-07-21 09:49:11 +02:00
|
|
|
expect(hasVisibleInput)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(true);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-07-30 15:52:27 +02:00
|
|
|
|
|
|
|
describe("in annotation_hidden_noview.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-07-30 15:52:27 +02:00
|
|
|
pages = await loadAndWait(
|
|
|
|
"annotation_hidden_noview.pdf",
|
|
|
|
getSelector("11R")
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-07-30 15:52:27 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that invisible fields are made visible", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-07-30 15:52:27 +02:00
|
|
|
|
|
|
|
let visibility = await page.$eval(
|
|
|
|
getSelector("7R"),
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
|
|
|
|
visibility = await page.$eval(
|
|
|
|
getSelector("8R"),
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility).withContext(`In ${browserName}`).toEqual("hidden");
|
|
|
|
|
|
|
|
await page.click(getSelector("11R"));
|
|
|
|
|
2024-04-14 18:49:31 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getComputedStyleSelector("7R")}.visibility !== "hidden"`
|
|
|
|
);
|
2023-07-30 15:52:27 +02:00
|
|
|
visibility = await page.$eval(
|
|
|
|
getSelector("7R"),
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("visible");
|
|
|
|
|
2024-04-14 18:49:31 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getComputedStyleSelector("8R")}.visibility !== "hidden"`
|
|
|
|
);
|
2023-07-30 15:52:27 +02:00
|
|
|
visibility = await page.$eval(
|
|
|
|
getSelector("8R"),
|
|
|
|
el => getComputedStyle(el).visibility
|
|
|
|
);
|
|
|
|
expect(visibility)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual("visible");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
describe("in issue16863.pdf", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-08-23 16:00:52 -04:00
|
|
|
pages = await loadAndWait("issue16863.pdf", getSelector("334R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-08-23 16:00:52 -04:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that checkboxes are correctly resetted", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
let readonly = await page.$eval(
|
|
|
|
getSelector("353R"),
|
|
|
|
el => el.disabled
|
|
|
|
);
|
|
|
|
expect(readonly).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
await page.click(getSelector("334R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
readonly = await page.$eval(getSelector("353R"), el => el.disabled);
|
|
|
|
expect(readonly).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
await page.click(getSelector("351R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await waitForSandboxTrip(page);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
readonly = await page.$eval(getSelector("353R"), el => el.disabled);
|
|
|
|
expect(readonly).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
await page.click(getSelector("352R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("353R")}.disabled !== true`
|
|
|
|
);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
readonly = await page.$eval(getSelector("353R"), el => el.disabled);
|
|
|
|
expect(readonly).withContext(`In ${browserName}`).toEqual(false);
|
|
|
|
|
|
|
|
await page.click(getSelector("353R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("353R")}.checked !== false`
|
|
|
|
);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
let checked = await page.$eval(getSelector("353R"), el => el.checked);
|
|
|
|
expect(checked).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
await page.click(getSelector("334R"));
|
2024-04-19 16:54:54 +02:00
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("353R")}.disabled !== false`
|
|
|
|
);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("353R")}.checked !== true`
|
|
|
|
);
|
2023-08-23 16:00:52 -04:00
|
|
|
|
|
|
|
readonly = await page.$eval(getSelector("353R"), el => el.disabled);
|
|
|
|
expect(readonly).withContext(`In ${browserName}`).toEqual(true);
|
|
|
|
checked = await page.$eval(getSelector("353R"), el => el.checked);
|
|
|
|
expect(checked).withContext(`In ${browserName}`).toEqual(false);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-09-05 14:15:01 +02:00
|
|
|
|
|
|
|
describe("Textfields and focus", () => {
|
|
|
|
let pages;
|
|
|
|
let otherPages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-09-05 14:15:01 +02:00
|
|
|
otherPages = await Promise.all(
|
|
|
|
global.integrationSessions.map(async session =>
|
|
|
|
session.browser.newPage()
|
|
|
|
)
|
|
|
|
);
|
|
|
|
pages = await loadAndWait("evaljs.pdf", getSelector("55R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-09-05 14:15:01 +02:00
|
|
|
await closePages(pages);
|
|
|
|
await Promise.all(otherPages.map(page => page.close()));
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that focus/blur callbacks aren't called", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-09-05 14:15:01 +02:00
|
|
|
|
|
|
|
await page.click(getSelector("55R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("55R"), "Hello");
|
2023-09-05 14:15:01 +02:00
|
|
|
await page.click(getSelector("56R"));
|
|
|
|
|
|
|
|
await page.click(getSelector("55R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await page.type(getSelector("55R"), " World");
|
2023-09-05 14:15:01 +02:00
|
|
|
|
|
|
|
await otherPages[i].bringToFront();
|
2024-04-09 15:59:23 +02:00
|
|
|
// eslint-disable-next-line no-restricted-syntax
|
2024-02-10 18:21:34 +01:00
|
|
|
await waitForTimeout(100);
|
2023-09-05 14:15:01 +02:00
|
|
|
await page.bringToFront();
|
2024-04-09 15:59:23 +02:00
|
|
|
// eslint-disable-next-line no-restricted-syntax
|
2024-02-10 18:21:34 +01:00
|
|
|
await waitForTimeout(100);
|
2023-09-05 14:15:01 +02:00
|
|
|
|
|
|
|
const text = await page.$eval(getSelector("55R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("Hello World");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-11-09 13:50:33 +01:00
|
|
|
|
|
|
|
describe("Textfield with a Blur callback", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-11-09 13:50:33 +01:00
|
|
|
pages = await loadAndWait("bug1863910.pdf", getSelector("25R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-11-09 13:50:33 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that blur callback is called", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-11-09 13:50:33 +01:00
|
|
|
|
|
|
|
await page.click(getSelector("25R"));
|
|
|
|
await page.click(getSelector("26R"));
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
|
|
|
sel => document.querySelector(sel).value !== "",
|
|
|
|
{},
|
|
|
|
getSelector("26R")
|
|
|
|
);
|
|
|
|
|
|
|
|
const text = await page.$eval(getSelector("26R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("hello");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2023-11-13 11:05:03 +01:00
|
|
|
|
|
|
|
describe("Radio button without T value", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2023-11-13 11:05:03 +01:00
|
|
|
pages = await loadAndWait("bug1860602.pdf", getSelector("22R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2023-11-13 11:05:03 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that only one radio is selected", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2023-11-13 11:05:03 +01:00
|
|
|
|
2024-07-06 19:07:03 +02:00
|
|
|
await scrollIntoView(page, getSelector("22R"));
|
2023-11-13 11:05:03 +01:00
|
|
|
await page.click(getSelector("25R"));
|
|
|
|
await waitForEntryInStorage(page, "25R", { value: true });
|
|
|
|
|
|
|
|
let storage = await getAnnotationStorage(page);
|
|
|
|
expect(storage)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual({
|
|
|
|
"25R": { value: true },
|
|
|
|
"28R": { value: false },
|
2023-11-22 20:23:52 +01:00
|
|
|
"35R": { value: false },
|
|
|
|
"38R": { value: false },
|
|
|
|
"41R": { value: false },
|
|
|
|
"44R": { value: false },
|
|
|
|
"47R": { value: false },
|
|
|
|
"50R": { value: false },
|
|
|
|
"22R": { value: false },
|
2023-11-13 11:05:03 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
await page.click(getSelector("22R"));
|
|
|
|
await waitForEntryInStorage(page, "22R", { value: true });
|
|
|
|
|
|
|
|
storage = await getAnnotationStorage(page);
|
|
|
|
expect(storage)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual({
|
|
|
|
"25R": { value: false },
|
|
|
|
"28R": { value: false },
|
2023-11-22 20:23:52 +01:00
|
|
|
"35R": { value: false },
|
|
|
|
"38R": { value: false },
|
|
|
|
"41R": { value: false },
|
|
|
|
"44R": { value: false },
|
|
|
|
"47R": { value: false },
|
|
|
|
"50R": { value: false },
|
|
|
|
"22R": { value: true },
|
2023-11-13 11:05:03 +01:00
|
|
|
});
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-01-19 17:47:05 +01:00
|
|
|
|
|
|
|
describe("Textfield with a number and some decimals", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-01-19 17:47:05 +01:00
|
|
|
pages = await loadAndWait("issue17540.pdf", getSelector("15R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-01-19 17:47:05 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check the number has the correct number of decimals", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2024-01-19 17:47:05 +01:00
|
|
|
|
|
|
|
await page.click(getSelector("15R"));
|
|
|
|
await page.type(getSelector("15R"), "3");
|
|
|
|
await page.keyboard.press("Enter");
|
|
|
|
|
|
|
|
await page.waitForFunction(
|
|
|
|
sel => document.querySelector(sel).value !== "",
|
|
|
|
{},
|
|
|
|
getSelector("16R")
|
|
|
|
);
|
|
|
|
|
|
|
|
const text = await page.$eval(getSelector("16R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("0.900");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-04-03 22:24:17 +02:00
|
|
|
|
|
|
|
describe("Textfield with a zip code starting with 0", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-04-03 22:24:17 +02:00
|
|
|
pages = await loadAndWait("bug1889122.pdf", getSelector("24R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-04-03 22:24:17 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check the zip code is correctly formatted", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2024-04-03 22:24:17 +02:00
|
|
|
|
|
|
|
await page.click(getSelector("24R"));
|
2024-10-06 19:46:59 +02:00
|
|
|
await typeAndWaitForSandbox(page, getSelector("24R"), "01234");
|
2024-04-03 22:24:17 +02:00
|
|
|
await page.keyboard.press("Tab");
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
|
|
|
|
const text = await page.$eval(getSelector("24R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("01234");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-04-24 13:02:03 +02:00
|
|
|
|
|
|
|
describe("Value of event.change when a choice list is modified", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-04-24 13:02:03 +02:00
|
|
|
pages = await loadAndWait("issue17998.pdf", getSelector("7R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-04-24 13:02:03 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check the properties of the event", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2024-04-24 13:02:03 +02:00
|
|
|
|
|
|
|
for (const [value, expected] of [
|
|
|
|
["b", "change=B,changeEx=b,value=A"],
|
|
|
|
["c", "change=C,changeEx=c,value=B"],
|
|
|
|
["a", "change=A,changeEx=a,value=C"],
|
|
|
|
]) {
|
|
|
|
await page.select(getSelector("7R"), value);
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("10R")}.value !== ""`
|
|
|
|
);
|
|
|
|
const text = await page.$eval(getSelector("10R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual(expected);
|
|
|
|
await clearInput(page, getSelector("10R"));
|
|
|
|
}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-06-28 21:31:12 +02:00
|
|
|
|
|
|
|
describe("PageOpen and PageClose actions in fields", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-06-28 21:31:12 +02:00
|
|
|
pages = await loadAndWait("issue18305.pdf", getSelector("7R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-06-28 21:31:12 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that PageOpen/PageClose actions are correctly executed", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
2024-07-06 19:07:03 +02:00
|
|
|
await waitForScripting(page);
|
2024-06-28 21:31:12 +02:00
|
|
|
|
|
|
|
const buttonSelector = `[data-annotation-id="25R"`;
|
|
|
|
await page.waitForSelector(buttonSelector, {
|
|
|
|
timeout: 0,
|
|
|
|
});
|
|
|
|
|
|
|
|
const inputSelector = getSelector("7R");
|
|
|
|
let text = await page.$eval(inputSelector, el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("");
|
|
|
|
|
|
|
|
text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
inputSelector,
|
|
|
|
() => scrollIntoView(page, buttonSelector),
|
|
|
|
false
|
|
|
|
);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("PageOpen");
|
|
|
|
|
|
|
|
text = await actAndWaitForInput(
|
|
|
|
page,
|
|
|
|
inputSelector,
|
|
|
|
() => scrollIntoView(page, inputSelector),
|
|
|
|
false
|
|
|
|
);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("PageClose");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-08-02 21:49:00 +02:00
|
|
|
|
|
|
|
describe("Compute product of different fields", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-08-02 21:49:00 +02:00
|
|
|
pages = await loadAndWait("issue18536.pdf", getSelector("34R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-08-02 21:49:00 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that the product are null", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
const inputSelector = getSelector("34R");
|
|
|
|
await page.click(inputSelector);
|
|
|
|
await page.type(inputSelector, "123");
|
|
|
|
await page.click(getSelector("28R"));
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("36R")}.value !== "0"`
|
|
|
|
);
|
|
|
|
|
|
|
|
let text = await page.$eval(getSelector("30R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("0");
|
|
|
|
|
|
|
|
text = await page.$eval(getSelector("35R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("0");
|
|
|
|
|
|
|
|
text = await page.$eval(getSelector("36R"), el => el.value);
|
|
|
|
expect(text).withContext(`In ${browserName}`).toEqual("123");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-08-05 19:11:48 +02:00
|
|
|
|
|
|
|
describe("Calculate field value even if one callback throws", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-08-05 19:11:48 +02:00
|
|
|
pages = await loadAndWait("issue18561.pdf", getSelector("24R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-08-05 19:11:48 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that the product is computed although a callback threw", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
const inputSelector = getSelector("24R");
|
|
|
|
await page.click(inputSelector);
|
|
|
|
await page.type(inputSelector, "123");
|
|
|
|
await page.click(getSelector("25R"));
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("28R")}.value === "12300"`
|
|
|
|
);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-09-11 17:19:34 +02:00
|
|
|
|
|
|
|
describe("Correctly format numbers", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-09-11 17:19:34 +02:00
|
|
|
pages = await loadAndWait("bug1918115.pdf", getSelector("33R"));
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-09-11 17:19:34 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that the computed value is correct", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page], i) => {
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
const inputSelector = getSelector("33R");
|
|
|
|
await page.click(inputSelector);
|
|
|
|
await page.type(inputSelector, "7");
|
|
|
|
await page.click(getSelector("34R"));
|
|
|
|
await page.waitForFunction(
|
|
|
|
`${getQuerySelector("35R")}.value === "324,00"`
|
|
|
|
);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-10-17 18:27:12 +02:00
|
|
|
|
|
|
|
describe("Change radio property", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-10-17 18:27:12 +02:00
|
|
|
pages = await loadAndWait("bug1922766.pdf", "[data-annotation-id='44R']");
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-10-17 18:27:12 +02:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that a change on a radio implies the change on all the radio in the group", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
const checkColor = async color => {
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
for (const i of [40, 41, 42, 43]) {
|
|
|
|
const bgColor = await page.$eval(
|
|
|
|
`[data-element-id='${i}R']`,
|
|
|
|
el => getComputedStyle(el).backgroundColor
|
|
|
|
);
|
|
|
|
expect(bgColor)
|
|
|
|
.withContext(`In ${browserName}`)
|
|
|
|
.toEqual(`rgb(${color.join(", ")})`);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
await checkColor([255, 0, 0]);
|
|
|
|
await page.click("[data-annotation-id='44R']");
|
|
|
|
await checkColor([0, 0, 255]);
|
|
|
|
await page.click("[data-annotation-id='44R']");
|
|
|
|
await checkColor([255, 0, 0]);
|
|
|
|
|
|
|
|
await page.click("[data-annotation-id='43R']");
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
await page.click("[data-annotation-id='44R']");
|
|
|
|
await checkColor([0, 0, 255]);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2024-11-29 17:28:21 +01:00
|
|
|
|
|
|
|
describe("Date creation must be timezone consistent", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2024-11-29 17:28:21 +01:00
|
|
|
pages = await loadAndWait("bug1934157.pdf", "[data-annotation-id='24R']");
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2024-11-29 17:28:21 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that date entered by the user is consistent", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
|
|
|
if (browserName === "firefox") {
|
|
|
|
// Skip the test for Firefox as it doesn't support the timezone
|
|
|
|
// feature yet with BiDi.
|
|
|
|
// See https://github.com/puppeteer/puppeteer/issues/13344.
|
|
|
|
// TODO: Remove this check once the issue is fixed.
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
await page.emulateTimezone("Pacific/Honolulu");
|
|
|
|
|
|
|
|
const expectedDate = "02/01/2000";
|
|
|
|
await page.type(getSelector("24R"), expectedDate);
|
|
|
|
await page.click(getSelector("25R"));
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
|
|
|
|
const date = await page.$eval(getSelector("24R"), el => el.value);
|
|
|
|
expect(date).withContext(`In ${browserName}`).toEqual(expectedDate);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2025-02-17 21:53:22 +01:00
|
|
|
|
|
|
|
describe("Skip throwing actions (issue 19505)", () => {
|
|
|
|
let pages;
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
beforeEach(async () => {
|
2025-02-17 21:53:22 +01:00
|
|
|
pages = await loadAndWait("issue19505.pdf", "[data-annotation-id='24R']");
|
|
|
|
});
|
|
|
|
|
2025-03-16 20:08:56 +01:00
|
|
|
afterEach(async () => {
|
2025-02-17 21:53:22 +01:00
|
|
|
await closePages(pages);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("must check that date entered are in the input", async () => {
|
|
|
|
await Promise.all(
|
|
|
|
pages.map(async ([browserName, page]) => {
|
|
|
|
await waitForScripting(page);
|
|
|
|
|
|
|
|
const fieldSelector = getSelector("24R");
|
|
|
|
for (const c of "Hello World") {
|
|
|
|
await page.type(fieldSelector, c);
|
|
|
|
await waitForSandboxTrip(page);
|
|
|
|
}
|
|
|
|
|
|
|
|
const value = await page.$eval(fieldSelector, el => el.value);
|
|
|
|
expect(value).withContext(`In ${browserName}`).toEqual("Hello World");
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
2020-11-30 18:11:28 +01:00
|
|
|
});
|