mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-08 09:20:06 +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:
commit
b47c7eca83
4 changed files with 81 additions and 70 deletions
|
@ -2171,20 +2171,13 @@ describe("FreeText Editor", () => {
|
||||||
"tracemonkey.pdf",
|
"tracemonkey.pdf",
|
||||||
".annotationEditorLayer",
|
".annotationEditorLayer",
|
||||||
100,
|
100,
|
||||||
async page => {
|
{
|
||||||
await page.waitForFunction(async () => {
|
eventBusSetup: eventBus => {
|
||||||
await window.PDFViewerApplication.initializedPromise;
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
await page.evaluate(() => {
|
|
||||||
window.visitedPages = [];
|
window.visitedPages = [];
|
||||||
window.PDFViewerApplication.eventBus.on(
|
eventBus.on("pagechanging", ({ pageNumber }) => {
|
||||||
"pagechanging",
|
|
||||||
({ pageNumber }) => {
|
|
||||||
window.visitedPages.push(pageNumber);
|
window.visitedPages.push(pageNumber);
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -2403,19 +2396,12 @@ describe("FreeText Editor", () => {
|
||||||
"tracemonkey.pdf",
|
"tracemonkey.pdf",
|
||||||
".annotationEditorLayer",
|
".annotationEditorLayer",
|
||||||
100,
|
100,
|
||||||
async page => {
|
{
|
||||||
await page.waitForFunction(async () => {
|
eventBusSetup: eventBus => {
|
||||||
await window.PDFViewerApplication.initializedPromise;
|
eventBus.on("annotationeditorstateschanged", ({ details }) => {
|
||||||
return true;
|
|
||||||
});
|
|
||||||
await page.evaluate(() => {
|
|
||||||
window.PDFViewerApplication.eventBus.on(
|
|
||||||
"annotationeditorstateschanged",
|
|
||||||
({ details }) => {
|
|
||||||
window.editingEvents?.push(details);
|
window.editingEvents?.push(details);
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -910,21 +910,14 @@ describe("Highlight Editor", () => {
|
||||||
"tracemonkey.pdf",
|
"tracemonkey.pdf",
|
||||||
`.page[data-page-number = "1"] .endOfContent`,
|
`.page[data-page-number = "1"] .endOfContent`,
|
||||||
null,
|
null,
|
||||||
async page => {
|
{
|
||||||
await page.waitForFunction(async () => {
|
eventBusSetup: eventBus => {
|
||||||
await window.PDFViewerApplication.initializedPromise;
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
await page.evaluate(() => {
|
|
||||||
window.editingEvents = [];
|
window.editingEvents = [];
|
||||||
window.PDFViewerApplication.eventBus.on(
|
eventBus.on("annotationeditorstateschanged", ({ details }) => {
|
||||||
"annotationeditorstateschanged",
|
|
||||||
({ details }) => {
|
|
||||||
window.editingEvents.push(details);
|
window.editingEvents.push(details);
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
},
|
||||||
{ highlightEditorColors: "red=#AB0000" }
|
{ highlightEditorColors: "red=#AB0000" }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1764,38 +1764,28 @@ describe("Interaction", () => {
|
||||||
// it is usually very fast and therefore activating the selector check
|
// it is usually very fast and therefore activating the selector check
|
||||||
// too late will cause it to never resolve because printing is already
|
// 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.
|
// done (and the printed page div removed) before we even get to it.
|
||||||
pages = await loadAndWait(
|
pages = await loadAndWait("autoprint.pdf", "", null /* zoom = */, {
|
||||||
"autoprint.pdf",
|
postPageSetup: async page => {
|
||||||
"",
|
|
||||||
null /* zoom = */,
|
|
||||||
async page => {
|
|
||||||
printHandles.set(
|
printHandles.set(
|
||||||
page,
|
page,
|
||||||
page.evaluateHandle(() => [
|
page.evaluateHandle(() => [
|
||||||
new Promise(resolve => {
|
window.PDFViewerApplication._testPrintResolver.promise,
|
||||||
globalThis.printResolve = resolve;
|
|
||||||
}),
|
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
await page.waitForFunction(() => {
|
},
|
||||||
// We don't really need to print the document.
|
appSetup: app => {
|
||||||
window.print = () => {};
|
app._testPrintResolver = Promise.withResolvers();
|
||||||
if (!window.PDFViewerApplication?.eventBus) {
|
},
|
||||||
return false;
|
eventBusSetup: eventBus => {
|
||||||
}
|
eventBus.on(
|
||||||
window.PDFViewerApplication.eventBus.on(
|
|
||||||
"print",
|
"print",
|
||||||
() => {
|
() => {
|
||||||
const resolve = globalThis.printResolve;
|
window.PDFViewerApplication._testPrintResolver.resolve();
|
||||||
delete globalThis.printResolve;
|
|
||||||
resolve();
|
|
||||||
},
|
},
|
||||||
{ once: true }
|
{ once: true }
|
||||||
);
|
);
|
||||||
return true;
|
},
|
||||||
});
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
|
|
@ -14,9 +14,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import os from "os";
|
import os from "os";
|
||||||
|
|
||||||
const isMac = os.platform() === "darwin";
|
const isMac = os.platform() === "darwin";
|
||||||
|
|
||||||
function loadAndWait(filename, selector, zoom, pageSetup, options) {
|
function loadAndWait(filename, selector, zoom, setups, options) {
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
global.integrationSessions.map(async session => {
|
global.integrationSessions.map(async session => {
|
||||||
const page = await session.browser.newPage();
|
const page = await session.browser.newPage();
|
||||||
|
@ -52,10 +53,51 @@ function loadAndWait(filename, selector, zoom, pageSetup, options) {
|
||||||
global.integrationBaseUrl
|
global.integrationBaseUrl
|
||||||
}?file=/test/pdfs/${filename}#zoom=${zoom ?? "page-fit"}${app_options}`;
|
}?file=/test/pdfs/${filename}#zoom=${zoom ?? "page-fit"}${app_options}`;
|
||||||
|
|
||||||
await page.goto(url);
|
if (setups) {
|
||||||
if (pageSetup) {
|
// page.evaluateOnNewDocument allows us to run code before the
|
||||||
await pageSetup(page);
|
// 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();
|
await page.bringToFront();
|
||||||
if (selector) {
|
if (selector) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue