test(cv): reproduce initially hidden preview pagination readiness
This commit is contained in:
@@ -49,3 +49,42 @@ test("[PRES-C06 C09] pagination waits for image layout and publishes one settled
|
||||
await page.evaluate(() => new Promise<void>(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))));
|
||||
expect(await page.evaluate(() => document.documentElement.dataset.readyEvents)).toBe("1");
|
||||
});
|
||||
|
||||
for (const fixture of [{ name: "default-modern", pages: 1 }, { name: "long-en-minimal", pages: 4 }]) {
|
||||
test(`[PRES-C06 C09] initially hidden ${fixture.name} preview waits for physical layout`, async ({ page }, info) => {
|
||||
const html = await fs.readFile(path.join(original, fixture.name, "render.html"), "utf8");
|
||||
await page.setContent('<div id="preview-pane" style="display:none"><iframe title="Fixture CV" style="width:210mm;height:297mm;border:0"></iframe></div>');
|
||||
await page.locator("iframe").evaluate((frame, documentHtml) => { (frame as HTMLIFrameElement).srcdoc = documentHtml; }, previewDocumentHtml(html, 1122.52));
|
||||
const documentPage = page.frameLocator("iframe").locator(".page");
|
||||
await expect(documentPage).toBeAttached();
|
||||
const before = await documentPage.evaluate(async () => {
|
||||
await document.fonts.ready;
|
||||
await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)));
|
||||
document.documentElement.dataset.readyEvents = "0";
|
||||
window.addEventListener("cv-preview-ready", () => { document.documentElement.dataset.readyEvents = String(Number(document.documentElement.dataset.readyEvents) + 1); });
|
||||
return { width: document.querySelector(".page")!.getBoundingClientRect().width, ready: document.documentElement.dataset.cvPreviewReady };
|
||||
});
|
||||
expect(before.width).toBe(0);
|
||||
expect(before.ready, "a hidden document must not publish a settled zero-width layout").toBeUndefined();
|
||||
await page.locator("#preview-pane").evaluate(element => { (element as HTMLElement).style.display = "block"; });
|
||||
await expect.poll(() => documentPage.evaluate(() => document.documentElement.dataset.cvPreviewReady)).toBe("true");
|
||||
const after = await documentPage.evaluate(() => ({
|
||||
width: Number(document.documentElement.dataset.cvPreviewWidth),
|
||||
flowWidth: document.querySelector("[data-cv-preview-flow]")!.getBoundingClientRect().width,
|
||||
pages: Number(document.documentElement.dataset.cvPreviewPages),
|
||||
events: document.documentElement.dataset.readyEvents,
|
||||
durationMs: Number(document.documentElement.dataset.cvPreviewDurationMs),
|
||||
}));
|
||||
expect(after.width).toBeCloseTo(210 * 96 / 25.4, 1);
|
||||
expect(after.flowWidth).toBeCloseTo(210 * 96 / 25.4, 1);
|
||||
expect(after.pages).toBe(fixture.pages);
|
||||
expect(after.events).toBe("1");
|
||||
await page.locator("#preview-pane").evaluate(element => { (element as HTMLElement).style.display = "none"; });
|
||||
await page.setViewportSize({ width: 844, height: 390 });
|
||||
await page.locator("#preview-pane").evaluate(element => { (element as HTMLElement).style.display = "block"; element.querySelector("iframe")!.style.transform = "scale(.45)"; });
|
||||
await documentPage.evaluate(() => new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))));
|
||||
expect(await documentPage.evaluate(() => ({ width: Number(document.documentElement.dataset.cvPreviewWidth), pages: Number(document.documentElement.dataset.cvPreviewPages), events: document.documentElement.dataset.readyEvents })))
|
||||
.toEqual({ width: after.width, pages: fixture.pages, events: "1" });
|
||||
await info.attach("initially-hidden-preview", { body: JSON.stringify({ fixture: fixture.name, before, after }), contentType: "application/json" });
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user