Merge pull request #17400 from calixteman/autoprint_test
Set a print listener as soon as possible in the autoprint integration test
This commit is contained in:
commit
39a1fc6992
@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
awaitPromise,
|
||||||
clearInput,
|
clearInput,
|
||||||
closePages,
|
closePages,
|
||||||
getAnnotationStorage,
|
getAnnotationStorage,
|
||||||
@ -1771,28 +1772,58 @@ describe("Interaction", () => {
|
|||||||
|
|
||||||
describe("in autoprint.pdf", () => {
|
describe("in autoprint.pdf", () => {
|
||||||
let pages;
|
let pages;
|
||||||
|
const printHandles = new Map();
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
// Autoprinting is triggered by the `Open` event, which is one of the
|
// Autoprinting is triggered by the `Open` event, which is one of the
|
||||||
// first events to be dispatched to the sandbox, even before scripting
|
// first events to be dispatched to the sandbox, even before scripting
|
||||||
// is reported to be ready. It's therefore important that `loadAndWait`
|
// is reported to be ready. It's therefore important that `loadAndWait`
|
||||||
// returns control as soon as possible after opening the PDF document,
|
// returns control as soon as possible after opening the PDF document.
|
||||||
// and the first element we can check for is the `<html>` tag of the
|
// Note that the `autoprint.pdf` file is very small, so printing
|
||||||
// viewer. Note that the `autoprint.pdf` file is very small, so printing
|
|
||||||
// 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("autoprint.pdf", "html");
|
pages = await loadAndWait(
|
||||||
|
"autoprint.pdf",
|
||||||
|
"",
|
||||||
|
null /* pageSetup = */,
|
||||||
|
async page => {
|
||||||
|
printHandles.set(
|
||||||
|
page,
|
||||||
|
await page.evaluateHandle(() => [
|
||||||
|
new Promise(resolve => {
|
||||||
|
globalThis.printResolve = resolve;
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
);
|
||||||
|
await page.waitForFunction(() => {
|
||||||
|
if (!window.PDFViewerApplication?.eventBus) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
window.PDFViewerApplication.eventBus.on(
|
||||||
|
"print",
|
||||||
|
() => {
|
||||||
|
const resolve = globalThis.printResolve;
|
||||||
|
delete globalThis.printResolve;
|
||||||
|
resolve();
|
||||||
|
},
|
||||||
|
{ once: true }
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await closePages(pages);
|
await closePages(pages);
|
||||||
|
printHandles.clear();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("must check if printing is triggered when the document is open", async () => {
|
it("must check if printing is triggered when the document is open", async () => {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
pages.map(async ([browserName, page]) => {
|
pages.map(async ([browserName, page]) => {
|
||||||
await page.waitForSelector(".printedPage");
|
await awaitPromise(printHandles.get(page));
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -46,9 +46,11 @@ function loadAndWait(filename, selector, zoom, pageSetup) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await page.bringToFront();
|
await page.bringToFront();
|
||||||
await page.waitForSelector(selector, {
|
if (selector) {
|
||||||
timeout: 0,
|
await page.waitForSelector(selector, {
|
||||||
});
|
timeout: 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
return [session.name, page];
|
return [session.name, page];
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user