pdfjs-dist 2.0.489 → 2.2.228

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.

Files changed (169) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +18515 -11402
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +48266 -37137
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/external/url/url-lib.js +627 -0
  10. package/image_decoders/pdf.image_decoders.js +11350 -0
  11. package/image_decoders/pdf.image_decoders.js.map +1 -0
  12. package/image_decoders/pdf.image_decoders.min.js +1 -0
  13. package/lib/core/annotation.js +587 -242
  14. package/lib/core/arithmetic_decoder.js +275 -245
  15. package/lib/core/bidi.js +65 -6
  16. package/lib/core/ccitt.js +173 -18
  17. package/lib/core/ccitt_stream.js +15 -6
  18. package/lib/core/cff_parser.js +433 -61
  19. package/lib/core/charsets.js +5 -4
  20. package/lib/core/chunked_stream.js +400 -152
  21. package/lib/core/cmap.js +326 -87
  22. package/lib/core/colorspace.js +874 -594
  23. package/lib/core/core_utils.js +147 -0
  24. package/lib/core/crypto.js +290 -45
  25. package/lib/core/document.js +560 -268
  26. package/lib/core/encodings.js +19 -10
  27. package/lib/core/evaluator.js +1005 -360
  28. package/lib/core/font_renderer.js +331 -97
  29. package/lib/core/fonts.js +812 -195
  30. package/lib/core/function.js +284 -71
  31. package/lib/core/glyphlist.js +4 -3
  32. package/lib/core/image.js +169 -62
  33. package/lib/core/image_utils.js +111 -0
  34. package/lib/core/jbig2.js +479 -66
  35. package/lib/core/jbig2_stream.js +19 -8
  36. package/lib/core/jpeg_stream.js +38 -13
  37. package/lib/core/jpg.js +253 -29
  38. package/lib/core/jpx.js +396 -6
  39. package/lib/core/jpx_stream.js +18 -6
  40. package/lib/core/metrics.js +15 -15
  41. package/lib/core/murmurhash3.js +56 -34
  42. package/lib/core/obj.js +1354 -488
  43. package/lib/core/operator_list.js +144 -31
  44. package/lib/core/parser.js +539 -191
  45. package/lib/core/pattern.js +148 -14
  46. package/lib/core/pdf_manager.js +323 -133
  47. package/lib/core/primitives.js +111 -24
  48. package/lib/core/ps_parser.js +134 -45
  49. package/lib/core/standard_fonts.js +17 -17
  50. package/lib/core/stream.js +313 -34
  51. package/lib/core/type1_parser.js +143 -13
  52. package/lib/core/unicode.js +32 -5
  53. package/lib/core/worker.js +217 -190
  54. package/lib/core/worker_stream.js +277 -0
  55. package/lib/display/annotation_layer.js +450 -133
  56. package/lib/display/api.js +1597 -784
  57. package/lib/display/api_compatibility.js +11 -13
  58. package/lib/display/canvas.js +360 -44
  59. package/lib/display/content_disposition.js +83 -32
  60. package/lib/display/display_utils.js +747 -0
  61. package/lib/display/fetch_stream.js +221 -90
  62. package/lib/display/font_loader.js +468 -236
  63. package/lib/display/metadata.js +38 -16
  64. package/lib/display/network.js +635 -428
  65. package/lib/display/network_utils.js +32 -19
  66. package/lib/display/node_stream.js +367 -175
  67. package/lib/display/pattern_helper.js +81 -31
  68. package/lib/display/svg.js +1235 -519
  69. package/lib/display/text_layer.js +153 -29
  70. package/lib/display/transport_stream.js +345 -94
  71. package/lib/display/webgl.js +64 -18
  72. package/lib/display/worker_options.js +5 -4
  73. package/lib/display/xml_parser.js +166 -53
  74. package/lib/examples/node/domstubs.js +60 -4
  75. package/lib/pdf.js +36 -14
  76. package/lib/pdf.worker.js +5 -3
  77. package/lib/shared/compatibility.js +158 -564
  78. package/lib/shared/global_scope.js +2 -2
  79. package/lib/shared/is_node.js +4 -4
  80. package/lib/shared/message_handler.js +521 -0
  81. package/lib/shared/streams_polyfill.js +21 -17
  82. package/lib/shared/url_polyfill.js +56 -0
  83. package/lib/shared/util.js +243 -710
  84. package/lib/test/unit/annotation_spec.js +870 -401
  85. package/lib/test/unit/api_spec.js +657 -345
  86. package/lib/test/unit/bidi_spec.js +7 -7
  87. package/lib/test/unit/cff_parser_spec.js +54 -11
  88. package/lib/test/unit/clitests_helper.js +10 -8
  89. package/lib/test/unit/cmap_spec.js +95 -41
  90. package/lib/test/unit/colorspace_spec.js +115 -63
  91. package/lib/test/unit/core_utils_spec.js +191 -0
  92. package/lib/test/unit/crypto_spec.js +17 -5
  93. package/lib/test/unit/custom_spec.js +43 -55
  94. package/lib/test/unit/display_svg_spec.js +34 -18
  95. package/lib/test/unit/display_utils_spec.js +273 -0
  96. package/lib/test/unit/document_spec.js +8 -13
  97. package/lib/test/unit/encodings_spec.js +25 -45
  98. package/lib/test/unit/evaluator_spec.js +38 -15
  99. package/lib/test/unit/fetch_stream_spec.js +109 -0
  100. package/lib/test/unit/function_spec.js +17 -5
  101. package/lib/test/unit/jasmine-boot.js +33 -20
  102. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  103. package/lib/test/unit/metadata_spec.js +71 -11
  104. package/lib/test/unit/murmurhash3_spec.js +3 -3
  105. package/lib/test/unit/network_spec.js +19 -54
  106. package/lib/test/unit/network_utils_spec.js +91 -14
  107. package/lib/test/unit/node_stream_spec.js +56 -32
  108. package/lib/test/unit/parser_spec.js +162 -71
  109. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  110. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  111. package/lib/test/unit/pdf_history_spec.js +21 -9
  112. package/lib/test/unit/primitives_spec.js +53 -20
  113. package/lib/test/unit/stream_spec.js +12 -4
  114. package/lib/test/unit/test_utils.js +273 -56
  115. package/lib/test/unit/testreporter.js +21 -3
  116. package/lib/test/unit/type1_parser_spec.js +8 -6
  117. package/lib/test/unit/ui_utils_spec.js +454 -16
  118. package/lib/test/unit/unicode_spec.js +18 -15
  119. package/lib/test/unit/util_spec.js +87 -128
  120. package/lib/web/annotation_layer_builder.js +39 -22
  121. package/lib/web/app.js +1290 -588
  122. package/lib/web/app_options.js +100 -62
  123. package/lib/web/base_viewer.js +511 -182
  124. package/lib/web/chromecom.js +261 -117
  125. package/lib/web/debugger.js +166 -22
  126. package/lib/web/download_manager.js +32 -13
  127. package/lib/web/firefox_print_service.js +20 -10
  128. package/lib/web/firefoxcom.js +315 -80
  129. package/lib/web/genericcom.js +89 -30
  130. package/lib/web/genericl10n.js +142 -30
  131. package/lib/web/grab_to_pan.js +28 -4
  132. package/lib/web/interfaces.js +170 -47
  133. package/lib/web/overlay_manager.js +235 -85
  134. package/lib/web/password_prompt.js +22 -14
  135. package/lib/web/pdf_attachment_viewer.js +38 -18
  136. package/lib/web/pdf_cursor_tools.js +39 -16
  137. package/lib/web/pdf_document_properties.js +255 -136
  138. package/lib/web/pdf_find_bar.js +84 -40
  139. package/lib/web/pdf_find_controller.js +495 -184
  140. package/lib/web/pdf_find_utils.js +111 -0
  141. package/lib/web/pdf_history.js +190 -53
  142. package/lib/web/pdf_link_service.js +138 -77
  143. package/lib/web/pdf_outline_viewer.js +122 -46
  144. package/lib/web/pdf_page_view.js +191 -67
  145. package/lib/web/pdf_presentation_mode.js +99 -34
  146. package/lib/web/pdf_print_service.js +61 -13
  147. package/lib/web/pdf_rendering_queue.js +28 -9
  148. package/lib/web/pdf_sidebar.js +141 -81
  149. package/lib/web/pdf_sidebar_resizer.js +42 -16
  150. package/lib/web/pdf_single_page_viewer.js +74 -66
  151. package/lib/web/pdf_thumbnail_view.js +104 -33
  152. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  153. package/lib/web/pdf_viewer.component.js +112 -32
  154. package/lib/web/pdf_viewer.js +91 -52
  155. package/lib/web/preferences.js +284 -89
  156. package/lib/web/secondary_toolbar.js +165 -40
  157. package/lib/web/text_layer_builder.js +134 -59
  158. package/lib/web/toolbar.js +78 -43
  159. package/lib/web/ui_utils.js +462 -136
  160. package/lib/web/view_history.js +215 -67
  161. package/lib/web/viewer_compatibility.js +4 -13
  162. package/package.json +5 -4
  163. package/web/pdf_viewer.css +79 -11
  164. package/web/pdf_viewer.js +6107 -3748
  165. package/web/pdf_viewer.js.map +1 -1
  166. package/lib/display/dom_utils.js +0 -309
  167. package/lib/test/unit/dom_utils_spec.js +0 -89
  168. package/lib/test/unit/fonts_spec.js +0 -81
  169. package/lib/web/dom_events.js +0 -137
@@ -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 2017 Mozilla Foundation
5
+ * Copyright 2019 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,19 +19,17 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _test_utils = require('./test_utils');
24
+ var _test_utils = require("./test_utils");
25
25
 
26
- var _dom_utils = require('../../display/dom_utils');
26
+ var _display_utils = require("../../display/display_utils");
27
27
 
28
- var _api = require('../../display/api');
28
+ var _api = require("../../display/api");
29
29
 
30
- var _is_node = require('../../shared/is_node');
30
+ var _is_node = _interopRequireDefault(require("../../shared/is_node"));
31
31
 
32
- var _is_node2 = _interopRequireDefault(_is_node);
33
-
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
35
33
 
36
34
  function getTopLeftPixel(canvasContext) {
37
35
  var imgData = canvasContext.getImageData(0, 0, 1, 1);
@@ -42,24 +40,26 @@ function getTopLeftPixel(canvasContext) {
42
40
  a: imgData.data[3]
43
41
  };
44
42
  }
43
+
45
44
  describe('custom canvas rendering', function () {
46
45
  var transparentGetDocumentParams = (0, _test_utils.buildGetDocumentParams)('transparent.pdf');
47
- var CanvasFactory = void 0;
48
- var loadingTask = void 0;
49
- var page = void 0;
46
+ var CanvasFactory;
47
+ var loadingTask;
48
+ var page;
50
49
  beforeAll(function (done) {
51
- if ((0, _is_node2.default)()) {} else {
52
- CanvasFactory = new _dom_utils.DOMCanvasFactory();
50
+ if ((0, _is_node["default"])()) {
51
+ CanvasFactory = new _test_utils.NodeCanvasFactory();
52
+ } else {
53
+ CanvasFactory = new _display_utils.DOMCanvasFactory();
53
54
  }
55
+
54
56
  loadingTask = (0, _api.getDocument)(transparentGetDocumentParams);
55
57
  loadingTask.promise.then(function (doc) {
56
58
  return doc.getPage(1);
57
59
  }).then(function (data) {
58
60
  page = data;
59
61
  done();
60
- }).catch(function (reason) {
61
- done.fail(reason);
62
- });
62
+ })["catch"](done.fail);
63
63
  });
64
64
  afterAll(function (done) {
65
65
  CanvasFactory = null;
@@ -67,56 +67,44 @@ describe('custom canvas rendering', function () {
67
67
  loadingTask.destroy().then(done);
68
68
  });
69
69
  it('renders to canvas with a default white background', function (done) {
70
- if ((0, _is_node2.default)()) {
71
- pending('TODO: Support Canvas testing in Node.js.');
72
- }
73
- var viewport = page.getViewport(1);
70
+ var viewport = page.getViewport({
71
+ scale: 1
72
+ });
74
73
  var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
75
- page.render({
74
+ var renderTask = page.render({
76
75
  canvasContext: canvasAndCtx.context,
77
76
  viewport: viewport
78
- }).then(function () {
79
- var _getTopLeftPixel = getTopLeftPixel(canvasAndCtx.context),
80
- r = _getTopLeftPixel.r,
81
- g = _getTopLeftPixel.g,
82
- b = _getTopLeftPixel.b,
83
- a = _getTopLeftPixel.a;
84
-
77
+ });
78
+ renderTask.promise.then(function () {
79
+ expect(getTopLeftPixel(canvasAndCtx.context)).toEqual({
80
+ r: 255,
81
+ g: 255,
82
+ b: 255,
83
+ a: 255
84
+ });
85
85
  CanvasFactory.destroy(canvasAndCtx);
86
- expect(r).toEqual(255);
87
- expect(g).toEqual(255);
88
- expect(b).toEqual(255);
89
- expect(a).toEqual(255);
90
86
  done();
91
- }).catch(function (reason) {
92
- done(reason);
93
- });
87
+ })["catch"](done.fail);
94
88
  });
95
89
  it('renders to canvas with a custom background', function (done) {
96
- if ((0, _is_node2.default)()) {
97
- pending('TODO: Support Canvas testing in Node.js.');
98
- }
99
- var viewport = page.getViewport(1);
90
+ var viewport = page.getViewport({
91
+ scale: 1
92
+ });
100
93
  var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
101
- page.render({
94
+ var renderTask = page.render({
102
95
  canvasContext: canvasAndCtx.context,
103
96
  viewport: viewport,
104
97
  background: 'rgba(255,0,0,1.0)'
105
- }).then(function () {
106
- var _getTopLeftPixel2 = getTopLeftPixel(canvasAndCtx.context),
107
- r = _getTopLeftPixel2.r,
108
- g = _getTopLeftPixel2.g,
109
- b = _getTopLeftPixel2.b,
110
- a = _getTopLeftPixel2.a;
111
-
98
+ });
99
+ renderTask.promise.then(function () {
100
+ expect(getTopLeftPixel(canvasAndCtx.context)).toEqual({
101
+ r: 255,
102
+ g: 0,
103
+ b: 0,
104
+ a: 255
105
+ });
112
106
  CanvasFactory.destroy(canvasAndCtx);
113
- expect(r).toEqual(255);
114
- expect(g).toEqual(0);
115
- expect(b).toEqual(0);
116
- expect(a).toEqual(255);
117
107
  done();
118
- }).catch(function (reason) {
119
- done(reason);
120
- });
108
+ })["catch"](done.fail);
121
109
  });
122
110
  });
@@ -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 2017 Mozilla Foundation
5
+ * Copyright 2019 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,55 +19,64 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _domstubs = require('../../examples/node/domstubs');
24
+ var _domstubs = require("../../examples/node/domstubs");
25
25
 
26
- var _test_utils = require('./test_utils');
26
+ var _test_utils = require("./test_utils");
27
27
 
28
- var _api = require('../../display/api');
28
+ var _api = require("../../display/api");
29
29
 
30
- var _is_node = require('../../shared/is_node');
30
+ var _is_node = _interopRequireDefault(require("../../shared/is_node"));
31
31
 
32
- var _is_node2 = _interopRequireDefault(_is_node);
32
+ var _util = require("../../shared/util");
33
33
 
34
- var _util = require('../../shared/util');
34
+ var _svg = require("../../display/svg");
35
35
 
36
- var _svg = require('../../display/svg');
37
-
38
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
39
37
 
40
38
  var XLINK_NS = 'http://www.w3.org/1999/xlink';
39
+
41
40
  function withZlib(isZlibRequired, callback) {
42
41
  if (isZlibRequired) {
43
- if (!(0, _is_node2.default)()) {
42
+ if (!(0, _is_node["default"])()) {
44
43
  throw new Error('zlib test can only be run in Node.js');
45
44
  }
45
+
46
46
  return callback();
47
47
  }
48
- if (!(0, _is_node2.default)()) {
48
+
49
+ if (!(0, _is_node["default"])()) {
49
50
  return callback();
50
51
  }
52
+
51
53
  var zlib = require('zlib');
54
+
52
55
  var deflateSync = zlib.deflateSync;
53
56
  zlib.deflateSync = disabledDeflateSync;
57
+
54
58
  function disabledDeflateSync() {
55
59
  throw new Error('zlib.deflateSync is explicitly disabled for testing.');
56
60
  }
61
+
57
62
  function restoreDeflateSync() {
58
63
  if (zlib.deflateSync === disabledDeflateSync) {
59
64
  zlib.deflateSync = deflateSync;
60
65
  }
61
66
  }
67
+
62
68
  var promise = callback();
63
69
  promise.then(restoreDeflateSync, restoreDeflateSync);
64
70
  return promise;
65
71
  }
72
+
66
73
  describe('SVGGraphics', function () {
67
74
  var loadingTask;
68
75
  var page;
69
76
  beforeAll(function (done) {
70
- loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('xobject-image.pdf', { nativeImageDecoderSupport: _util.NativeImageDecoding.DISPLAY }));
77
+ loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('xobject-image.pdf', {
78
+ nativeImageDecoderSupport: _util.NativeImageDecoding.DISPLAY
79
+ }));
71
80
  loadingTask.promise.then(function (doc) {
72
81
  doc.getPage(1).then(function (firstPage) {
73
82
  page = firstPage;
@@ -93,35 +102,42 @@ describe('SVGGraphics', function () {
93
102
  }
94
103
  };
95
104
  var xobjectObjId = 'img_p0_1';
96
- if ((0, _is_node2.default)()) {
105
+
106
+ if ((0, _is_node["default"])()) {
97
107
  (0, _domstubs.setStubs)(global);
98
108
  }
109
+
99
110
  try {
100
111
  var imgData = svgGfx.objs.get(xobjectObjId);
101
112
  svgGfx.paintInlineImageXObject(imgData, elementContainer);
102
113
  } finally {
103
- if ((0, _is_node2.default)()) {
114
+ if ((0, _is_node["default"])()) {
104
115
  (0, _domstubs.unsetStubs)(global);
105
116
  }
106
117
  }
118
+
107
119
  return svgImg;
108
120
  });
109
121
  }
122
+
110
123
  it('should fail require("zlib") unless in Node.js', function () {
111
124
  function testFunc() {
112
125
  require('zlib');
113
126
  }
127
+
114
128
  expect(testFunc.toString()).toMatch(/\srequire\(["']zlib["']\)/);
115
- if ((0, _is_node2.default)()) {
129
+
130
+ if ((0, _is_node["default"])()) {
116
131
  expect(testFunc).not.toThrow();
117
132
  } else {
118
133
  expect(testFunc).toThrow();
119
134
  }
120
135
  });
121
136
  it('should produce a reasonably small svg:image', function (done) {
122
- if (!(0, _is_node2.default)()) {
137
+ if (!(0, _is_node["default"])()) {
123
138
  pending('zlib.deflateSync is not supported in non-Node environments.');
124
139
  }
140
+
125
141
  withZlib(true, getSVGImage).then(function (svgImg) {
126
142
  expect(svgImg.nodeName).toBe('svg:image');
127
143
  expect(svgImg.getAttributeNS(null, 'width')).toBe('200px');
@@ -0,0 +1,273 @@
1
+ /**
2
+ * @licstart The following is the entire license notice for the
3
+ * Javascript code in this page
4
+ *
5
+ * Copyright 2019 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 _display_utils = require("../../display/display_utils");
25
+
26
+ var _is_node = _interopRequireDefault(require("../../shared/is_node"));
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
+
30
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
31
+
32
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
33
+
34
+ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
35
+
36
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
37
+
38
+ describe('display_utils', function () {
39
+ describe('DOMCanvasFactory', function () {
40
+ var canvasFactory;
41
+ beforeAll(function (done) {
42
+ canvasFactory = new _display_utils.DOMCanvasFactory();
43
+ done();
44
+ });
45
+ afterAll(function () {
46
+ canvasFactory = null;
47
+ });
48
+ it('`create` should throw an error if the dimensions are invalid', function () {
49
+ expect(function () {
50
+ return canvasFactory.create(-1, 1);
51
+ }).toThrow(new Error('Invalid canvas size'));
52
+ expect(function () {
53
+ return canvasFactory.create(1, -1);
54
+ }).toThrow(new Error('Invalid canvas size'));
55
+ });
56
+ it('`create` should return a canvas if the dimensions are valid', function () {
57
+ if ((0, _is_node["default"])()) {
58
+ pending('Document is not supported in Node.js.');
59
+ }
60
+
61
+ var _canvasFactory$create = canvasFactory.create(20, 40),
62
+ canvas = _canvasFactory$create.canvas,
63
+ context = _canvasFactory$create.context;
64
+
65
+ expect(canvas instanceof HTMLCanvasElement).toBe(true);
66
+ expect(context instanceof CanvasRenderingContext2D).toBe(true);
67
+ expect(canvas.width).toBe(20);
68
+ expect(canvas.height).toBe(40);
69
+ });
70
+ it('`reset` should throw an error if no canvas is provided', function () {
71
+ var canvasAndContext = {
72
+ canvas: null,
73
+ context: null
74
+ };
75
+ expect(function () {
76
+ return canvasFactory.reset(canvasAndContext, 20, 40);
77
+ }).toThrow(new Error('Canvas is not specified'));
78
+ });
79
+ it('`reset` should throw an error if the dimensions are invalid', function () {
80
+ var canvasAndContext = {
81
+ canvas: 'foo',
82
+ context: 'bar'
83
+ };
84
+ expect(function () {
85
+ return canvasFactory.reset(canvasAndContext, -1, 1);
86
+ }).toThrow(new Error('Invalid canvas size'));
87
+ expect(function () {
88
+ return canvasFactory.reset(canvasAndContext, 1, -1);
89
+ }).toThrow(new Error('Invalid canvas size'));
90
+ });
91
+ it('`reset` should alter the canvas/context if the dimensions are valid', function () {
92
+ if ((0, _is_node["default"])()) {
93
+ pending('Document is not supported in Node.js.');
94
+ }
95
+
96
+ var canvasAndContext = canvasFactory.create(20, 40);
97
+ canvasFactory.reset(canvasAndContext, 60, 80);
98
+ var canvas = canvasAndContext.canvas,
99
+ context = canvasAndContext.context;
100
+ expect(canvas instanceof HTMLCanvasElement).toBe(true);
101
+ expect(context instanceof CanvasRenderingContext2D).toBe(true);
102
+ expect(canvas.width).toBe(60);
103
+ expect(canvas.height).toBe(80);
104
+ });
105
+ it('`destroy` should throw an error if no canvas is provided', function () {
106
+ expect(function () {
107
+ return canvasFactory.destroy({});
108
+ }).toThrow(new Error('Canvas is not specified'));
109
+ });
110
+ it('`destroy` should clear the canvas/context', function () {
111
+ if ((0, _is_node["default"])()) {
112
+ pending('Document is not supported in Node.js.');
113
+ }
114
+
115
+ var canvasAndContext = canvasFactory.create(20, 40);
116
+ canvasFactory.destroy(canvasAndContext);
117
+ var canvas = canvasAndContext.canvas,
118
+ context = canvasAndContext.context;
119
+ expect(canvas).toBe(null);
120
+ expect(context).toBe(null);
121
+ });
122
+ });
123
+ describe('DOMSVGFactory', function () {
124
+ var svgFactory;
125
+ beforeAll(function (done) {
126
+ svgFactory = new _display_utils.DOMSVGFactory();
127
+ done();
128
+ });
129
+ afterAll(function () {
130
+ svgFactory = null;
131
+ });
132
+ it('`create` should throw an error if the dimensions are invalid', function () {
133
+ expect(function () {
134
+ return svgFactory.create(-1, 0);
135
+ }).toThrow(new Error('Invalid SVG dimensions'));
136
+ expect(function () {
137
+ return svgFactory.create(0, -1);
138
+ }).toThrow(new Error('Invalid SVG dimensions'));
139
+ });
140
+ it('`create` should return an SVG element if the dimensions are valid', function () {
141
+ if ((0, _is_node["default"])()) {
142
+ pending('Document is not supported in Node.js.');
143
+ }
144
+
145
+ var svg = svgFactory.create(20, 40);
146
+ expect(svg instanceof SVGSVGElement).toBe(true);
147
+ expect(svg.getAttribute('version')).toBe('1.1');
148
+ expect(svg.getAttribute('width')).toBe('20px');
149
+ expect(svg.getAttribute('height')).toBe('40px');
150
+ expect(svg.getAttribute('preserveAspectRatio')).toBe('none');
151
+ expect(svg.getAttribute('viewBox')).toBe('0 0 20 40');
152
+ });
153
+ it('`createElement` should throw an error if the type is not a string', function () {
154
+ expect(function () {
155
+ return svgFactory.createElement(true);
156
+ }).toThrow(new Error('Invalid SVG element type'));
157
+ });
158
+ it('`createElement` should return an SVG element if the type is valid', function () {
159
+ if ((0, _is_node["default"])()) {
160
+ pending('Document is not supported in Node.js.');
161
+ }
162
+
163
+ var svg = svgFactory.createElement('svg:rect');
164
+ expect(svg instanceof SVGRectElement).toBe(true);
165
+ });
166
+ });
167
+ describe('getFilenameFromUrl', function () {
168
+ it('should get the filename from an absolute URL', function () {
169
+ var url = 'https://server.org/filename.pdf';
170
+ expect((0, _display_utils.getFilenameFromUrl)(url)).toEqual('filename.pdf');
171
+ });
172
+ it('should get the filename from a relative URL', function () {
173
+ var url = '../../filename.pdf';
174
+ expect((0, _display_utils.getFilenameFromUrl)(url)).toEqual('filename.pdf');
175
+ });
176
+ it('should get the filename from a URL with an anchor', function () {
177
+ var url = 'https://server.org/filename.pdf#foo';
178
+ expect((0, _display_utils.getFilenameFromUrl)(url)).toEqual('filename.pdf');
179
+ });
180
+ it('should get the filename from a URL with query parameters', function () {
181
+ var url = 'https://server.org/filename.pdf?foo=bar';
182
+ expect((0, _display_utils.getFilenameFromUrl)(url)).toEqual('filename.pdf');
183
+ });
184
+ });
185
+ describe('isValidFetchUrl', function () {
186
+ it('handles invalid Fetch URLs', function () {
187
+ expect((0, _display_utils.isValidFetchUrl)(null)).toEqual(false);
188
+ expect((0, _display_utils.isValidFetchUrl)(100)).toEqual(false);
189
+ expect((0, _display_utils.isValidFetchUrl)('foo')).toEqual(false);
190
+ expect((0, _display_utils.isValidFetchUrl)('/foo', 100)).toEqual(false);
191
+ });
192
+ it('handles relative Fetch URLs', function () {
193
+ expect((0, _display_utils.isValidFetchUrl)('/foo', 'file://www.example.com')).toEqual(false);
194
+ expect((0, _display_utils.isValidFetchUrl)('/foo', 'http://www.example.com')).toEqual(true);
195
+ });
196
+ it('handles unsupported Fetch protocols', function () {
197
+ expect((0, _display_utils.isValidFetchUrl)('file://www.example.com')).toEqual(false);
198
+ expect((0, _display_utils.isValidFetchUrl)('ftp://www.example.com')).toEqual(false);
199
+ });
200
+ it('handles supported Fetch protocols', function () {
201
+ expect((0, _display_utils.isValidFetchUrl)('http://www.example.com')).toEqual(true);
202
+ expect((0, _display_utils.isValidFetchUrl)('https://www.example.com')).toEqual(true);
203
+ });
204
+ });
205
+ describe('PDFDateString', function () {
206
+ describe('toDateObject', function () {
207
+ it('converts PDF date strings to JavaScript `Date` objects', function () {
208
+ var expectations = {
209
+ undefined: null,
210
+ "null": null,
211
+ 42: null,
212
+ '2019': null,
213
+ 'D2019': null,
214
+ 'D:': null,
215
+ 'D:201': null,
216
+ 'D:2019': new Date(Date.UTC(2019, 0, 1, 0, 0, 0)),
217
+ 'D:20190': new Date(Date.UTC(2019, 0, 1, 0, 0, 0)),
218
+ 'D:201900': new Date(Date.UTC(2019, 0, 1, 0, 0, 0)),
219
+ 'D:201913': new Date(Date.UTC(2019, 0, 1, 0, 0, 0)),
220
+ 'D:201902': new Date(Date.UTC(2019, 1, 1, 0, 0, 0)),
221
+ 'D:2019020': new Date(Date.UTC(2019, 1, 1, 0, 0, 0)),
222
+ 'D:20190200': new Date(Date.UTC(2019, 1, 1, 0, 0, 0)),
223
+ 'D:20190232': new Date(Date.UTC(2019, 1, 1, 0, 0, 0)),
224
+ 'D:20190203': new Date(Date.UTC(2019, 1, 3, 0, 0, 0)),
225
+ 'D:20190431': new Date(Date.UTC(2019, 4, 1, 0, 0, 0)),
226
+ 'D:201902030': new Date(Date.UTC(2019, 1, 3, 0, 0, 0)),
227
+ 'D:2019020300': new Date(Date.UTC(2019, 1, 3, 0, 0, 0)),
228
+ 'D:2019020324': new Date(Date.UTC(2019, 1, 3, 0, 0, 0)),
229
+ 'D:2019020304': new Date(Date.UTC(2019, 1, 3, 4, 0, 0)),
230
+ 'D:20190203040': new Date(Date.UTC(2019, 1, 3, 4, 0, 0)),
231
+ 'D:201902030400': new Date(Date.UTC(2019, 1, 3, 4, 0, 0)),
232
+ 'D:201902030460': new Date(Date.UTC(2019, 1, 3, 4, 0, 0)),
233
+ 'D:201902030405': new Date(Date.UTC(2019, 1, 3, 4, 5, 0)),
234
+ 'D:2019020304050': new Date(Date.UTC(2019, 1, 3, 4, 5, 0)),
235
+ 'D:20190203040500': new Date(Date.UTC(2019, 1, 3, 4, 5, 0)),
236
+ 'D:20190203040560': new Date(Date.UTC(2019, 1, 3, 4, 5, 0)),
237
+ 'D:20190203040506': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
238
+ 'D:20190203040506F': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
239
+ 'D:20190203040506Z': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
240
+ 'D:20190203040506-': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
241
+ 'D:20190203040506+': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
242
+ 'D:20190203040506+\'': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
243
+ 'D:20190203040506+0': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
244
+ 'D:20190203040506+01': new Date(Date.UTC(2019, 1, 3, 3, 5, 6)),
245
+ 'D:20190203040506+00\'': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
246
+ 'D:20190203040506+24\'': new Date(Date.UTC(2019, 1, 3, 4, 5, 6)),
247
+ 'D:20190203040506+01\'': new Date(Date.UTC(2019, 1, 3, 3, 5, 6)),
248
+ 'D:20190203040506+01\'0': new Date(Date.UTC(2019, 1, 3, 3, 5, 6)),
249
+ 'D:20190203040506+01\'00': new Date(Date.UTC(2019, 1, 3, 3, 5, 6)),
250
+ 'D:20190203040506+01\'60': new Date(Date.UTC(2019, 1, 3, 3, 5, 6)),
251
+ 'D:20190203040506+0102': new Date(Date.UTC(2019, 1, 3, 3, 3, 6)),
252
+ 'D:20190203040506+01\'02': new Date(Date.UTC(2019, 1, 3, 3, 3, 6)),
253
+ 'D:20190203040506+01\'02\'': new Date(Date.UTC(2019, 1, 3, 3, 3, 6)),
254
+ 'D:20190203040506+05\'07': new Date(Date.UTC(2019, 1, 2, 22, 58, 6))
255
+ };
256
+
257
+ for (var _i = 0, _Object$entries = Object.entries(expectations); _i < _Object$entries.length; _i++) {
258
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
259
+ input = _Object$entries$_i[0],
260
+ expectation = _Object$entries$_i[1];
261
+
262
+ var result = _display_utils.PDFDateString.toDateObject(input);
263
+
264
+ if (result) {
265
+ expect(result.getTime()).toEqual(expectation.getTime());
266
+ } else {
267
+ expect(result).toEqual(expectation);
268
+ }
269
+ }
270
+ });
271
+ });
272
+ });
273
+ });
@@ -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 2017 Mozilla Foundation
5
+ * Copyright 2019 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,29 +19,24 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _document = require('../../core/document');
24
+ var _test_utils = require("./test_utils");
25
25
 
26
26
  describe('document', function () {
27
27
  describe('Page', function () {
28
28
  it('should create correct objId using the idFactory', function () {
29
- var page1 = new _document.Page({
30
- pdfManager: {},
31
- pageIndex: 0
32
- });
33
- var page2 = new _document.Page({
34
- pdfManager: {},
35
- pageIndex: 1
36
- });
37
- var idFactory1 = page1.idFactory,
38
- idFactory2 = page2.idFactory;
29
+ var idFactory1 = (0, _test_utils.createIdFactory)(0);
30
+ var idFactory2 = (0, _test_utils.createIdFactory)(1);
39
31
  expect(idFactory1.createObjId()).toEqual('p0_1');
40
32
  expect(idFactory1.createObjId()).toEqual('p0_2');
33
+ expect(idFactory1.getDocId()).toEqual('g_d0');
41
34
  expect(idFactory2.createObjId()).toEqual('p1_1');
42
35
  expect(idFactory2.createObjId()).toEqual('p1_2');
36
+ expect(idFactory2.getDocId()).toEqual('g_d0');
43
37
  expect(idFactory1.createObjId()).toEqual('p0_3');
44
38
  expect(idFactory1.createObjId()).toEqual('p0_4');
39
+ expect(idFactory1.getDocId()).toEqual('g_d0');
45
40
  });
46
41
  });
47
42
  });