pdfjs-dist 2.2.228 → 2.6.347
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8816 -19300
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +27185 -35746
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +26665 -0
- package/es5/build/pdf.js.map +1 -0
- package/es5/build/pdf.min.js +22 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +61231 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/pdf_viewer.css +406 -0
- package/es5/web/pdf_viewer.js +7886 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1498 -4832
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +1144 -927
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +747 -716
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +462 -553
- package/lib/core/cmap.js +231 -277
- package/lib/core/colorspace.js +715 -857
- package/lib/core/core_utils.js +57 -52
- package/lib/core/crypto.js +416 -437
- package/lib/core/document.js +629 -670
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +3229 -2800
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +602 -534
- package/lib/core/function.js +355 -279
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +442 -439
- package/lib/core/image_utils.js +221 -61
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +289 -233
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2928 -2928
- package/lib/core/murmurhash3.js +87 -102
- package/lib/core/obj.js +1343 -1300
- package/lib/core/operator_list.js +90 -67
- package/lib/core/parser.js +990 -987
- package/lib/core/pattern.js +105 -77
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +156 -104
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +89 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +275 -290
- package/lib/core/worker_stream.js +101 -210
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +772 -1041
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +1575 -1868
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +370 -222
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +341 -536
- package/lib/display/fetch_stream.js +188 -304
- package/lib/display/font_loader.js +282 -414
- package/lib/display/metadata.js +81 -99
- package/lib/display/network.js +362 -511
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +283 -465
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/pattern_helper.js +93 -44
- package/lib/display/svg.js +1163 -1401
- package/lib/display/text_layer.js +154 -137
- package/lib/display/transport_stream.js +237 -375
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +37 -37
- package/lib/pdf.js +220 -58
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +271 -306
- package/lib/test/unit/annotation_spec.js +1902 -763
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +790 -592
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +73 -72
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +86 -88
- package/lib/test/unit/colorspace_spec.js +346 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +232 -185
- package/lib/test/unit/custom_spec.js +150 -24
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +128 -17
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +112 -91
- package/lib/test/unit/fetch_stream_spec.js +31 -29
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +48 -32
- package/lib/test/unit/message_handler_spec.js +173 -159
- package/lib/test/unit/metadata_spec.js +71 -71
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -11
- package/lib/test/unit/network_utils_spec.js +158 -144
- package/lib/test/unit/node_stream_spec.js +76 -90
- package/lib/test/unit/parser_spec.js +108 -114
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +337 -156
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +91 -304
- package/lib/test/unit/testreporter.js +33 -22
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +299 -461
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +129 -149
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +78 -111
- package/lib/web/app.js +1542 -1267
- package/lib/web/app_options.js +76 -91
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +869 -834
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +34 -58
- package/lib/web/firefox_print_service.js +62 -34
- package/lib/web/firefoxcom.js +206 -374
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +30 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +150 -126
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +229 -383
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +492 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +119 -212
- package/lib/web/pdf_page_view.js +474 -513
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +96 -110
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +286 -302
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +289 -297
- package/lib/web/pdf_thumbnail_viewer.js +202 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +69 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -319
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +274 -421
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +4 -9
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +29 -27
- package/web/pdf_viewer.js +3524 -4746
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +6 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/web/images/texture.png +0 -0
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -21,22 +21,22 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _glyphlist = require("../../core/glyphlist");
|
24
|
+
var _glyphlist = require("../../core/glyphlist.js");
|
25
25
|
|
26
|
-
var _unicode = require("../../core/unicode");
|
26
|
+
var _unicode = require("../../core/unicode.js");
|
27
27
|
|
28
|
-
describe(
|
29
|
-
describe(
|
30
|
-
it(
|
28
|
+
describe("unicode", function () {
|
29
|
+
describe("mapSpecialUnicodeValues", function () {
|
30
|
+
it("should not re-map normal Unicode values", function () {
|
31
31
|
expect((0, _unicode.mapSpecialUnicodeValues)(0x0041)).toEqual(0x0041);
|
32
|
-
expect((0, _unicode.mapSpecialUnicodeValues)(
|
32
|
+
expect((0, _unicode.mapSpecialUnicodeValues)(0xfb01)).toEqual(0xfb01);
|
33
33
|
});
|
34
|
-
it(
|
35
|
-
expect((0, _unicode.mapSpecialUnicodeValues)(
|
36
|
-
expect((0, _unicode.mapSpecialUnicodeValues)(
|
34
|
+
it("should re-map special Unicode values", function () {
|
35
|
+
expect((0, _unicode.mapSpecialUnicodeValues)(0xf8e9)).toEqual(0x00a9);
|
36
|
+
expect((0, _unicode.mapSpecialUnicodeValues)(0xffff)).toEqual(0);
|
37
37
|
});
|
38
38
|
});
|
39
|
-
describe(
|
39
|
+
describe("getUnicodeForGlyph", function () {
|
40
40
|
var standardMap, dingbatsMap;
|
41
41
|
beforeAll(function (done) {
|
42
42
|
standardMap = (0, _glyphlist.getGlyphsUnicode)();
|
@@ -46,31 +46,31 @@ describe('unicode', function () {
|
|
46
46
|
afterAll(function () {
|
47
47
|
standardMap = dingbatsMap = null;
|
48
48
|
});
|
49
|
-
it(
|
50
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
51
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
49
|
+
it("should get Unicode values for valid glyph names", function () {
|
50
|
+
expect((0, _unicode.getUnicodeForGlyph)("A", standardMap)).toEqual(0x0041);
|
51
|
+
expect((0, _unicode.getUnicodeForGlyph)("a1", dingbatsMap)).toEqual(0x2701);
|
52
52
|
});
|
53
|
-
it(
|
54
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
55
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
56
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
57
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
53
|
+
it("should recover Unicode values from uniXXXX/uXXXX{XX} glyph names", function () {
|
54
|
+
expect((0, _unicode.getUnicodeForGlyph)("uni0041", standardMap)).toEqual(0x0041);
|
55
|
+
expect((0, _unicode.getUnicodeForGlyph)("u0041", standardMap)).toEqual(0x0041);
|
56
|
+
expect((0, _unicode.getUnicodeForGlyph)("uni2701", dingbatsMap)).toEqual(0x2701);
|
57
|
+
expect((0, _unicode.getUnicodeForGlyph)("u2701", dingbatsMap)).toEqual(0x2701);
|
58
58
|
});
|
59
|
-
it(
|
60
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
61
|
-
expect((0, _unicode.getUnicodeForGlyph)(
|
59
|
+
it("should not get Unicode values for invalid glyph names", function () {
|
60
|
+
expect((0, _unicode.getUnicodeForGlyph)("Qwerty", standardMap)).toEqual(-1);
|
61
|
+
expect((0, _unicode.getUnicodeForGlyph)("Qwerty", dingbatsMap)).toEqual(-1);
|
62
62
|
});
|
63
63
|
});
|
64
|
-
describe(
|
65
|
-
it(
|
64
|
+
describe("getUnicodeRangeFor", function () {
|
65
|
+
it("should get correct Unicode range", function () {
|
66
66
|
expect((0, _unicode.getUnicodeRangeFor)(0x0041)).toEqual(0);
|
67
|
-
expect((0, _unicode.getUnicodeRangeFor)(
|
67
|
+
expect((0, _unicode.getUnicodeRangeFor)(0xfb01)).toEqual(62);
|
68
68
|
});
|
69
|
-
it(
|
70
|
-
expect((0, _unicode.getUnicodeRangeFor)(
|
69
|
+
it("should not get a Unicode range", function () {
|
70
|
+
expect((0, _unicode.getUnicodeRangeFor)(0x05ff)).toEqual(-1);
|
71
71
|
});
|
72
72
|
});
|
73
|
-
describe(
|
73
|
+
describe("getNormalizedUnicodes", function () {
|
74
74
|
var NormalizedUnicodes;
|
75
75
|
beforeAll(function (done) {
|
76
76
|
NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
|
@@ -79,23 +79,23 @@ describe('unicode', function () {
|
|
79
79
|
afterAll(function () {
|
80
80
|
NormalizedUnicodes = null;
|
81
81
|
});
|
82
|
-
it(
|
83
|
-
expect(NormalizedUnicodes["\uFB01"]).toEqual(
|
82
|
+
it("should get normalized Unicode values for ligatures", function () {
|
83
|
+
expect(NormalizedUnicodes["\uFB01"]).toEqual("fi");
|
84
84
|
expect(NormalizedUnicodes["\u0675"]).toEqual("\u0627\u0674");
|
85
85
|
});
|
86
|
-
it(
|
87
|
-
expect(NormalizedUnicodes
|
86
|
+
it("should not normalize standard characters", function () {
|
87
|
+
expect(NormalizedUnicodes.A).toEqual(undefined);
|
88
88
|
});
|
89
89
|
});
|
90
|
-
describe(
|
90
|
+
describe("reverseIfRtl", function () {
|
91
91
|
var NormalizedUnicodes;
|
92
92
|
|
93
|
-
function getGlyphUnicode(
|
94
|
-
if (NormalizedUnicodes[
|
95
|
-
return NormalizedUnicodes[
|
93
|
+
function getGlyphUnicode(char) {
|
94
|
+
if (NormalizedUnicodes[char] !== undefined) {
|
95
|
+
return NormalizedUnicodes[char];
|
96
96
|
}
|
97
97
|
|
98
|
-
return
|
98
|
+
return char;
|
99
99
|
}
|
100
100
|
|
101
101
|
beforeAll(function (done) {
|
@@ -105,13 +105,13 @@ describe('unicode', function () {
|
|
105
105
|
afterAll(function () {
|
106
106
|
NormalizedUnicodes = null;
|
107
107
|
});
|
108
|
-
it(
|
109
|
-
var A = getGlyphUnicode(
|
110
|
-
expect((0, _unicode.reverseIfRtl)(A)).toEqual(
|
108
|
+
it("should not reverse LTR characters", function () {
|
109
|
+
var A = getGlyphUnicode("A");
|
110
|
+
expect((0, _unicode.reverseIfRtl)(A)).toEqual("A");
|
111
111
|
var fi = getGlyphUnicode("\uFB01");
|
112
|
-
expect((0, _unicode.reverseIfRtl)(fi)).toEqual(
|
112
|
+
expect((0, _unicode.reverseIfRtl)(fi)).toEqual("fi");
|
113
113
|
});
|
114
|
-
it(
|
114
|
+
it("should reverse RTL characters", function () {
|
115
115
|
var heAlef = getGlyphUnicode("\u05D0");
|
116
116
|
expect((0, _unicode.reverseIfRtl)(heAlef)).toEqual("\u05D0");
|
117
117
|
var arAlef = getGlyphUnicode("\u0675");
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -21,242 +21,222 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _util = require("../../shared/util");
|
24
|
+
var _util = require("../../shared/util.js");
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
describe('bytesToString', function () {
|
30
|
-
it('handles non-array arguments', function () {
|
26
|
+
describe("util", function () {
|
27
|
+
describe("bytesToString", function () {
|
28
|
+
it("handles non-array arguments", function () {
|
31
29
|
expect(function () {
|
32
30
|
(0, _util.bytesToString)(null);
|
33
|
-
}).toThrow(new Error(
|
31
|
+
}).toThrow(new Error("Invalid argument for bytesToString"));
|
34
32
|
});
|
35
|
-
it(
|
36
|
-
expect((0, _util.bytesToString)(new Uint8Array([]))).toEqual(
|
37
|
-
expect((0, _util.bytesToString)(new Uint8Array([102, 111, 111]))).toEqual(
|
33
|
+
it("handles array arguments with a length not exceeding the maximum", function () {
|
34
|
+
expect((0, _util.bytesToString)(new Uint8Array([]))).toEqual("");
|
35
|
+
expect((0, _util.bytesToString)(new Uint8Array([102, 111, 111]))).toEqual("foo");
|
38
36
|
});
|
39
|
-
it(
|
40
|
-
|
41
|
-
|
37
|
+
it("handles array arguments with a length exceeding the maximum", function () {
|
38
|
+
const length = 10000;
|
39
|
+
const bytes = new Uint8Array(length);
|
42
40
|
|
43
|
-
for (
|
44
|
-
bytes[i] =
|
41
|
+
for (let i = 0; i < length; i++) {
|
42
|
+
bytes[i] = "a".charCodeAt(0);
|
45
43
|
}
|
46
44
|
|
47
|
-
|
45
|
+
const string = Array(length + 1).join("a");
|
48
46
|
expect((0, _util.bytesToString)(bytes)).toEqual(string);
|
49
47
|
});
|
50
48
|
});
|
51
|
-
describe(
|
52
|
-
it(
|
49
|
+
describe("isArrayBuffer", function () {
|
50
|
+
it("handles array buffer values", function () {
|
53
51
|
expect((0, _util.isArrayBuffer)(new ArrayBuffer(0))).toEqual(true);
|
54
52
|
expect((0, _util.isArrayBuffer)(new Uint8Array(0))).toEqual(true);
|
55
53
|
});
|
56
|
-
it(
|
57
|
-
expect((0, _util.isArrayBuffer)(
|
54
|
+
it("handles non-array buffer values", function () {
|
55
|
+
expect((0, _util.isArrayBuffer)("true")).toEqual(false);
|
58
56
|
expect((0, _util.isArrayBuffer)(1)).toEqual(false);
|
59
57
|
expect((0, _util.isArrayBuffer)(null)).toEqual(false);
|
60
58
|
expect((0, _util.isArrayBuffer)(undefined)).toEqual(false);
|
61
59
|
});
|
62
60
|
});
|
63
|
-
describe(
|
64
|
-
it(
|
61
|
+
describe("isBool", function () {
|
62
|
+
it("handles boolean values", function () {
|
65
63
|
expect((0, _util.isBool)(true)).toEqual(true);
|
66
64
|
expect((0, _util.isBool)(false)).toEqual(true);
|
67
65
|
});
|
68
|
-
it(
|
69
|
-
expect((0, _util.isBool)(
|
70
|
-
expect((0, _util.isBool)(
|
66
|
+
it("handles non-boolean values", function () {
|
67
|
+
expect((0, _util.isBool)("true")).toEqual(false);
|
68
|
+
expect((0, _util.isBool)("false")).toEqual(false);
|
71
69
|
expect((0, _util.isBool)(1)).toEqual(false);
|
72
70
|
expect((0, _util.isBool)(0)).toEqual(false);
|
73
71
|
expect((0, _util.isBool)(null)).toEqual(false);
|
74
72
|
expect((0, _util.isBool)(undefined)).toEqual(false);
|
75
73
|
});
|
76
74
|
});
|
77
|
-
describe(
|
78
|
-
it(
|
79
|
-
expect((0, _util.isEmptyObj)({})).toEqual(true);
|
80
|
-
});
|
81
|
-
it('handles non-empty objects', function () {
|
82
|
-
expect((0, _util.isEmptyObj)({
|
83
|
-
foo: 'bar'
|
84
|
-
})).toEqual(false);
|
85
|
-
});
|
86
|
-
});
|
87
|
-
describe('isNum', function () {
|
88
|
-
it('handles numeric values', function () {
|
75
|
+
describe("isNum", function () {
|
76
|
+
it("handles numeric values", function () {
|
89
77
|
expect((0, _util.isNum)(1)).toEqual(true);
|
90
78
|
expect((0, _util.isNum)(0)).toEqual(true);
|
91
79
|
expect((0, _util.isNum)(-1)).toEqual(true);
|
92
80
|
expect((0, _util.isNum)(1000000000000000000)).toEqual(true);
|
93
81
|
expect((0, _util.isNum)(12.34)).toEqual(true);
|
94
82
|
});
|
95
|
-
it(
|
96
|
-
expect((0, _util.isNum)(
|
83
|
+
it("handles non-numeric values", function () {
|
84
|
+
expect((0, _util.isNum)("true")).toEqual(false);
|
97
85
|
expect((0, _util.isNum)(true)).toEqual(false);
|
98
86
|
expect((0, _util.isNum)(null)).toEqual(false);
|
99
87
|
expect((0, _util.isNum)(undefined)).toEqual(false);
|
100
88
|
});
|
101
89
|
});
|
102
|
-
describe(
|
103
|
-
it(
|
104
|
-
expect((0, _util.
|
105
|
-
expect((0, _util.
|
106
|
-
expect((0, _util.isSpace)(0x0D)).toEqual(true);
|
107
|
-
expect((0, _util.isSpace)(0x0A)).toEqual(true);
|
108
|
-
});
|
109
|
-
it('handles non-space characters', function () {
|
110
|
-
expect((0, _util.isSpace)(0x0B)).toEqual(false);
|
111
|
-
expect((0, _util.isSpace)(null)).toEqual(false);
|
112
|
-
expect((0, _util.isSpace)(undefined)).toEqual(false);
|
90
|
+
describe("isString", function () {
|
91
|
+
it("handles string values", function () {
|
92
|
+
expect((0, _util.isString)("foo")).toEqual(true);
|
93
|
+
expect((0, _util.isString)("")).toEqual(true);
|
113
94
|
});
|
114
|
-
|
115
|
-
describe('isString', function () {
|
116
|
-
it('handles string values', function () {
|
117
|
-
expect((0, _util.isString)('foo')).toEqual(true);
|
118
|
-
expect((0, _util.isString)('')).toEqual(true);
|
119
|
-
});
|
120
|
-
it('handles non-string values', function () {
|
95
|
+
it("handles non-string values", function () {
|
121
96
|
expect((0, _util.isString)(true)).toEqual(false);
|
122
97
|
expect((0, _util.isString)(1)).toEqual(false);
|
123
98
|
expect((0, _util.isString)(null)).toEqual(false);
|
124
99
|
expect((0, _util.isString)(undefined)).toEqual(false);
|
125
100
|
});
|
126
101
|
});
|
127
|
-
describe(
|
128
|
-
it(
|
129
|
-
expect((0, _util.
|
130
|
-
expect((0, _util.
|
131
|
-
|
132
|
-
it('handles values larger than zero', function () {
|
133
|
-
expect((0, _util.log2)(1)).toEqual(0);
|
134
|
-
expect((0, _util.log2)(2)).toEqual(1);
|
135
|
-
expect((0, _util.log2)(3)).toEqual(2);
|
136
|
-
expect((0, _util.log2)(3.14)).toEqual(2);
|
137
|
-
});
|
138
|
-
});
|
139
|
-
describe('string32', function () {
|
140
|
-
it('converts unsigned 32-bit integers to strings', function () {
|
141
|
-
expect((0, _util.string32)(0x74727565)).toEqual('true');
|
142
|
-
expect((0, _util.string32)(0x74797031)).toEqual('typ1');
|
143
|
-
expect((0, _util.string32)(0x4F54544F)).toEqual('OTTO');
|
102
|
+
describe("string32", function () {
|
103
|
+
it("converts unsigned 32-bit integers to strings", function () {
|
104
|
+
expect((0, _util.string32)(0x74727565)).toEqual("true");
|
105
|
+
expect((0, _util.string32)(0x74797031)).toEqual("typ1");
|
106
|
+
expect((0, _util.string32)(0x4f54544f)).toEqual("OTTO");
|
144
107
|
});
|
145
108
|
});
|
146
|
-
describe(
|
147
|
-
it(
|
109
|
+
describe("stringToBytes", function () {
|
110
|
+
it("handles non-string arguments", function () {
|
148
111
|
expect(function () {
|
149
112
|
(0, _util.stringToBytes)(null);
|
150
|
-
}).toThrow(new Error(
|
113
|
+
}).toThrow(new Error("Invalid argument for stringToBytes"));
|
151
114
|
});
|
152
|
-
it(
|
153
|
-
expect((0, _util.stringToBytes)(
|
154
|
-
expect((0, _util.stringToBytes)(
|
115
|
+
it("handles string arguments", function () {
|
116
|
+
expect((0, _util.stringToBytes)("")).toEqual(new Uint8Array([]));
|
117
|
+
expect((0, _util.stringToBytes)("foo")).toEqual(new Uint8Array([102, 111, 111]));
|
155
118
|
});
|
156
119
|
});
|
157
|
-
describe(
|
158
|
-
it(
|
159
|
-
|
120
|
+
describe("stringToPDFString", function () {
|
121
|
+
it("handles ISO Latin 1 strings", function () {
|
122
|
+
const str = "\x8Dstring\x8E";
|
160
123
|
expect((0, _util.stringToPDFString)(str)).toEqual("\u201Cstring\u201D");
|
161
124
|
});
|
162
|
-
it(
|
163
|
-
|
164
|
-
expect((0, _util.stringToPDFString)(str)).toEqual(
|
125
|
+
it("handles UTF-16 big-endian strings", function () {
|
126
|
+
const str = "\xFE\xFF\x00\x73\x00\x74\x00\x72\x00\x69\x00\x6E\x00\x67";
|
127
|
+
expect((0, _util.stringToPDFString)(str)).toEqual("string");
|
128
|
+
});
|
129
|
+
it("handles UTF-16 little-endian strings", function () {
|
130
|
+
const str = "\xFF\xFE\x73\x00\x74\x00\x72\x00\x69\x00\x6E\x00\x67\x00";
|
131
|
+
expect((0, _util.stringToPDFString)(str)).toEqual("string");
|
165
132
|
});
|
166
|
-
it(
|
167
|
-
|
168
|
-
expect((0, _util.stringToPDFString)(str1)).toEqual(
|
169
|
-
|
170
|
-
expect((0, _util.stringToPDFString)(str2)).toEqual(
|
133
|
+
it("handles empty strings", function () {
|
134
|
+
const str1 = "";
|
135
|
+
expect((0, _util.stringToPDFString)(str1)).toEqual("");
|
136
|
+
const str2 = "\xFE\xFF";
|
137
|
+
expect((0, _util.stringToPDFString)(str2)).toEqual("");
|
138
|
+
const str3 = "\xFF\xFE";
|
139
|
+
expect((0, _util.stringToPDFString)(str3)).toEqual("");
|
171
140
|
});
|
172
141
|
});
|
173
|
-
describe(
|
174
|
-
it(
|
175
|
-
|
176
|
-
expect((0, _util.removeNullCharacters)(str)).toEqual(
|
142
|
+
describe("removeNullCharacters", function () {
|
143
|
+
it("should not modify string without null characters", function () {
|
144
|
+
const str = "string without null chars";
|
145
|
+
expect((0, _util.removeNullCharacters)(str)).toEqual("string without null chars");
|
177
146
|
});
|
178
|
-
it(
|
179
|
-
|
180
|
-
expect((0, _util.removeNullCharacters)(str)).toEqual(
|
147
|
+
it("should modify string with null characters", function () {
|
148
|
+
const str = "string\x00With\x00Null\x00Chars";
|
149
|
+
expect((0, _util.removeNullCharacters)(str)).toEqual("stringWithNullChars");
|
181
150
|
});
|
182
151
|
});
|
183
|
-
describe(
|
184
|
-
it(
|
185
|
-
|
186
|
-
expect(
|
152
|
+
describe("ReadableStream", function () {
|
153
|
+
it("should return an Object", function () {
|
154
|
+
const readable = new ReadableStream();
|
155
|
+
expect(typeof readable).toEqual("object");
|
187
156
|
});
|
188
|
-
it(
|
189
|
-
|
190
|
-
expect(
|
157
|
+
it("should have property getReader", function () {
|
158
|
+
const readable = new ReadableStream();
|
159
|
+
expect(typeof readable.getReader).toEqual("function");
|
191
160
|
});
|
192
161
|
});
|
193
|
-
describe(
|
194
|
-
it(
|
195
|
-
|
196
|
-
expect(
|
162
|
+
describe("URL", function () {
|
163
|
+
it("should return an Object", function () {
|
164
|
+
const url = new URL("https://example.com");
|
165
|
+
expect(typeof url).toEqual("object");
|
197
166
|
});
|
198
|
-
it(
|
199
|
-
|
200
|
-
expect(
|
167
|
+
it("should have property `href`", function () {
|
168
|
+
const url = new URL("https://example.com");
|
169
|
+
expect(typeof url.href).toEqual("string");
|
201
170
|
});
|
202
171
|
});
|
203
|
-
describe(
|
204
|
-
it(
|
205
|
-
expect((0, _util.isSameOrigin)(
|
206
|
-
expect((0, _util.isSameOrigin)(
|
172
|
+
describe("isSameOrigin", function () {
|
173
|
+
it("handles invalid base URLs", function () {
|
174
|
+
expect((0, _util.isSameOrigin)("/foo", "/bar")).toEqual(false);
|
175
|
+
expect((0, _util.isSameOrigin)("blob:foo", "/bar")).toEqual(false);
|
207
176
|
});
|
208
|
-
it(
|
209
|
-
expect((0, _util.isSameOrigin)(
|
210
|
-
expect((0, _util.isSameOrigin)(
|
177
|
+
it("correctly checks if the origin of both URLs matches", function () {
|
178
|
+
expect((0, _util.isSameOrigin)("https://www.mozilla.org/foo", "https://www.mozilla.org/bar")).toEqual(true);
|
179
|
+
expect((0, _util.isSameOrigin)("https://www.mozilla.org/foo", "https://www.example.com/bar")).toEqual(false);
|
211
180
|
});
|
212
181
|
});
|
213
|
-
describe(
|
214
|
-
it(
|
182
|
+
describe("createValidAbsoluteUrl", function () {
|
183
|
+
it("handles invalid URLs", function () {
|
215
184
|
expect((0, _util.createValidAbsoluteUrl)(undefined, undefined)).toEqual(null);
|
216
185
|
expect((0, _util.createValidAbsoluteUrl)(null, null)).toEqual(null);
|
217
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
218
|
-
});
|
219
|
-
it(
|
220
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
221
|
-
});
|
222
|
-
it(
|
223
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
224
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
225
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
226
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
227
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
228
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
229
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
230
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
231
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
232
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
233
|
-
});
|
234
|
-
});
|
235
|
-
describe(
|
236
|
-
it(
|
237
|
-
|
186
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "/bar")).toEqual(null);
|
187
|
+
});
|
188
|
+
it("handles URLs that do not use an allowed protocol", function () {
|
189
|
+
expect((0, _util.createValidAbsoluteUrl)("magnet:?foo", null)).toEqual(null);
|
190
|
+
});
|
191
|
+
it("correctly creates a valid URL for allowed protocols", function () {
|
192
|
+
expect((0, _util.createValidAbsoluteUrl)("http://www.mozilla.org/foo", null)).toEqual(new URL("http://www.mozilla.org/foo"));
|
193
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "http://www.mozilla.org")).toEqual(new URL("http://www.mozilla.org/foo"));
|
194
|
+
expect((0, _util.createValidAbsoluteUrl)("https://www.mozilla.org/foo", null)).toEqual(new URL("https://www.mozilla.org/foo"));
|
195
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "https://www.mozilla.org")).toEqual(new URL("https://www.mozilla.org/foo"));
|
196
|
+
expect((0, _util.createValidAbsoluteUrl)("ftp://www.mozilla.org/foo", null)).toEqual(new URL("ftp://www.mozilla.org/foo"));
|
197
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "ftp://www.mozilla.org")).toEqual(new URL("ftp://www.mozilla.org/foo"));
|
198
|
+
expect((0, _util.createValidAbsoluteUrl)("mailto:foo@bar.baz", null)).toEqual(new URL("mailto:foo@bar.baz"));
|
199
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "mailto:foo@bar.baz")).toEqual(null);
|
200
|
+
expect((0, _util.createValidAbsoluteUrl)("tel:+0123456789", null)).toEqual(new URL("tel:+0123456789"));
|
201
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "tel:0123456789")).toEqual(null);
|
202
|
+
});
|
203
|
+
});
|
204
|
+
describe("createPromiseCapability", function () {
|
205
|
+
it("should resolve with correct data", function (done) {
|
206
|
+
const promiseCapability = (0, _util.createPromiseCapability)();
|
238
207
|
expect(promiseCapability.settled).toEqual(false);
|
239
208
|
promiseCapability.resolve({
|
240
|
-
test:
|
209
|
+
test: "abc"
|
241
210
|
});
|
242
211
|
promiseCapability.promise.then(function (data) {
|
243
212
|
expect(promiseCapability.settled).toEqual(true);
|
244
213
|
expect(data).toEqual({
|
245
|
-
test:
|
214
|
+
test: "abc"
|
246
215
|
});
|
247
216
|
done();
|
248
217
|
}, done.fail);
|
249
218
|
});
|
250
|
-
it(
|
251
|
-
|
219
|
+
it("should reject with correct reason", function (done) {
|
220
|
+
const promiseCapability = (0, _util.createPromiseCapability)();
|
252
221
|
expect(promiseCapability.settled).toEqual(false);
|
253
|
-
promiseCapability.reject(new Error(
|
222
|
+
promiseCapability.reject(new Error("reason"));
|
254
223
|
promiseCapability.promise.then(done.fail, function (reason) {
|
255
224
|
expect(promiseCapability.settled).toEqual(true);
|
256
225
|
expect(reason instanceof Error).toEqual(true);
|
257
|
-
expect(reason.message).toEqual(
|
226
|
+
expect(reason.message).toEqual("reason");
|
258
227
|
done();
|
259
228
|
});
|
260
229
|
});
|
261
230
|
});
|
231
|
+
describe("escapeString", function () {
|
232
|
+
it("should escape (, ) and \\", function () {
|
233
|
+
expect((0, _util.escapeString)("((a\\a))(b(b\\b)b)")).toEqual("\\(\\(a\\\\a\\)\\)\\(b\\(b\\\\b\\)b\\)");
|
234
|
+
});
|
235
|
+
});
|
236
|
+
describe("getModificationDate", function () {
|
237
|
+
it("should get a correctly formatted date", function () {
|
238
|
+
const date = new Date(Date.UTC(3141, 5, 9, 2, 6, 53));
|
239
|
+
expect((0, _util.getModificationDate)(date)).toEqual("31410610020653");
|
240
|
+
});
|
241
|
+
});
|
262
242
|
});
|
@@ -0,0 +1,84 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
var _primitives = require("../../core/primitives.js");
|
25
|
+
|
26
|
+
var _writer = require("../../core/writer.js");
|
27
|
+
|
28
|
+
var _util = require("../../shared/util.js");
|
29
|
+
|
30
|
+
var _stream = require("../../core/stream.js");
|
31
|
+
|
32
|
+
describe("Writer", function () {
|
33
|
+
describe("Incremental update", function () {
|
34
|
+
it("should update a file with new objects", function (done) {
|
35
|
+
const originalData = new Uint8Array();
|
36
|
+
const newRefs = [{
|
37
|
+
ref: _primitives.Ref.get(123, 0x2d),
|
38
|
+
data: "abc\n"
|
39
|
+
}, {
|
40
|
+
ref: _primitives.Ref.get(456, 0x4e),
|
41
|
+
data: "defg\n"
|
42
|
+
}];
|
43
|
+
const xrefInfo = {
|
44
|
+
newRef: _primitives.Ref.get(789, 0),
|
45
|
+
startXRef: 314,
|
46
|
+
fileIds: ["id", ""],
|
47
|
+
rootRef: null,
|
48
|
+
infoRef: null,
|
49
|
+
encrypt: null,
|
50
|
+
filename: "foo.pdf",
|
51
|
+
info: {}
|
52
|
+
};
|
53
|
+
let data = (0, _writer.incrementalUpdate)(originalData, xrefInfo, newRefs);
|
54
|
+
data = (0, _util.bytesToString)(data);
|
55
|
+
const expected = "\nabc\n" + "defg\n" + "789 0 obj\n" + "<< /Size 790 /Prev 314 /Type /XRef /Index [0 1 123 1 456 1 789 1] " + "/ID [(id) (\x01#Eg\x89\xab\xcd\xef\xfe\xdc\xba\x98vT2\x10)] " + "/W [1 1 2] /Length 16>> stream\n" + "\x00\x01\xff\xff" + "\x01\x01\x00\x2d" + "\x01\x05\x00\x4e" + "\x01\x0a\x00\x00\n" + "endstream\n" + "endobj\n" + "startxref\n" + "10\n" + "%%EOF\n";
|
56
|
+
expect(data).toEqual(expected);
|
57
|
+
done();
|
58
|
+
});
|
59
|
+
});
|
60
|
+
describe("writeDict", function () {
|
61
|
+
it("should write a Dict", function (done) {
|
62
|
+
const dict = new _primitives.Dict(null);
|
63
|
+
dict.set("A", _primitives.Name.get("B"));
|
64
|
+
dict.set("B", _primitives.Ref.get(123, 456));
|
65
|
+
dict.set("C", 789);
|
66
|
+
dict.set("D", "hello world");
|
67
|
+
dict.set("E", "(hello\\world)");
|
68
|
+
dict.set("F", [1.23001, 4.50001, 6]);
|
69
|
+
const gdict = new _primitives.Dict(null);
|
70
|
+
gdict.set("H", 123.00001);
|
71
|
+
const string = "a stream";
|
72
|
+
const stream = new _stream.StringStream(string);
|
73
|
+
stream.dict = new _primitives.Dict(null);
|
74
|
+
stream.dict.set("Length", string.length);
|
75
|
+
gdict.set("I", stream);
|
76
|
+
dict.set("G", gdict);
|
77
|
+
const buffer = [];
|
78
|
+
(0, _writer.writeDict)(dict, buffer, null);
|
79
|
+
const expected = "<< /A /B /B 123 456 R /C 789 /D (hello world) " + "/E (\\(hello\\\\world\\)) /F [1.23 4.5 6] " + "/G << /H 123 /I << /Length 8>> stream\n" + "a stream\n" + "endstream\n>>>>";
|
80
|
+
expect(buffer.join("")).toEqual(expected);
|
81
|
+
done();
|
82
|
+
});
|
83
|
+
});
|
84
|
+
});
|