UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

99 lines 5.98 kB
import { PDFHexString } from '../../../src/core'; import { toCharCode, typedArrayFor } from '../../../src/utils'; describe(`PDFHexString`, () => { it(`can be constructed from PDFHexString.of(...)`, () => { expect(PDFHexString.of('4E6F762073686D6F7A2')).toBeInstanceOf(PDFHexString); expect(PDFHexString.of('901FA3')).toBeInstanceOf(PDFHexString); expect(PDFHexString.of('901FA')).toBeInstanceOf(PDFHexString); }); it(`can be constructed from a string of text (using UTF-16BE encoding)`, () => { expect(String(PDFHexString.fromText(''))).toBe('<FEFF>'); expect(String(PDFHexString.fromText('ä☺𠜎️☁️💩'))).toBe('<FEFF00E4263AD841DF0EFE0F2601FE0FD83DDCA9>'); expect(String(PDFHexString.fromText('stuff 💩 and 🎂things'))).toBe('<FEFF007300740075006600660020D83DDCA900200061006E00640020D83CDF82007400680069006E00670073>'); }); describe(`converting to bytes`, () => { it(`can handle an even number of hex digits`, () => { const hex = 'FEFF0045006700670020D83CDF73'; // prettier-ignore expect(PDFHexString.of(hex).asBytes()).toEqual(Uint8Array.of(0xFE, 0xFF, 0x00, 0x45, 0x00, 0x67, 0x00, 0x67, 0x00, 0x20, 0xD8, 0x3C, 0xDF, 0x73)); }); it(`can handle an odd number of hex digits`, () => { const hex = '6145627300623'; // prettier-ignore expect(PDFHexString.of(hex).asBytes()).toEqual(Uint8Array.of(0x61, 0x45, 0x62, 0x73, 0x00, 0x62, 0x30)); }); }); describe(`decoding to string`, () => { it(`can interpret UTF-16BE strings`, () => { const hex = 'FEFF0045006700670020D83CDF73'; expect(PDFHexString.of(hex).decodeText()).toBe('Egg 🍳'); }); it(`can interpret UTF-16LE strings`, () => { const hex = 'FFFE45006700670020003CD873DF'; expect(PDFHexString.of(hex).decodeText()).toBe('Egg 🍳'); }); it(`can interpret PDFDocEncoded strings`, () => { const hex = '61456273006236'; expect(PDFHexString.of(hex).decodeText()).toBe('aEbs\0b6'); }); }); describe(`decoding to date`, () => { it(`can interpret date strings of the form D:YYYYMMDDHHmmSSOHH'mm`, () => { expect(PDFHexString.fromText(`D:20200321165011+01'01`).decodeDate()).toStrictEqual(new Date('2020-03-21T15:49:11Z')); expect(PDFHexString.fromText(`D:20200321165011-01'01`).decodeDate()).toStrictEqual(new Date('2020-03-21T17:51:11Z')); expect(PDFHexString.fromText(`D:20200321165011Z00'00`).decodeDate()).toStrictEqual(new Date('2020-03-21T16:50:11Z')); }); it(`can interpret date strings of the form D:YYYYMMDDHHmmSSOHH`, () => { expect(PDFHexString.fromText('D:20200321165011+01').decodeDate()).toStrictEqual(new Date('2020-03-21T15:50:11Z')); expect(PDFHexString.fromText('D:20200321165011-01').decodeDate()).toStrictEqual(new Date('2020-03-21T17:50:11Z')); expect(PDFHexString.fromText('D:20200321165011Z00').decodeDate()).toStrictEqual(new Date('2020-03-21T16:50:11Z')); }); it(`can interpret date strings of the form D:YYYYMMDDHHmmSSO`, () => { expect(PDFHexString.fromText('D:20200321165011Z').decodeDate()).toStrictEqual(new Date('2020-03-21T16:50:11Z')); }); it(`can interpret date strings of the form D:YYYYMMDDHHmmSS`, () => { expect(PDFHexString.fromText('D:20200321165011').decodeDate()).toStrictEqual(new Date('2020-03-21T16:50:11Z')); }); it(`can interpret date strings of the form D:YYYYMMDDHHmm`, () => { expect(PDFHexString.fromText('D:202003211650').decodeDate()).toStrictEqual(new Date('2020-03-21T16:50:00Z')); }); it(`can interpret date strings of the form D:YYYYMMDDHH`, () => { expect(PDFHexString.fromText('D:2020032116').decodeDate()).toStrictEqual(new Date('2020-03-21T16:00:00Z')); }); it(`can interpret date strings of the form D:YYYYMMDD`, () => { expect(PDFHexString.fromText('D:20200321').decodeDate()).toStrictEqual(new Date('2020-03-21T00:00:00Z')); }); it(`can interpret date strings of the form D:YYYYMM`, () => { expect(PDFHexString.fromText('D:202003').decodeDate()).toStrictEqual(new Date('2020-03-01T00:00:00Z')); }); it(`can interpret date strings of the form D:YYYY`, () => { expect(PDFHexString.fromText('D:2020').decodeDate()).toStrictEqual(new Date('2020-01-01T00:00:00Z')); }); }); it(`can be converted to a string`, () => { expect(PDFHexString.of('901FA').asString()).toBe('901FA'); expect(PDFHexString.fromText('stuff 💩 and 🎂things').asString()).toBe('FEFF007300740075006600660020D83DDCA900200061006E00640020D83CDF82007400680069006E00670073'); }); it(`can be cloned`, () => { const original = PDFHexString.of('901FA'); const clone = original.clone(); expect(clone).not.toBe(original); expect(clone.toString()).toBe(original.toString()); }); it(`can be converted to a string`, () => { expect(String(PDFHexString.of('4E6F762073686D6F7A2'))).toBe('<4E6F762073686D6F7A2>'); expect(String(PDFHexString.of('901FA3'))).toBe('<901FA3>'); expect(String(PDFHexString.of('901FA'))).toBe('<901FA>'); }); it(`can provide its size in bytes`, () => { expect(PDFHexString.of('4E6F762073686D6F7A2').sizeInBytes()).toBe(21); expect(PDFHexString.of('901FA3').sizeInBytes()).toBe(8); expect(PDFHexString.of('901FA').sizeInBytes()).toBe(7); }); it(`can be serialized`, () => { const buffer = new Uint8Array(11).fill(toCharCode(' ')); expect(PDFHexString.of('901FA').copyBytesInto(buffer, 3)).toBe(7); expect(buffer).toEqual(typedArrayFor(' <901FA> ')); }); }); //# sourceMappingURL=PDFHexString.spec.js.map