pdfjs-dist 2.0.943 → 2.4.456
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/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8286 -14230
- 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 +25500 -26628
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -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/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +2887 -4094
- 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 +855 -778
- package/lib/core/arithmetic_decoder.js +325 -311
- package/lib/core/bidi.js +117 -50
- package/lib/core/ccitt.js +251 -89
- package/lib/core/ccitt_stream.js +26 -16
- package/lib/core/cff_parser.js +525 -197
- package/lib/core/charsets.js +6 -5
- package/lib/core/chunked_stream.js +541 -406
- package/lib/core/cmap.js +368 -253
- package/lib/core/colorspace.js +781 -800
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +609 -422
- package/lib/core/document.js +649 -481
- package/lib/core/encodings.js +33 -24
- package/lib/core/evaluator.js +1471 -736
- package/lib/core/font_renderer.js +289 -149
- package/lib/core/fonts.js +1067 -413
- package/lib/core/function.js +517 -287
- package/lib/core/glyphlist.js +4529 -4527
- package/lib/core/image.js +232 -114
- package/lib/core/image_utils.js +94 -0
- package/lib/core/jbig2.js +711 -342
- package/lib/core/jbig2_stream.js +31 -19
- package/lib/core/jpeg_stream.js +151 -26
- package/lib/core/jpg.js +433 -181
- package/lib/core/jpx.js +551 -143
- package/lib/core/jpx_stream.js +40 -28
- package/lib/core/metrics.js +2931 -2931
- package/lib/core/murmurhash3.js +104 -97
- package/lib/core/obj.js +1561 -1053
- package/lib/core/operator_list.js +192 -64
- package/lib/core/parser.js +1162 -864
- package/lib/core/pattern.js +224 -75
- package/lib/core/pdf_manager.js +154 -285
- package/lib/core/primitives.js +145 -69
- package/lib/core/ps_parser.js +212 -162
- package/lib/core/standard_fonts.js +245 -244
- package/lib/core/stream.js +353 -81
- package/lib/core/type1_parser.js +218 -68
- package/lib/core/unicode.js +1682 -1655
- package/lib/core/worker.js +233 -302
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +808 -862
- package/lib/display/api.js +1778 -1462
- package/lib/display/api_compatibility.js +14 -9
- package/lib/display/canvas.js +463 -140
- package/lib/display/content_disposition.js +86 -58
- package/lib/display/display_utils.js +524 -0
- package/lib/display/fetch_stream.js +202 -274
- package/lib/display/font_loader.js +311 -333
- package/lib/display/metadata.js +98 -88
- package/lib/display/network.js +343 -347
- package/lib/display/network_utils.js +46 -26
- package/lib/display/node_stream.js +326 -404
- package/lib/display/pattern_helper.js +168 -69
- package/lib/display/svg.js +1296 -885
- package/lib/display/text_layer.js +229 -103
- package/lib/display/transport_stream.js +290 -250
- package/lib/display/webgl.js +116 -83
- package/lib/display/worker_options.js +6 -5
- package/lib/display/xml_parser.js +358 -337
- package/lib/examples/node/domstubs.js +95 -39
- package/lib/pdf.js +49 -31
- package/lib/pdf.worker.js +7 -5
- package/lib/shared/compatibility.js +3 -145
- package/lib/shared/is_node.js +8 -7
- package/lib/shared/message_handler.js +367 -314
- package/lib/shared/util.js +421 -415
- package/lib/test/unit/annotation_spec.js +1570 -690
- package/lib/test/unit/api_spec.js +855 -493
- package/lib/test/unit/bidi_spec.js +12 -12
- package/lib/test/unit/cff_parser_spec.js +88 -61
- package/lib/test/unit/clitests_helper.js +9 -12
- package/lib/test/unit/cmap_spec.js +140 -88
- package/lib/test/unit/colorspace_spec.js +204 -152
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +194 -182
- package/lib/test/unit/custom_spec.js +50 -64
- package/lib/test/unit/display_svg_spec.js +53 -38
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +17 -22
- package/lib/test/unit/encodings_spec.js +15 -57
- package/lib/test/unit/evaluator_spec.js +90 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +219 -205
- package/lib/test/unit/jasmine-boot.js +68 -39
- package/lib/test/unit/message_handler_spec.js +187 -160
- package/lib/test/unit/metadata_spec.js +87 -34
- package/lib/test/unit/murmurhash3_spec.js +13 -13
- package/lib/test/unit/network_spec.js +26 -59
- package/lib/test/unit/network_utils_spec.js +187 -121
- package/lib/test/unit/node_stream_spec.js +98 -90
- package/lib/test/unit/parser_spec.js +173 -131
- package/lib/test/unit/pdf_find_controller_spec.js +148 -67
- package/lib/test/unit/pdf_find_utils_spec.js +35 -34
- package/lib/test/unit/pdf_history_spec.js +45 -33
- package/lib/test/unit/primitives_spec.js +161 -126
- package/lib/test/unit/stream_spec.js +22 -15
- package/lib/test/unit/test_utils.js +149 -98
- package/lib/test/unit/testreporter.js +36 -18
- package/lib/test/unit/type1_parser_spec.js +46 -44
- package/lib/test/unit/ui_utils_spec.js +388 -372
- package/lib/test/unit/unicode_spec.js +49 -46
- package/lib/test/unit/util_spec.js +144 -248
- package/lib/web/annotation_layer_builder.js +75 -95
- package/lib/web/app.js +1538 -1147
- package/lib/web/app_options.js +116 -104
- package/lib/web/base_viewer.js +950 -775
- package/lib/web/chromecom.js +217 -225
- package/lib/web/debugger.js +236 -148
- package/lib/web/download_manager.js +50 -50
- package/lib/web/firefox_print_service.js +51 -33
- package/lib/web/firefoxcom.js +225 -352
- package/lib/web/genericcom.js +30 -93
- package/lib/web/genericl10n.js +26 -143
- package/lib/web/grab_to_pan.js +57 -33
- package/lib/web/interfaces.js +105 -232
- package/lib/web/overlay_manager.js +73 -227
- package/lib/web/password_prompt.js +44 -62
- package/lib/web/pdf_attachment_viewer.js +118 -123
- package/lib/web/pdf_cursor_tools.js +89 -93
- package/lib/web/pdf_document_properties.js +242 -281
- package/lib/web/pdf_find_bar.js +157 -163
- package/lib/web/pdf_find_controller.js +598 -454
- package/lib/web/pdf_find_utils.js +32 -16
- package/lib/web/pdf_history.js +481 -355
- package/lib/web/pdf_link_service.js +355 -323
- package/lib/web/pdf_outline_viewer.js +167 -152
- package/lib/web/pdf_page_view.js +511 -457
- package/lib/web/pdf_presentation_mode.js +347 -335
- package/lib/web/pdf_print_service.js +133 -103
- package/lib/web/pdf_rendering_queue.js +98 -100
- package/lib/web/pdf_sidebar.js +323 -299
- package/lib/web/pdf_sidebar_resizer.js +107 -108
- package/lib/web/pdf_single_page_viewer.js +94 -146
- package/lib/web/pdf_thumbnail_view.js +319 -269
- package/lib/web/pdf_thumbnail_viewer.js +219 -199
- package/lib/web/pdf_viewer.component.js +111 -32
- package/lib/web/pdf_viewer.js +61 -101
- package/lib/web/preferences.js +87 -272
- package/lib/web/secondary_toolbar.js +207 -220
- package/lib/web/text_layer_builder.js +322 -322
- package/lib/web/toolbar.js +227 -180
- package/lib/web/ui_utils.js +476 -421
- package/lib/web/view_history.js +59 -208
- package/lib/web/viewer_compatibility.js +9 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +36 -22
- package/web/pdf_viewer.js +4407 -4516
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -441
- package/lib/shared/streams_polyfill.js +0 -39
- package/lib/shared/url_polyfill.js +0 -50
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/web/dom_events.js +0 -140
@@ -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.
|
@@ -19,24 +19,24 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _glyphlist = require(
|
24
|
+
var _glyphlist = require("../../core/glyphlist.js");
|
25
25
|
|
26
|
-
var _unicode = require(
|
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,22 +79,25 @@ describe('unicode', function () {
|
|
79
79
|
afterAll(function () {
|
80
80
|
NormalizedUnicodes = null;
|
81
81
|
});
|
82
|
-
it(
|
83
|
-
expect(NormalizedUnicodes[
|
84
|
-
expect(NormalizedUnicodes[
|
82
|
+
it("should get normalized Unicode values for ligatures", function () {
|
83
|
+
expect(NormalizedUnicodes["\uFB01"]).toEqual("fi");
|
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(char) {
|
93
94
|
if (NormalizedUnicodes[char] !== undefined) {
|
94
95
|
return NormalizedUnicodes[char];
|
95
96
|
}
|
97
|
+
|
96
98
|
return char;
|
97
99
|
}
|
100
|
+
|
98
101
|
beforeAll(function (done) {
|
99
102
|
NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
|
100
103
|
done();
|
@@ -102,17 +105,17 @@ describe('unicode', function () {
|
|
102
105
|
afterAll(function () {
|
103
106
|
NormalizedUnicodes = null;
|
104
107
|
});
|
105
|
-
it(
|
106
|
-
var A = getGlyphUnicode(
|
107
|
-
expect((0, _unicode.reverseIfRtl)(A)).toEqual(
|
108
|
-
var fi = getGlyphUnicode(
|
109
|
-
expect((0, _unicode.reverseIfRtl)(fi)).toEqual(
|
110
|
-
});
|
111
|
-
it(
|
112
|
-
var heAlef = getGlyphUnicode(
|
113
|
-
expect((0, _unicode.reverseIfRtl)(heAlef)).toEqual(
|
114
|
-
var arAlef = getGlyphUnicode(
|
115
|
-
expect((0, _unicode.reverseIfRtl)(arAlef)).toEqual(
|
108
|
+
it("should not reverse LTR characters", function () {
|
109
|
+
var A = getGlyphUnicode("A");
|
110
|
+
expect((0, _unicode.reverseIfRtl)(A)).toEqual("A");
|
111
|
+
var fi = getGlyphUnicode("\uFB01");
|
112
|
+
expect((0, _unicode.reverseIfRtl)(fi)).toEqual("fi");
|
113
|
+
});
|
114
|
+
it("should reverse RTL characters", function () {
|
115
|
+
var heAlef = getGlyphUnicode("\u05D0");
|
116
|
+
expect((0, _unicode.reverseIfRtl)(heAlef)).toEqual("\u05D0");
|
117
|
+
var arAlef = getGlyphUnicode("\u0675");
|
118
|
+
expect((0, _unicode.reverseIfRtl)(arAlef)).toEqual("\u0674\u0627");
|
116
119
|
});
|
117
120
|
});
|
118
121
|
});
|
@@ -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.
|
@@ -19,327 +19,223 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var
|
24
|
+
var _util = require("../../shared/util.js");
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
var _test_utils = require('./test_utils');
|
31
|
-
|
32
|
-
describe('util', function () {
|
33
|
-
describe('bytesToString', function () {
|
34
|
-
it('handles non-array arguments', function () {
|
26
|
+
describe("util", function () {
|
27
|
+
describe("bytesToString", function () {
|
28
|
+
it("handles non-array arguments", function () {
|
35
29
|
expect(function () {
|
36
30
|
(0, _util.bytesToString)(null);
|
37
|
-
}).toThrow(new Error(
|
31
|
+
}).toThrow(new Error("Invalid argument for bytesToString"));
|
38
32
|
});
|
39
|
-
it(
|
40
|
-
expect((0, _util.bytesToString)(new Uint8Array([]))).toEqual(
|
41
|
-
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");
|
42
36
|
});
|
43
|
-
it(
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
it("handles array arguments with a length exceeding the maximum", function () {
|
38
|
+
const length = 10000;
|
39
|
+
const bytes = new Uint8Array(length);
|
40
|
+
|
41
|
+
for (let i = 0; i < length; i++) {
|
42
|
+
bytes[i] = "a".charCodeAt(0);
|
48
43
|
}
|
49
|
-
|
44
|
+
|
45
|
+
const string = Array(length + 1).join("a");
|
50
46
|
expect((0, _util.bytesToString)(bytes)).toEqual(string);
|
51
47
|
});
|
52
48
|
});
|
53
|
-
describe(
|
54
|
-
it(
|
55
|
-
expect((0, _util.getInheritableProperty)({
|
56
|
-
dict: null,
|
57
|
-
key: 'foo'
|
58
|
-
})).toEqual(undefined);
|
59
|
-
expect((0, _util.getInheritableProperty)({
|
60
|
-
dict: undefined,
|
61
|
-
key: 'foo'
|
62
|
-
})).toEqual(undefined);
|
63
|
-
});
|
64
|
-
it('handles dictionaries that do not contain the property', function () {
|
65
|
-
var emptyDict = new _primitives.Dict();
|
66
|
-
expect((0, _util.getInheritableProperty)({
|
67
|
-
dict: emptyDict,
|
68
|
-
key: 'foo'
|
69
|
-
})).toEqual(undefined);
|
70
|
-
var filledDict = new _primitives.Dict();
|
71
|
-
filledDict.set('bar', 'baz');
|
72
|
-
expect((0, _util.getInheritableProperty)({
|
73
|
-
dict: filledDict,
|
74
|
-
key: 'foo'
|
75
|
-
})).toEqual(undefined);
|
76
|
-
});
|
77
|
-
it('fetches the property if it is not inherited', function () {
|
78
|
-
var ref = new _primitives.Ref(10, 0);
|
79
|
-
var xref = new _test_utils.XRefMock([{
|
80
|
-
ref: ref,
|
81
|
-
data: 'quux'
|
82
|
-
}]);
|
83
|
-
var dict = new _primitives.Dict(xref);
|
84
|
-
dict.set('foo', 'bar');
|
85
|
-
expect((0, _util.getInheritableProperty)({
|
86
|
-
dict: dict,
|
87
|
-
key: 'foo'
|
88
|
-
})).toEqual('bar');
|
89
|
-
dict.set('baz', ['qux', ref]);
|
90
|
-
expect((0, _util.getInheritableProperty)({
|
91
|
-
dict: dict,
|
92
|
-
key: 'baz',
|
93
|
-
getArray: true
|
94
|
-
})).toEqual(['qux', 'quux']);
|
95
|
-
});
|
96
|
-
it('fetches the property if it is inherited and present on one level', function () {
|
97
|
-
var ref = new _primitives.Ref(10, 0);
|
98
|
-
var xref = new _test_utils.XRefMock([{
|
99
|
-
ref: ref,
|
100
|
-
data: 'quux'
|
101
|
-
}]);
|
102
|
-
var firstDict = new _primitives.Dict(xref);
|
103
|
-
var secondDict = new _primitives.Dict(xref);
|
104
|
-
firstDict.set('Parent', secondDict);
|
105
|
-
secondDict.set('foo', 'bar');
|
106
|
-
expect((0, _util.getInheritableProperty)({
|
107
|
-
dict: firstDict,
|
108
|
-
key: 'foo'
|
109
|
-
})).toEqual('bar');
|
110
|
-
secondDict.set('baz', ['qux', ref]);
|
111
|
-
expect((0, _util.getInheritableProperty)({
|
112
|
-
dict: firstDict,
|
113
|
-
key: 'baz',
|
114
|
-
getArray: true
|
115
|
-
})).toEqual(['qux', 'quux']);
|
116
|
-
});
|
117
|
-
it('fetches the property if it is inherited and present on multiple levels', function () {
|
118
|
-
var ref = new _primitives.Ref(10, 0);
|
119
|
-
var xref = new _test_utils.XRefMock([{
|
120
|
-
ref: ref,
|
121
|
-
data: 'quux'
|
122
|
-
}]);
|
123
|
-
var firstDict = new _primitives.Dict(xref);
|
124
|
-
var secondDict = new _primitives.Dict(xref);
|
125
|
-
firstDict.set('Parent', secondDict);
|
126
|
-
firstDict.set('foo', 'bar1');
|
127
|
-
secondDict.set('foo', 'bar2');
|
128
|
-
expect((0, _util.getInheritableProperty)({
|
129
|
-
dict: firstDict,
|
130
|
-
key: 'foo'
|
131
|
-
})).toEqual('bar1');
|
132
|
-
expect((0, _util.getInheritableProperty)({
|
133
|
-
dict: firstDict,
|
134
|
-
key: 'foo',
|
135
|
-
getArray: false,
|
136
|
-
stopWhenFound: false
|
137
|
-
})).toEqual(['bar1', 'bar2']);
|
138
|
-
firstDict.set('baz', ['qux1', ref]);
|
139
|
-
secondDict.set('baz', ['qux2', ref]);
|
140
|
-
expect((0, _util.getInheritableProperty)({
|
141
|
-
dict: firstDict,
|
142
|
-
key: 'baz',
|
143
|
-
getArray: true,
|
144
|
-
stopWhenFound: false
|
145
|
-
})).toEqual([['qux1', 'quux'], ['qux2', 'quux']]);
|
146
|
-
});
|
147
|
-
it('stops searching when the loop limit is reached', function () {
|
148
|
-
var dict = new _primitives.Dict();
|
149
|
-
var currentDict = dict;
|
150
|
-
var parentDict = null;
|
151
|
-
for (var i = 0; i < 150; i++) {
|
152
|
-
parentDict = new _primitives.Dict();
|
153
|
-
currentDict.set('Parent', parentDict);
|
154
|
-
currentDict = parentDict;
|
155
|
-
}
|
156
|
-
parentDict.set('foo', 'bar');
|
157
|
-
expect((0, _util.getInheritableProperty)({
|
158
|
-
dict: dict,
|
159
|
-
key: 'foo'
|
160
|
-
})).toEqual(undefined);
|
161
|
-
dict.set('foo', 'baz');
|
162
|
-
expect((0, _util.getInheritableProperty)({
|
163
|
-
dict: dict,
|
164
|
-
key: 'foo',
|
165
|
-
getArray: false,
|
166
|
-
stopWhenFound: false
|
167
|
-
})).toEqual(['baz']);
|
168
|
-
});
|
169
|
-
});
|
170
|
-
describe('isArrayBuffer', function () {
|
171
|
-
it('handles array buffer values', function () {
|
49
|
+
describe("isArrayBuffer", function () {
|
50
|
+
it("handles array buffer values", function () {
|
172
51
|
expect((0, _util.isArrayBuffer)(new ArrayBuffer(0))).toEqual(true);
|
173
52
|
expect((0, _util.isArrayBuffer)(new Uint8Array(0))).toEqual(true);
|
174
53
|
});
|
175
|
-
it(
|
176
|
-
expect((0, _util.isArrayBuffer)(
|
54
|
+
it("handles non-array buffer values", function () {
|
55
|
+
expect((0, _util.isArrayBuffer)("true")).toEqual(false);
|
177
56
|
expect((0, _util.isArrayBuffer)(1)).toEqual(false);
|
178
57
|
expect((0, _util.isArrayBuffer)(null)).toEqual(false);
|
179
58
|
expect((0, _util.isArrayBuffer)(undefined)).toEqual(false);
|
180
59
|
});
|
181
60
|
});
|
182
|
-
describe(
|
183
|
-
it(
|
61
|
+
describe("isBool", function () {
|
62
|
+
it("handles boolean values", function () {
|
184
63
|
expect((0, _util.isBool)(true)).toEqual(true);
|
185
64
|
expect((0, _util.isBool)(false)).toEqual(true);
|
186
65
|
});
|
187
|
-
it(
|
188
|
-
expect((0, _util.isBool)(
|
189
|
-
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);
|
190
69
|
expect((0, _util.isBool)(1)).toEqual(false);
|
191
70
|
expect((0, _util.isBool)(0)).toEqual(false);
|
192
71
|
expect((0, _util.isBool)(null)).toEqual(false);
|
193
72
|
expect((0, _util.isBool)(undefined)).toEqual(false);
|
194
73
|
});
|
195
74
|
});
|
196
|
-
describe(
|
197
|
-
it(
|
75
|
+
describe("isEmptyObj", function () {
|
76
|
+
it("handles empty objects", function () {
|
198
77
|
expect((0, _util.isEmptyObj)({})).toEqual(true);
|
199
78
|
});
|
200
|
-
it(
|
201
|
-
expect((0, _util.isEmptyObj)({
|
79
|
+
it("handles non-empty objects", function () {
|
80
|
+
expect((0, _util.isEmptyObj)({
|
81
|
+
foo: "bar"
|
82
|
+
})).toEqual(false);
|
202
83
|
});
|
203
84
|
});
|
204
|
-
describe(
|
205
|
-
it(
|
85
|
+
describe("isNum", function () {
|
86
|
+
it("handles numeric values", function () {
|
206
87
|
expect((0, _util.isNum)(1)).toEqual(true);
|
207
88
|
expect((0, _util.isNum)(0)).toEqual(true);
|
208
89
|
expect((0, _util.isNum)(-1)).toEqual(true);
|
209
90
|
expect((0, _util.isNum)(1000000000000000000)).toEqual(true);
|
210
91
|
expect((0, _util.isNum)(12.34)).toEqual(true);
|
211
92
|
});
|
212
|
-
it(
|
213
|
-
expect((0, _util.isNum)(
|
93
|
+
it("handles non-numeric values", function () {
|
94
|
+
expect((0, _util.isNum)("true")).toEqual(false);
|
214
95
|
expect((0, _util.isNum)(true)).toEqual(false);
|
215
96
|
expect((0, _util.isNum)(null)).toEqual(false);
|
216
97
|
expect((0, _util.isNum)(undefined)).toEqual(false);
|
217
98
|
});
|
218
99
|
});
|
219
|
-
describe(
|
220
|
-
it(
|
221
|
-
expect((0, _util.
|
222
|
-
expect((0, _util.
|
223
|
-
expect((0, _util.isSpace)(0x0D)).toEqual(true);
|
224
|
-
expect((0, _util.isSpace)(0x0A)).toEqual(true);
|
225
|
-
});
|
226
|
-
it('handles non-space characters', function () {
|
227
|
-
expect((0, _util.isSpace)(0x0B)).toEqual(false);
|
228
|
-
expect((0, _util.isSpace)(null)).toEqual(false);
|
229
|
-
expect((0, _util.isSpace)(undefined)).toEqual(false);
|
230
|
-
});
|
231
|
-
});
|
232
|
-
describe('isString', function () {
|
233
|
-
it('handles string values', function () {
|
234
|
-
expect((0, _util.isString)('foo')).toEqual(true);
|
235
|
-
expect((0, _util.isString)('')).toEqual(true);
|
100
|
+
describe("isString", function () {
|
101
|
+
it("handles string values", function () {
|
102
|
+
expect((0, _util.isString)("foo")).toEqual(true);
|
103
|
+
expect((0, _util.isString)("")).toEqual(true);
|
236
104
|
});
|
237
|
-
it(
|
105
|
+
it("handles non-string values", function () {
|
238
106
|
expect((0, _util.isString)(true)).toEqual(false);
|
239
107
|
expect((0, _util.isString)(1)).toEqual(false);
|
240
108
|
expect((0, _util.isString)(null)).toEqual(false);
|
241
109
|
expect((0, _util.isString)(undefined)).toEqual(false);
|
242
110
|
});
|
243
111
|
});
|
244
|
-
describe(
|
245
|
-
it(
|
246
|
-
expect((0, _util.
|
247
|
-
expect((0, _util.
|
248
|
-
|
249
|
-
it('handles values larger than zero', function () {
|
250
|
-
expect((0, _util.log2)(1)).toEqual(0);
|
251
|
-
expect((0, _util.log2)(2)).toEqual(1);
|
252
|
-
expect((0, _util.log2)(3)).toEqual(2);
|
253
|
-
expect((0, _util.log2)(3.14)).toEqual(2);
|
112
|
+
describe("string32", function () {
|
113
|
+
it("converts unsigned 32-bit integers to strings", function () {
|
114
|
+
expect((0, _util.string32)(0x74727565)).toEqual("true");
|
115
|
+
expect((0, _util.string32)(0x74797031)).toEqual("typ1");
|
116
|
+
expect((0, _util.string32)(0x4f54544f)).toEqual("OTTO");
|
254
117
|
});
|
255
118
|
});
|
256
|
-
describe(
|
257
|
-
it(
|
119
|
+
describe("stringToBytes", function () {
|
120
|
+
it("handles non-string arguments", function () {
|
258
121
|
expect(function () {
|
259
122
|
(0, _util.stringToBytes)(null);
|
260
|
-
}).toThrow(new Error(
|
123
|
+
}).toThrow(new Error("Invalid argument for stringToBytes"));
|
261
124
|
});
|
262
|
-
it(
|
263
|
-
expect((0, _util.stringToBytes)(
|
264
|
-
expect((0, _util.stringToBytes)(
|
125
|
+
it("handles string arguments", function () {
|
126
|
+
expect((0, _util.stringToBytes)("")).toEqual(new Uint8Array([]));
|
127
|
+
expect((0, _util.stringToBytes)("foo")).toEqual(new Uint8Array([102, 111, 111]));
|
265
128
|
});
|
266
129
|
});
|
267
|
-
describe(
|
268
|
-
it(
|
269
|
-
|
270
|
-
expect((0, _util.stringToPDFString)(str)).toEqual(
|
130
|
+
describe("stringToPDFString", function () {
|
131
|
+
it("handles ISO Latin 1 strings", function () {
|
132
|
+
const str = "\x8Dstring\x8E";
|
133
|
+
expect((0, _util.stringToPDFString)(str)).toEqual("\u201Cstring\u201D");
|
134
|
+
});
|
135
|
+
it("handles UTF-16 big-endian strings", function () {
|
136
|
+
const str = "\xFE\xFF\x00\x73\x00\x74\x00\x72\x00\x69\x00\x6E\x00\x67";
|
137
|
+
expect((0, _util.stringToPDFString)(str)).toEqual("string");
|
271
138
|
});
|
272
|
-
it(
|
273
|
-
|
274
|
-
expect((0, _util.stringToPDFString)(str)).toEqual(
|
139
|
+
it("handles UTF-16 little-endian strings", function () {
|
140
|
+
const str = "\xFF\xFE\x73\x00\x74\x00\x72\x00\x69\x00\x6E\x00\x67\x00";
|
141
|
+
expect((0, _util.stringToPDFString)(str)).toEqual("string");
|
275
142
|
});
|
276
|
-
it(
|
277
|
-
|
278
|
-
expect((0, _util.stringToPDFString)(str1)).toEqual(
|
279
|
-
|
280
|
-
expect((0, _util.stringToPDFString)(str2)).toEqual(
|
143
|
+
it("handles empty strings", function () {
|
144
|
+
const str1 = "";
|
145
|
+
expect((0, _util.stringToPDFString)(str1)).toEqual("");
|
146
|
+
const str2 = "\xFE\xFF";
|
147
|
+
expect((0, _util.stringToPDFString)(str2)).toEqual("");
|
148
|
+
const str3 = "\xFF\xFE";
|
149
|
+
expect((0, _util.stringToPDFString)(str3)).toEqual("");
|
281
150
|
});
|
282
151
|
});
|
283
|
-
describe(
|
284
|
-
it(
|
285
|
-
|
286
|
-
expect((0, _util.removeNullCharacters)(str)).toEqual(
|
152
|
+
describe("removeNullCharacters", function () {
|
153
|
+
it("should not modify string without null characters", function () {
|
154
|
+
const str = "string without null chars";
|
155
|
+
expect((0, _util.removeNullCharacters)(str)).toEqual("string without null chars");
|
287
156
|
});
|
288
|
-
it(
|
289
|
-
|
290
|
-
expect((0, _util.removeNullCharacters)(str)).toEqual(
|
157
|
+
it("should modify string with null characters", function () {
|
158
|
+
const str = "string\x00With\x00Null\x00Chars";
|
159
|
+
expect((0, _util.removeNullCharacters)(str)).toEqual("stringWithNullChars");
|
291
160
|
});
|
292
161
|
});
|
293
|
-
describe(
|
294
|
-
it(
|
295
|
-
|
296
|
-
expect(typeof readable
|
162
|
+
describe("ReadableStream", function () {
|
163
|
+
it("should return an Object", function () {
|
164
|
+
const readable = new ReadableStream();
|
165
|
+
expect(typeof readable).toEqual("object");
|
297
166
|
});
|
298
|
-
it(
|
299
|
-
|
300
|
-
expect(
|
167
|
+
it("should have property getReader", function () {
|
168
|
+
const readable = new ReadableStream();
|
169
|
+
expect(typeof readable.getReader).toEqual("function");
|
301
170
|
});
|
302
171
|
});
|
303
|
-
describe(
|
304
|
-
it(
|
305
|
-
|
306
|
-
expect(typeof url
|
172
|
+
describe("URL", function () {
|
173
|
+
it("should return an Object", function () {
|
174
|
+
const url = new URL("https://example.com");
|
175
|
+
expect(typeof url).toEqual("object");
|
307
176
|
});
|
308
|
-
it(
|
309
|
-
|
310
|
-
expect(
|
177
|
+
it("should have property `href`", function () {
|
178
|
+
const url = new URL("https://example.com");
|
179
|
+
expect(typeof url.href).toEqual("string");
|
311
180
|
});
|
312
181
|
});
|
313
|
-
describe(
|
314
|
-
it(
|
315
|
-
expect((0, _util.isSameOrigin)(
|
316
|
-
expect((0, _util.isSameOrigin)(
|
182
|
+
describe("isSameOrigin", function () {
|
183
|
+
it("handles invalid base URLs", function () {
|
184
|
+
expect((0, _util.isSameOrigin)("/foo", "/bar")).toEqual(false);
|
185
|
+
expect((0, _util.isSameOrigin)("blob:foo", "/bar")).toEqual(false);
|
317
186
|
});
|
318
|
-
it(
|
319
|
-
expect((0, _util.isSameOrigin)(
|
320
|
-
expect((0, _util.isSameOrigin)(
|
187
|
+
it("correctly checks if the origin of both URLs matches", function () {
|
188
|
+
expect((0, _util.isSameOrigin)("https://www.mozilla.org/foo", "https://www.mozilla.org/bar")).toEqual(true);
|
189
|
+
expect((0, _util.isSameOrigin)("https://www.mozilla.org/foo", "https://www.example.com/bar")).toEqual(false);
|
321
190
|
});
|
322
191
|
});
|
323
|
-
describe(
|
324
|
-
it(
|
192
|
+
describe("createValidAbsoluteUrl", function () {
|
193
|
+
it("handles invalid URLs", function () {
|
325
194
|
expect((0, _util.createValidAbsoluteUrl)(undefined, undefined)).toEqual(null);
|
326
195
|
expect((0, _util.createValidAbsoluteUrl)(null, null)).toEqual(null);
|
327
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
328
|
-
});
|
329
|
-
it(
|
330
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
331
|
-
});
|
332
|
-
it(
|
333
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
334
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
335
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
336
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
337
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
338
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
339
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
340
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
341
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
342
|
-
expect((0, _util.createValidAbsoluteUrl)(
|
196
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "/bar")).toEqual(null);
|
197
|
+
});
|
198
|
+
it("handles URLs that do not use a whitelisted protocol", function () {
|
199
|
+
expect((0, _util.createValidAbsoluteUrl)("magnet:?foo", null)).toEqual(null);
|
200
|
+
});
|
201
|
+
it("correctly creates a valid URL for whitelisted protocols", function () {
|
202
|
+
expect((0, _util.createValidAbsoluteUrl)("http://www.mozilla.org/foo", null)).toEqual(new URL("http://www.mozilla.org/foo"));
|
203
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "http://www.mozilla.org")).toEqual(new URL("http://www.mozilla.org/foo"));
|
204
|
+
expect((0, _util.createValidAbsoluteUrl)("https://www.mozilla.org/foo", null)).toEqual(new URL("https://www.mozilla.org/foo"));
|
205
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "https://www.mozilla.org")).toEqual(new URL("https://www.mozilla.org/foo"));
|
206
|
+
expect((0, _util.createValidAbsoluteUrl)("ftp://www.mozilla.org/foo", null)).toEqual(new URL("ftp://www.mozilla.org/foo"));
|
207
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "ftp://www.mozilla.org")).toEqual(new URL("ftp://www.mozilla.org/foo"));
|
208
|
+
expect((0, _util.createValidAbsoluteUrl)("mailto:foo@bar.baz", null)).toEqual(new URL("mailto:foo@bar.baz"));
|
209
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "mailto:foo@bar.baz")).toEqual(null);
|
210
|
+
expect((0, _util.createValidAbsoluteUrl)("tel:+0123456789", null)).toEqual(new URL("tel:+0123456789"));
|
211
|
+
expect((0, _util.createValidAbsoluteUrl)("/foo", "tel:0123456789")).toEqual(null);
|
212
|
+
});
|
213
|
+
});
|
214
|
+
describe("createPromiseCapability", function () {
|
215
|
+
it("should resolve with correct data", function (done) {
|
216
|
+
const promiseCapability = (0, _util.createPromiseCapability)();
|
217
|
+
expect(promiseCapability.settled).toEqual(false);
|
218
|
+
promiseCapability.resolve({
|
219
|
+
test: "abc"
|
220
|
+
});
|
221
|
+
promiseCapability.promise.then(function (data) {
|
222
|
+
expect(promiseCapability.settled).toEqual(true);
|
223
|
+
expect(data).toEqual({
|
224
|
+
test: "abc"
|
225
|
+
});
|
226
|
+
done();
|
227
|
+
}, done.fail);
|
228
|
+
});
|
229
|
+
it("should reject with correct reason", function (done) {
|
230
|
+
const promiseCapability = (0, _util.createPromiseCapability)();
|
231
|
+
expect(promiseCapability.settled).toEqual(false);
|
232
|
+
promiseCapability.reject(new Error("reason"));
|
233
|
+
promiseCapability.promise.then(done.fail, function (reason) {
|
234
|
+
expect(promiseCapability.settled).toEqual(true);
|
235
|
+
expect(reason instanceof Error).toEqual(true);
|
236
|
+
expect(reason.message).toEqual("reason");
|
237
|
+
done();
|
238
|
+
});
|
343
239
|
});
|
344
240
|
});
|
345
241
|
});
|