Merge pull request #19198 from calixteman/fix_intermittent_itest_chrome
Fix intermittent failures when moving a freetext annotation in integration tests
This commit is contained in:
commit
b35999d837
@ -1278,6 +1278,11 @@ class AnnotationEditor {
|
|||||||
this.#moveInDOMTimeout = setTimeout(() => {
|
this.#moveInDOMTimeout = setTimeout(() => {
|
||||||
this.#moveInDOMTimeout = null;
|
this.#moveInDOMTimeout = null;
|
||||||
this.parent?.moveEditorInDOM(this);
|
this.parent?.moveEditorInDOM(this);
|
||||||
|
if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("TESTING")) {
|
||||||
|
this._uiManager._eventBus.dispatch("editormovedindom", {
|
||||||
|
source: this,
|
||||||
|
});
|
||||||
|
}
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,7 @@ import {
|
|||||||
switchToEditor,
|
switchToEditor,
|
||||||
waitForAnnotationEditorLayer,
|
waitForAnnotationEditorLayer,
|
||||||
waitForAnnotationModeChanged,
|
waitForAnnotationModeChanged,
|
||||||
|
waitForEditorMovedInDOM,
|
||||||
waitForSelectedEditor,
|
waitForSelectedEditor,
|
||||||
waitForSerialized,
|
waitForSerialized,
|
||||||
waitForStorageEntries,
|
waitForStorageEntries,
|
||||||
@ -88,6 +89,17 @@ const waitForPositionChange = (page, selector, xy) =>
|
|||||||
xy
|
xy
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const moveEditor = async (page, selector, n, pressKey) => {
|
||||||
|
let xy = await getXY(page, selector);
|
||||||
|
for (let i = 0; i < n; i++) {
|
||||||
|
const handle = await waitForEditorMovedInDOM(page);
|
||||||
|
await pressKey();
|
||||||
|
await awaitPromise(handle);
|
||||||
|
await waitForPositionChange(page, selector, xy);
|
||||||
|
xy = await getXY(page, selector);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const cancelFocusIn = async (page, selector) => {
|
const cancelFocusIn = async (page, selector) => {
|
||||||
page.evaluate(sel => {
|
page.evaluate(sel => {
|
||||||
const el = document.querySelector(sel);
|
const el = document.querySelector(sel);
|
||||||
@ -1963,12 +1975,9 @@ describe("FreeText Editor", () => {
|
|||||||
|
|
||||||
const [pageX, pageY] = await getFirstSerialized(page, x => x.rect);
|
const [pageX, pageY] = await getFirstSerialized(page, x => x.rect);
|
||||||
|
|
||||||
let xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 20, () =>
|
||||||
for (let i = 0; i < 20; i++) {
|
page.keyboard.press("ArrowRight")
|
||||||
await page.keyboard.press("ArrowRight");
|
);
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
let [newX, newY] = await getFirstSerialized(page, x => x.rect);
|
let [newX, newY] = await getFirstSerialized(page, x => x.rect);
|
||||||
expect(Math.round(newX))
|
expect(Math.round(newX))
|
||||||
@ -1978,11 +1987,9 @@ describe("FreeText Editor", () => {
|
|||||||
.withContext(`In ${browserName}`)
|
.withContext(`In ${browserName}`)
|
||||||
.toEqual(Math.round(pageY));
|
.toEqual(Math.round(pageY));
|
||||||
|
|
||||||
for (let i = 0; i < 20; i++) {
|
await moveEditor(page, selectorEditor, 20, () =>
|
||||||
await page.keyboard.press("ArrowDown");
|
page.keyboard.press("ArrowDown")
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
);
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
||||||
expect(Math.round(newX))
|
expect(Math.round(newX))
|
||||||
@ -1992,11 +1999,7 @@ describe("FreeText Editor", () => {
|
|||||||
.withContext(`In ${browserName}`)
|
.withContext(`In ${browserName}`)
|
||||||
.toEqual(Math.round(pageY - 20));
|
.toEqual(Math.round(pageY - 20));
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page));
|
||||||
await kbBigMoveLeft(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
||||||
expect(Math.round(newX))
|
expect(Math.round(newX))
|
||||||
@ -2006,11 +2009,7 @@ describe("FreeText Editor", () => {
|
|||||||
.withContext(`In ${browserName}`)
|
.withContext(`In ${browserName}`)
|
||||||
.toEqual(Math.round(pageY - 20));
|
.toEqual(Math.round(pageY - 20));
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page));
|
||||||
await kbBigMoveUp(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
[newX, newY] = await getFirstSerialized(page, x => x.rect);
|
||||||
expect(Math.round(newX))
|
expect(Math.round(newX))
|
||||||
@ -2036,12 +2035,9 @@ describe("FreeText Editor", () => {
|
|||||||
const pageWidth = page2X - page1X;
|
const pageWidth = page2X - page1X;
|
||||||
|
|
||||||
const selectorEditor = getEditorSelector(0);
|
const selectorEditor = getEditorSelector(0);
|
||||||
let xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 5, () =>
|
||||||
for (let i = 0; i < 5; i++) {
|
page.keyboard.press("ArrowRight")
|
||||||
await page.keyboard.press("ArrowRight");
|
);
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
const [new1X, , new2X] = await getFirstSerialized(page, x => x.rect);
|
const [new1X, , new2X] = await getFirstSerialized(page, x => x.rect);
|
||||||
const newWidth = new2X - new1X;
|
const newWidth = new2X - new1X;
|
||||||
@ -2088,42 +2084,21 @@ describe("FreeText Editor", () => {
|
|||||||
visible: true,
|
visible: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
let xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 20, () =>
|
||||||
for (let i = 0; i < 20; i++) {
|
page.keyboard.press("ArrowRight")
|
||||||
await page.keyboard.press("ArrowRight");
|
);
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveDown(page));
|
||||||
await kbBigMoveDown(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < 20; i++) {
|
await moveEditor(page, selectorEditor, 20, () =>
|
||||||
await page.keyboard.press("ArrowLeft");
|
page.keyboard.press("ArrowLeft")
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
);
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveUp(page));
|
||||||
await kbBigMoveUp(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveRight(page));
|
||||||
await kbBigMoveRight(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
await moveEditor(page, selectorEditor, 2, () => kbBigMoveLeft(page));
|
||||||
await kbBigMoveLeft(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
await page.type(`${selectorEditor} .internal`, data);
|
await page.type(`${selectorEditor} .internal`, data);
|
||||||
await page.keyboard.press("Escape");
|
await page.keyboard.press("Escape");
|
||||||
@ -2287,11 +2262,8 @@ describe("FreeText Editor", () => {
|
|||||||
|
|
||||||
const { y: y0, height } = await getRect(page, getEditorSelector(0));
|
const { y: y0, height } = await getRect(page, getEditorSelector(0));
|
||||||
const selectorEditor = getEditorSelector(1);
|
const selectorEditor = getEditorSelector(1);
|
||||||
let xy = await getXY(page, selectorEditor);
|
|
||||||
while ((await getRect(page, selectorEditor)).y > y0 - height) {
|
while ((await getRect(page, selectorEditor)).y > y0 - height) {
|
||||||
await kbBigMoveUp(page);
|
await moveEditor(page, selectorEditor, 1, () => kbBigMoveUp(page));
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The editor must be moved in the DOM and potentially the focus
|
// The editor must be moved in the DOM and potentially the focus
|
||||||
@ -2727,12 +2699,7 @@ describe("FreeText Editor", () => {
|
|||||||
visible: true,
|
visible: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
let xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 5, () => kbBigMoveUp(page));
|
||||||
for (let i = 0; i < 5; i++) {
|
|
||||||
await kbBigMoveUp(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = "Hello PDF.js World !!";
|
const data = "Hello PDF.js World !!";
|
||||||
await page.type(`${selectorEditor} .internal`, data);
|
await page.type(`${selectorEditor} .internal`, data);
|
||||||
@ -2757,12 +2724,7 @@ describe("FreeText Editor", () => {
|
|||||||
visible: true,
|
visible: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 5, () => kbBigMoveDown(page));
|
||||||
for (let i = 0; i < 5; i++) {
|
|
||||||
await kbBigMoveDown(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
await page.type(`${selectorEditor} .internal`, data);
|
await page.type(`${selectorEditor} .internal`, data);
|
||||||
|
|
||||||
@ -2792,12 +2754,7 @@ describe("FreeText Editor", () => {
|
|||||||
visible: true,
|
visible: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
let xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 10, () => kbBigMoveLeft(page));
|
||||||
for (let i = 0; i < 10; i++) {
|
|
||||||
await kbBigMoveLeft(page);
|
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = "Hello PDF.js World !!";
|
const data = "Hello PDF.js World !!";
|
||||||
await page.type(`${selectorEditor} .internal`, data);
|
await page.type(`${selectorEditor} .internal`, data);
|
||||||
@ -2822,12 +2779,9 @@ describe("FreeText Editor", () => {
|
|||||||
visible: true,
|
visible: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
xy = await getXY(page, selectorEditor);
|
await moveEditor(page, selectorEditor, 10, () =>
|
||||||
for (let i = 0; i < 10; i++) {
|
kbBigMoveRight(page)
|
||||||
await kbBigMoveRight(page);
|
);
|
||||||
await waitForPositionChange(page, selectorEditor, xy);
|
|
||||||
xy = await getXY(page, selectorEditor);
|
|
||||||
}
|
|
||||||
|
|
||||||
await page.type(`${selectorEditor} .internal`, data);
|
await page.type(`${selectorEditor} .internal`, data);
|
||||||
|
|
||||||
|
|||||||
@ -563,6 +563,14 @@ function waitForPageRendered(page) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function waitForEditorMovedInDOM(page) {
|
||||||
|
return createPromise(page, resolve => {
|
||||||
|
window.PDFViewerApplication.eventBus.on("editormovedindom", resolve, {
|
||||||
|
once: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function scrollIntoView(page, selector) {
|
async function scrollIntoView(page, selector) {
|
||||||
const handle = await page.evaluateHandle(
|
const handle = await page.evaluateHandle(
|
||||||
sel => [
|
sel => [
|
||||||
@ -878,6 +886,7 @@ export {
|
|||||||
waitAndClick,
|
waitAndClick,
|
||||||
waitForAnnotationEditorLayer,
|
waitForAnnotationEditorLayer,
|
||||||
waitForAnnotationModeChanged,
|
waitForAnnotationModeChanged,
|
||||||
|
waitForEditorMovedInDOM,
|
||||||
waitForEntryInStorage,
|
waitForEntryInStorage,
|
||||||
waitForEvent,
|
waitForEvent,
|
||||||
waitForNoElement,
|
waitForNoElement,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user