Skip to content

Commit

Permalink
Set the event handlers in the integration tests before any event is t…
Browse files Browse the repository at this point in the history
…riggered

The function evaluateOnNewDocument in Puppeteer allow us to execute some js before the pdf.js one
is loaded.
It allows us to stub some setters before there are used and then set some event handlers very soon.
  • Loading branch information
calixteman committed Aug 16, 2024
1 parent d8d9cff commit 3af754d
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 67 deletions.
38 changes: 12 additions & 26 deletions test/integration/freetext_editor_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2171,20 +2171,13 @@ describe("FreeText Editor", () => {
"tracemonkey.pdf",
".annotationEditorLayer",
100,
async page => {
await page.waitForFunction(async () => {
await window.PDFViewerApplication.initializedPromise;
return true;
});
await page.evaluate(() => {
{
eventBusSetup: eventBus => {
window.visitedPages = [];
window.PDFViewerApplication.eventBus.on(
"pagechanging",
({ pageNumber }) => {
window.visitedPages.push(pageNumber);
}
);
});
eventBus.on("pagechanging", ({ pageNumber }) => {
window.visitedPages.push(pageNumber);
});
},
}
);
});
Expand Down Expand Up @@ -2403,19 +2396,12 @@ describe("FreeText Editor", () => {
"tracemonkey.pdf",
".annotationEditorLayer",
100,
async page => {
await page.waitForFunction(async () => {
await window.PDFViewerApplication.initializedPromise;
return true;
});
await page.evaluate(() => {
window.PDFViewerApplication.eventBus.on(
"annotationeditorstateschanged",
({ details }) => {
window.editingEvents?.push(details);
}
);
});
{
eventBusSetup: eventBus => {
eventBus.on("annotationeditorstateschanged", ({ details }) => {
window.editingEvents?.push(details);
});
},
}
);
});
Expand Down
19 changes: 6 additions & 13 deletions test/integration/highlight_editor_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -910,20 +910,13 @@ describe("Highlight Editor", () => {
"tracemonkey.pdf",
`.page[data-page-number = "1"] .endOfContent`,
null,
async page => {
await page.waitForFunction(async () => {
await window.PDFViewerApplication.initializedPromise;
return true;
});
await page.evaluate(() => {
{
eventBusSetup: eventBus => {
window.editingEvents = [];
window.PDFViewerApplication.eventBus.on(
"annotationeditorstateschanged",
({ details }) => {
window.editingEvents.push(details);
}
);
});
eventBus.on("annotationeditorstateschanged", ({ details }) => {
window.editingEvents.push(details);
});
},
},
{ highlightEditorColors: "red=#AB0000" }
);
Expand Down
39 changes: 15 additions & 24 deletions test/integration/scripting_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1764,11 +1764,8 @@ describe("Interaction", () => {
// 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.
pages = await loadAndWait(
"autoprint.pdf",
"",
null /* zoom = */,
async page => {
pages = await loadAndWait("autoprint.pdf", "", null /* zoom = */, {
postPageSetup: async page => {
printHandles.set(
page,
page.evaluateHandle(() => [
Expand All @@ -1777,25 +1774,19 @@ describe("Interaction", () => {
}),
])
);
await page.waitForFunction(() => {
// We don't really need to print the document.
window.print = () => {};
if (!window.PDFViewerApplication?.eventBus) {
return false;
}
window.PDFViewerApplication.eventBus.on(
"print",
() => {
const resolve = globalThis.printResolve;
delete globalThis.printResolve;
resolve();
},
{ once: true }
);
return true;
});
}
);
},
eventBusSetup: eventBus => {
eventBus.on(
"print",
() => {
const resolve = globalThis.printResolve;
delete globalThis.printResolve;
resolve();
},
{ once: true }
);
},
});
});

afterAll(async () => {
Expand Down
35 changes: 31 additions & 4 deletions test/integration/test_utils.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
*/

import os from "os";

const isMac = os.platform() === "darwin";

function loadAndWait(filename, selector, zoom, pageSetup, options) {
function loadAndWait(filename, selector, zoom, setups, options) {
return Promise.all(
global.integrationSessions.map(async session => {
const page = await session.browser.newPage();
Expand Down Expand Up @@ -52,11 +53,37 @@ function loadAndWait(filename, selector, zoom, pageSetup, options) {
global.integrationBaseUrl
}?file=/test/pdfs/${filename}#zoom=${zoom ?? "page-fit"}${app_options}`;

await page.goto(url);
if (pageSetup) {
await pageSetup(page);
if (setups) {
await setups.prePageSetup?.(page);
if (setups.eventBusSetup) {
await page.evaluateOnNewDocument(setup => {
let app;
let eventBus;
Object.defineProperty(window, "PDFViewerApplication", {
get() {
return app;
},
set(newValue) {
app = newValue;
Object.defineProperty(app, "eventBus", {
get() {
return eventBus;
},
set(newV) {
eventBus = newV;
// eslint-disable-next-line no-eval
eval(`(${setup})`)(eventBus);
},
});
},
});
}, setups.eventBusSetup.toString());
}
}

await page.goto(url);
await setups?.postPageSetup?.(page);

await page.bringToFront();
if (selector) {
await page.waitForSelector(selector, {
Expand Down

0 comments on commit 3af754d

Please sign in to comment.