UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

142 lines 6.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const index_1 = require("../../../src/index"); const fancyFieldsPdfBytes = fs_1.default.readFileSync('assets/pdfs/fancy_fields.pdf'); describe(`PDFRadioGroup`, () => { it(`can read its options`, async () => { const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes); const form = pdfDoc.getForm(); const historicalFigures = form.getRadioGroup('Historical Figures 🐺'); expect(historicalFigures.getOptions()).toEqual([ 'Marcus Aurelius 🏛️', 'Ada Lovelace 💻', 'Marie Curie ☢️', 'Alexander Hamilton 🇺🇸', ]); }); it(`can read its selected value`, async () => { const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes); const form = pdfDoc.getForm(); const historicalFigures = form.getRadioGroup('Historical Figures 🐺'); expect(historicalFigures.getSelected()).toEqual('Marcus Aurelius 🏛️'); }); it(`can clear its value`, async () => { const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes); const form = pdfDoc.getForm(); const historicalFigures = form.getRadioGroup('Historical Figures 🐺'); historicalFigures.clear(); expect(historicalFigures.getSelected()).toBe(undefined); }); it(`can select a value`, async () => { const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes); const form = pdfDoc.getForm(); const historicalFigures = form.getRadioGroup('Historical Figures 🐺'); historicalFigures.select('Marie Curie ☢️'); expect(historicalFigures.getSelected()).toBe('Marie Curie ☢️'); }); it(`can read its flag states`, async () => { const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes); const form = pdfDoc.getForm(); const historicalFigures = form.getRadioGroup('Historical Figures 🐺'); expect(historicalFigures.isExported()).toBe(true); expect(historicalFigures.isReadOnly()).toBe(false); expect(historicalFigures.isRequired()).toBe(false); expect(historicalFigures.isMutuallyExclusive()).toBe(true); expect(historicalFigures.isOffToggleable()).toBe(false); }); it(`supports mutualExclusion=true`, async () => { const pdfDoc = await index_1.PDFDocument.create(); const page = pdfDoc.addPage(); const form = pdfDoc.getForm(); const radioGroup = form.createRadioGroup('test.group'); radioGroup.enableMutualExclusion(); radioGroup.addOptionToPage('foo', page); radioGroup.addOptionToPage('bar', page); radioGroup.addOptionToPage('foo', page); radioGroup.addOptionToPage('qux', page); const getOnWidgets = () => radioGroup.acroField .getWidgets() .filter((w) => w.getOnValue() === radioGroup.acroField.getValue()); expect(getOnWidgets().length).toBe(0); radioGroup.select('foo'); expect(getOnWidgets().length).toBe(1); expect(radioGroup.getOptions()).toEqual(['foo', 'bar', 'foo', 'qux']); const onValues = radioGroup.acroField .getWidgets() .map((w) => w.getOnValue()); expect(onValues).toEqual([ index_1.PDFName.of('0'), index_1.PDFName.of('1'), index_1.PDFName.of('2'), index_1.PDFName.of('3'), ]); const opt = radioGroup.acroField.Opt(); expect(opt).toBeInstanceOf(index_1.PDFArray); expect(opt.size()).toBe(4); expect(opt.get(0).decodeText()).toBe('foo'); expect(opt.get(1).decodeText()).toBe('bar'); expect(opt.get(2).decodeText()).toBe('foo'); expect(opt.get(3).decodeText()).toBe('qux'); }); it(`supports mutualExclusion=false`, async () => { const pdfDoc = await index_1.PDFDocument.create(); const page = pdfDoc.addPage(); const form = pdfDoc.getForm(); const radioGroup = form.createRadioGroup('test.group'); radioGroup.disableMutualExclusion(); radioGroup.addOptionToPage('foo', page); radioGroup.addOptionToPage('bar', page); radioGroup.addOptionToPage('foo', page); radioGroup.addOptionToPage('qux', page); const getOnWidgets = () => radioGroup.acroField .getWidgets() .filter((w) => w.getOnValue() === radioGroup.acroField.getValue()); expect(getOnWidgets().length).toBe(0); radioGroup.select('foo'); expect(getOnWidgets().length).toBe(2); expect(radioGroup.getOptions()).toEqual(['foo', 'bar', 'foo', 'qux']); const onValues = radioGroup.acroField .getWidgets() .map((w) => w.getOnValue()); expect(onValues).toEqual([ index_1.PDFName.of('0'), index_1.PDFName.of('1'), index_1.PDFName.of('0'), index_1.PDFName.of('3'), ]); const opt = radioGroup.acroField.Opt(); expect(opt).toBeInstanceOf(index_1.PDFArray); expect(opt.size()).toBe(4); expect(opt.get(0).decodeText()).toBe('foo'); expect(opt.get(1).decodeText()).toBe('bar'); expect(opt.get(2).decodeText()).toBe('foo'); expect(opt.get(3).decodeText()).toBe('qux'); }); it(`produces printable widgets when added to a page`, async () => { const pdfDoc = await index_1.PDFDocument.create(); const page = pdfDoc.addPage(); const form = pdfDoc.getForm(); const radioGroup = form.createRadioGroup('a.new.radio.group'); const widgets = () => radioGroup.acroField.getWidgets(); expect(widgets().length).toBe(0); radioGroup.addOptionToPage('foo', page); expect(widgets().length).toBe(1); expect(widgets()[0].hasFlag(index_1.AnnotationFlags.Print)).toBe(true); }); it(`sets page reference when added to a page`, async () => { const pdfDoc = await index_1.PDFDocument.create(); const page = pdfDoc.addPage(); const form = pdfDoc.getForm(); const radioGroup = form.createRadioGroup('a.new.radio.group'); const widgets = () => radioGroup.acroField.getWidgets(); expect(widgets().length).toBe(0); radioGroup.addOptionToPage('foo', page); expect(widgets().length).toBe(1); expect(widgets()[0].P()).toBe(page.ref); }); }); //# sourceMappingURL=PDFRadioGroup.spec.js.map