1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 14:48:08 +02:00

Merge pull request #18617 from calixteman/early_event_handler

Set the event handlers in the integration tests before any event is triggered
This commit is contained in:
Tim van der Meij 2024-08-18 15:10:23 +02:00 committed by GitHub
commit b47c7eca83
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 81 additions and 70 deletions

View file

@ -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);
});
},
}
);
});
@ -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);
});
},
}
);
});

View file

@ -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" }
);

View file

@ -1764,38 +1764,28 @@ 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(() => [
new Promise(resolve => {
globalThis.printResolve = resolve;
}),
window.PDFViewerApplication._testPrintResolver.promise,
])
);
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;
});
}
);
},
appSetup: app => {
app._testPrintResolver = Promise.withResolvers();
},
eventBusSetup: eventBus => {
eventBus.on(
"print",
() => {
window.PDFViewerApplication._testPrintResolver.resolve();
},
{ once: true }
);
},
});
});
afterAll(async () => {

View file

@ -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();
@ -52,11 +53,52 @@ 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) {
// page.evaluateOnNewDocument allows us to run code before the
// first js script is executed.
// The idea here is to set up some setters for PDFViewerApplication
// and EventBus, so we can inject some code to do whatever we want
// soon enough especially before the first event in the eventBus is
// dispatched.
const { prePageSetup, appSetup, eventBusSetup } = setups;
await prePageSetup?.(page);
if (appSetup || eventBusSetup) {
await page.evaluateOnNewDocument(
(aSetup, eSetup) => {
let app;
let eventBus;
Object.defineProperty(window, "PDFViewerApplication", {
get() {
return app;
},
set(newValue) {
app = newValue;
if (aSetup) {
// eslint-disable-next-line no-eval
eval(`(${aSetup})`)(app);
}
Object.defineProperty(app, "eventBus", {
get() {
return eventBus;
},
set(newV) {
eventBus = newV;
// eslint-disable-next-line no-eval
eval(`(${eSetup})`)(eventBus);
},
});
},
});
},
appSetup?.toString(),
eventBusSetup?.toString()
);
}
}
await page.goto(url);
await setups?.postPageSetup?.(page);
await page.bringToFront();
if (selector) {
await page.waitForSelector(selector, {