1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-20 15:18:08 +02:00

Get the field name from its parent when it doesn't have one when collecting fields (bug 1864136)

Some fields, somewhere under the Fields entry in Acroform, could have no name (in T)
but with a parent which has a name but which isn't somewhere under Fields.
As a side-effect, this patch prevents infinite loops because of potential cycles
under Fields.
This commit is contained in:
Calixte Denizet 2023-11-13 11:05:03 +01:00
parent 7884119975
commit 09b4fe6a30
3 changed files with 118 additions and 4 deletions

View file

@ -16,6 +16,7 @@
import {
clearInput,
closePages,
getAnnotationStorage,
getComputedStyleSelector,
getFirstSerialized,
getQuerySelector,
@ -24,6 +25,7 @@ import {
kbSelectAll,
loadAndWait,
scrollIntoView,
waitForEntryInStorage,
} from "./test_utils.mjs";
describe("Interaction", () => {
@ -2225,4 +2227,58 @@ describe("Interaction", () => {
);
});
});
describe("Radio button without T value", () => {
let pages;
let otherPages;
beforeAll(async () => {
otherPages = await Promise.all(
global.integrationSessions.map(async session =>
session.browser.newPage()
)
);
pages = await loadAndWait("bug1860602.pdf", getSelector("22R"));
});
afterAll(async () => {
await closePages(pages);
await Promise.all(otherPages.map(page => page.close()));
});
it("must check that only one radio is selected", async () => {
await Promise.all(
pages.map(async ([browserName, page], i) => {
await page.waitForFunction(
"window.PDFViewerApplication.scriptingReady === true"
);
await scrollIntoView(page, getSelector("22R"));
await page.click(getSelector("25R"));
await waitForEntryInStorage(page, "25R", { value: true });
let storage = await getAnnotationStorage(page);
expect(storage)
.withContext(`In ${browserName}`)
.toEqual({
"22R": { value: false },
"25R": { value: true },
"28R": { value: false },
});
await page.click(getSelector("22R"));
await waitForEntryInStorage(page, "22R", { value: true });
storage = await getAnnotationStorage(page);
expect(storage)
.withContext(`In ${browserName}`)
.toEqual({
"22R": { value: true },
"25R": { value: false },
"28R": { value: false },
});
})
);
});
});
});

View file

@ -176,6 +176,28 @@ async function getFirstSerialized(page, filter = undefined) {
return (await getSerialized(page, filter))[0];
}
function getAnnotationStorage(page) {
return page.evaluate(() =>
Object.fromEntries(
window.PDFViewerApplication.pdfDocument.annotationStorage.serializable.map?.entries() ||
[]
)
);
}
function waitForEntryInStorage(page, key, value) {
return page.waitForFunction(
(k, v) => {
const { map } =
window.PDFViewerApplication.pdfDocument.annotationStorage.serializable;
return map && JSON.stringify(map.get(k)) === v;
},
{},
key,
JSON.stringify(value)
);
}
function getEditors(page, kind) {
return page.evaluate(aKind => {
const elements = document.querySelectorAll(`.${aKind}Editor`);
@ -398,6 +420,7 @@ export {
clearInput,
closePages,
dragAndDropAnnotation,
getAnnotationStorage,
getComputedStyleSelector,
getEditorDimensions,
getEditors,
@ -427,6 +450,7 @@ export {
scrollIntoView,
serializeBitmapDimensions,
waitForAnnotationEditorLayer,
waitForEntryInStorage,
waitForEvent,
waitForSelectedEditor,
waitForSerialized,