diff --git a/src/core/annotation.js b/src/core/annotation.js index 75d030535..c198374f3 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -65,18 +65,15 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { * @param {XRef} xref * @param {Object} ref * @param {PDFManager} pdfManager - * @param {string} uniquePrefix - * @param {Object} idCounters + * @param {Object} idFactory * @returns {Annotation} */ - create: function AnnotationFactory_create(xref, ref, pdfManager, - uniquePrefix, idCounters) { + create: function AnnotationFactory_create(xref, ref, pdfManager, idFactory) { var dict = xref.fetchIfRef(ref); if (!isDict(dict)) { return; } - var id = isRef(ref) ? ref.toString() : - 'annot_' + (uniquePrefix || '') + (++idCounters.obj); + var id = isRef(ref) ? ref.toString() : 'annot_' + idFactory.createObjId(); // Determine the annotation's subtype. var subtype = dict.get('Subtype'); diff --git a/src/core/document.js b/src/core/document.js index df8268fdf..9b2e4eade 100644 --- a/src/core/document.js +++ b/src/core/document.js @@ -78,12 +78,18 @@ var Page = (function PageClosure() { this.xref = xref; this.ref = ref; this.fontCache = fontCache; - this.uniquePrefix = 'p' + this.pageIndex + '_'; - this.idCounters = { - obj: 0 - }; this.evaluatorOptions = pdfManager.evaluatorOptions; this.resourcesPromise = null; + + var uniquePrefix = 'p' + this.pageIndex + '_'; + var idCounters = { + obj: 0, + }; + this.idFactory = { + createObjId: function () { + return uniquePrefix + (++idCounters.obj); + }, + }; } Page.prototype = { @@ -240,8 +246,7 @@ var Page = (function PageClosure() { var partialEvaluator = new PartialEvaluator(pdfManager, this.xref, handler, this.pageIndex, - this.uniquePrefix, - this.idCounters, + this.idFactory, this.fontCache, this.evaluatorOptions); @@ -308,8 +313,7 @@ var Page = (function PageClosure() { var contentStream = data[0]; var partialEvaluator = new PartialEvaluator(pdfManager, self.xref, handler, self.pageIndex, - self.uniquePrefix, - self.idCounters, + self.idFactory, self.fontCache, self.evaluatorOptions); @@ -345,8 +349,7 @@ var Page = (function PageClosure() { var annotationRef = annotationRefs[i]; var annotation = annotationFactory.create(this.xref, annotationRef, this.pdfManager, - this.uniquePrefix, - this.idCounters); + this.idFactory); if (annotation) { annotations.push(annotation); } diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 74ab517a3..ead82fbf8 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -169,13 +169,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { }; function PartialEvaluator(pdfManager, xref, handler, pageIndex, - uniquePrefix, idCounters, fontCache, options) { + idFactory, fontCache, options) { this.pdfManager = pdfManager; this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; - this.uniquePrefix = uniquePrefix; - this.idCounters = idCounters; + this.idFactory = idFactory; this.fontCache = fontCache; this.options = options || DefaultPartialEvaluatorOptions; } @@ -391,8 +390,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // If there is no imageMask, create the PDFImage and a lot // of image processing can be done here. - var uniquePrefix = (this.uniquePrefix || ''); - var objId = 'img_' + uniquePrefix + (++this.idCounters.obj); + var objId = 'img_' + this.idFactory.createObjId(); operatorList.addDependency(objId); args = [objId, w, h]; @@ -733,7 +731,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { this.fontCache.put(fontRef, fontCapability.promise); } else { if (!fontID) { - fontID = (this.uniquePrefix || 'F_') + (++this.idCounters.obj); + fontID = this.idFactory.createObjId(); } this.fontCache.put('id_' + fontID, fontCapability.promise); } diff --git a/test/unit/annotation_layer_spec.js b/test/unit/annotation_layer_spec.js index a7be57244..aeb33dafd 100644 --- a/test/unit/annotation_layer_spec.js +++ b/test/unit/annotation_layer_spec.js @@ -17,21 +17,19 @@ (function (root, factory) { if (typeof define === 'function' && define.amd) { define('pdfjs-test/unit/annotation_layer_spec', ['exports', - 'pdfjs/core/primitives', 'pdfjs/core/annotation', - 'pdfjs/core/stream', 'pdfjs/core/parser', - 'pdfjs/shared/util', 'pdfjs/display/global'], factory); + 'pdfjs/core/primitives', 'pdfjs/core/annotation', 'pdfjs/core/stream', + 'pdfjs/core/parser', 'pdfjs/shared/util', 'pdfjs/display/global'], + factory); } else if (typeof exports !== 'undefined') { factory(exports, require('../../src/core/primitives.js'), - require('../../src/core/annotation.js'), - require('../../src/core/stream.js'), - require('../../src/core/parser.js'), - require('../../src/shared/util.js'), - require('../../src/display/global.js')); + require('../../src/core/annotation.js'), + require('../../src/core/stream.js'), require('../../src/core/parser.js'), + require('../../src/shared/util.js'), + require('../../src/display/global.js')); } else { factory((root.pdfjsTestUnitAnnotationLayerSpec = {}), - root.pdfjsCorePrimitives, root.pdfjsCoreAnnotation, - root.pdfjsCoreStream, root.pdfjsCoreParser, - root.pdfjsSharedUtil, root.pdfjsDisplayGlobal); + root.pdfjsCorePrimitives, root.pdfjsCoreAnnotation, root.pdfjsCoreStream, + root.pdfjsCoreParser, root.pdfjsSharedUtil, root.pdfjsDisplayGlobal); } }(this, function (exports, corePrimitives, coreAnnotation, coreStream, coreParser, sharedUtil, displayGlobal) { @@ -80,19 +78,34 @@ describe('Annotation layer', function() { } PDFManagerMock.prototype = {}; - var annotationFactory, pdfManagerMock; + function IdFactoryMock(params) { + var uniquePrefix = params.prefix || 'p0_'; + var idCounters = { + obj: params.startObjId || 0, + }; + return { + createObjId: function () { + return uniquePrefix + (++idCounters.obj); + }, + }; + } + IdFactoryMock.prototype = {}; + + var annotationFactory, pdfManagerMock, idFactoryMock; beforeAll(function (done) { annotationFactory = new AnnotationFactory(); pdfManagerMock = new PDFManagerMock({ docBaseUrl: null, }); + idFactoryMock = new IdFactoryMock({ }); done(); }); afterAll(function () { annotationFactory = null; pdfManagerMock = null; + idFactoryMock = null; }); describe('AnnotationFactory', function () { @@ -107,7 +120,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -121,14 +134,15 @@ describe('Annotation layer', function() { annotationDict.set('Subtype', Name.get('Link')); var xref = new XRefMock(); - var uniquePrefix = 'p0_', idCounters = { obj: 0, }; + var idFactory = new IdFactoryMock({ + prefix: 'p0_', + startObjId: 0, + }); var annotation1 = annotationFactory.create(xref, annotationDict, - pdfManagerMock, - uniquePrefix, idCounters); + pdfManagerMock, idFactory); var annotation2 = annotationFactory.create(xref, annotationDict, - pdfManagerMock, - uniquePrefix, idCounters); + pdfManagerMock, idFactory); var data1 = annotation1.data, data2 = annotation2.data; expect(data1.annotationType).toEqual(AnnotationType.LINK); expect(data2.annotationType).toEqual(AnnotationType.LINK); @@ -147,7 +161,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toBeUndefined(); }); @@ -332,7 +346,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -360,7 +374,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -393,7 +407,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -423,7 +437,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -452,7 +466,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -484,7 +498,7 @@ describe('Annotation layer', function() { }); var annotation = annotationFactory.create(xref, annotationRef, - pdfManager); + pdfManager, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -513,7 +527,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -543,7 +557,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -583,7 +597,7 @@ describe('Annotation layer', function() { }); var annotation = annotationFactory.create(xref, annotationRef, - pdfManager); + pdfManager, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -617,7 +631,8 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, + idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -665,7 +680,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -686,7 +701,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -709,7 +724,7 @@ describe('Annotation layer', function() { ]); var annotation = annotationFactory.create(xref, annotationRef, - pdfManagerMock); + pdfManagerMock, idFactoryMock); var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.LINK); @@ -741,10 +756,11 @@ describe('Annotation layer', function() { { ref: widgetRef, data: widgetDict, } ]); - var widgetAnnotation = annotationFactory.create(xref, widgetRef, - pdfManagerMock); - var data = widgetAnnotation.data; + var annotation = annotationFactory.create(xref, widgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.fieldName).toEqual(''); }); @@ -757,10 +773,11 @@ describe('Annotation layer', function() { { ref: widgetRef, data: widgetDict, } ]); - var widgetAnnotation = annotationFactory.create(xref, widgetRef, - pdfManagerMock); - var data = widgetAnnotation.data; + var annotation = annotationFactory.create(xref, widgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.fieldName).toEqual('foo'); }); @@ -780,10 +797,11 @@ describe('Annotation layer', function() { { ref: widgetRef, data: widgetDict, } ]); - var widgetAnnotation = annotationFactory.create(xref, widgetRef, - pdfManagerMock); - var data = widgetAnnotation.data; + var annotation = annotationFactory.create(xref, widgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.fieldName).toEqual('foo.bar.baz'); }); }); @@ -811,13 +829,16 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); - expect(textWidgetAnnotation.data.textAlignment).toEqual(null); - expect(textWidgetAnnotation.data.maxLen).toEqual(null); - expect(textWidgetAnnotation.data.readOnly).toEqual(false); - expect(textWidgetAnnotation.data.multiLine).toEqual(false); - expect(textWidgetAnnotation.data.comb).toEqual(false); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.textAlignment).toEqual(null); + expect(data.maxLen).toEqual(null); + expect(data.readOnly).toEqual(false); + expect(data.multiLine).toEqual(false); + expect(data.comb).toEqual(false); }); it('should not set invalid text alignment, maximum length and flags', @@ -831,13 +852,16 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); - expect(textWidgetAnnotation.data.textAlignment).toEqual(null); - expect(textWidgetAnnotation.data.maxLen).toEqual(null); - expect(textWidgetAnnotation.data.readOnly).toEqual(false); - expect(textWidgetAnnotation.data.multiLine).toEqual(false); - expect(textWidgetAnnotation.data.comb).toEqual(false); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.textAlignment).toEqual(null); + expect(data.maxLen).toEqual(null); + expect(data.readOnly).toEqual(false); + expect(data.multiLine).toEqual(false); + expect(data.comb).toEqual(false); }); it('should set valid text alignment, maximum length and flags', @@ -852,12 +876,15 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); - expect(textWidgetAnnotation.data.textAlignment).toEqual(1); - expect(textWidgetAnnotation.data.maxLen).toEqual(20); - expect(textWidgetAnnotation.data.readOnly).toEqual(true); - expect(textWidgetAnnotation.data.multiLine).toEqual(true); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.textAlignment).toEqual(1); + expect(data.maxLen).toEqual(20); + expect(data.readOnly).toEqual(true); + expect(data.multiLine).toEqual(true); }); it('should reject comb fields without a maximum length', function() { @@ -868,9 +895,12 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); - expect(textWidgetAnnotation.data.comb).toEqual(false); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.comb).toEqual(false); }); it('should accept comb fields with a maximum length', function() { @@ -882,9 +912,12 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); - expect(textWidgetAnnotation.data.comb).toEqual(true); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.comb).toEqual(true); }); it('should only accept comb fields when the flags are valid', function() { @@ -907,10 +940,14 @@ describe('Annotation layer', function() { { ref: textWidgetRef, data: textWidgetDict, } ]); - var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef, - pdfManagerMock); + var annotation = annotationFactory.create(xref, textWidgetRef, + pdfManagerMock, + idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + var valid = (invalidFieldFlags.length === 0); - expect(textWidgetAnnotation.data.comb).toEqual(valid); + expect(data.comb).toEqual(valid); // Remove the last invalid flag for the next iteration. if (!valid) { @@ -944,11 +981,14 @@ describe('Annotation layer', function() { { ref: buttonWidgetRef, data: buttonWidgetDict, } ]); - var buttonWidgetAnnotation = - annotationFactory.create(xref, buttonWidgetRef); - expect(buttonWidgetAnnotation.data.checkBox).toEqual(true); - expect(buttonWidgetAnnotation.data.fieldValue).toEqual('1'); - expect(buttonWidgetAnnotation.data.radioButton).toEqual(false); + var annotation = annotationFactory.create(xref, buttonWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.checkBox).toEqual(true); + expect(data.fieldValue).toEqual('1'); + expect(data.radioButton).toEqual(false); }); it('should handle radio buttons', function() { @@ -970,12 +1010,15 @@ describe('Annotation layer', function() { { ref: buttonWidgetRef, data: buttonWidgetDict, } ]); - var buttonWidgetAnnotation = - annotationFactory.create(xref, buttonWidgetRef); - expect(buttonWidgetAnnotation.data.checkBox).toEqual(false); - expect(buttonWidgetAnnotation.data.radioButton).toEqual(true); - expect(buttonWidgetAnnotation.data.fieldValue).toEqual('1'); - expect(buttonWidgetAnnotation.data.buttonValue).toEqual('2'); + var annotation = annotationFactory.create(xref, buttonWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + + expect(data.checkBox).toEqual(false); + expect(data.radioButton).toEqual(true); + expect(data.fieldValue).toEqual('1'); + expect(data.buttonValue).toEqual('2'); }); }); @@ -1001,11 +1044,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.options).toEqual([]); }); @@ -1036,11 +1079,11 @@ describe('Annotation layer', function() { { ref: optionOneRef, data: optionOneArr, }, ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.options).toEqual(expected); }); @@ -1068,11 +1111,11 @@ describe('Annotation layer', function() { { ref: optionBarRef, data: optionBarStr, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.options).toEqual(expected); }); @@ -1086,11 +1129,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.fieldValue).toEqual(fieldValue); }); @@ -1104,11 +1147,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.fieldValue).toEqual([fieldValue]); }); @@ -1118,11 +1161,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.readOnly).toEqual(false); expect(data.combo).toEqual(false); expect(data.multiSelect).toEqual(false); @@ -1136,11 +1179,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.readOnly).toEqual(false); expect(data.combo).toEqual(false); expect(data.multiSelect).toEqual(false); @@ -1156,11 +1199,11 @@ describe('Annotation layer', function() { { ref: choiceWidgetRef, data: choiceWidgetDict, } ]); - var choiceWidgetAnnotation = annotationFactory.create(xref, - choiceWidgetRef, - pdfManagerMock); - var data = choiceWidgetAnnotation.data; + var annotation = annotationFactory.create(xref, choiceWidgetRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.readOnly).toEqual(true); expect(data.combo).toEqual(true); expect(data.multiSelect).toEqual(true); @@ -1217,15 +1260,15 @@ describe('Annotation layer', function() { { ref: popupRef, data: popupDict, } ]); - var popupAnnotation = annotationFactory.create(xref, popupRef, - pdfManagerMock); - var data = popupAnnotation.data; + var annotation = annotationFactory.create(xref, popupRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; expect(data.annotationType).toEqual(AnnotationType.POPUP); // Should not modify the `annotationFlags` returned e.g. through the API. expect(data.annotationFlags).toEqual(25); // The Popup should inherit the `viewable` property of the parent. - expect(popupAnnotation.viewable).toEqual(true); + expect(annotation.viewable).toEqual(true); }); }); }); diff --git a/test/unit/clitests.json b/test/unit/clitests.json index fbf81d93c..e1635a9b4 100644 --- a/test/unit/clitests.json +++ b/test/unit/clitests.json @@ -3,6 +3,7 @@ "spec_files": [ "cff_parser_spec.js", "crypto_spec.js", + "document_spec.js", "dom_utils_spec.js", "evaluator_spec.js", "fonts_spec.js", diff --git a/test/unit/document_spec.js b/test/unit/document_spec.js new file mode 100644 index 000000000..cdec2ae6b --- /dev/null +++ b/test/unit/document_spec.js @@ -0,0 +1,56 @@ +/* Copyright 2017 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define('pdfjs-test/unit/document_spec', ['exports', 'pdfjs/core/document'], + factory); + } else if (typeof exports !== 'undefined') { + factory(exports, require('../../src/core/document.js')); + } else { + factory((root.pdfjsTestUnitDocumentSpec = {}), + root.pdfjsCoreDocument); + } +}(this, function (exports, coreDocument) { + +var Page = coreDocument.Page; + +describe('document', function () { + describe('Page', function () { + it('should create correct objId using the idFactory', function () { + var page1 = new Page(/* pdfManager = */ { }, /* xref = */ null, + /* pageIndex = */ 0, + /* pageDict = */ null, /* ref = */ null, + /* fontCache = */ null); + var page2 = new Page(/* pdfManager = */ { }, /* xref = */ null, + /* pageIndex = */ 1, + /* pageDict = */ null, /* ref = */ null, + /* fontCache = */ null); + + var idFactory1 = page1.idFactory, idFactory2 = page2.idFactory; + + expect(idFactory1.createObjId()).toEqual('p0_1'); + expect(idFactory1.createObjId()).toEqual('p0_2'); + + expect(idFactory2.createObjId()).toEqual('p1_1'); + expect(idFactory2.createObjId()).toEqual('p1_2'); + + expect(idFactory1.createObjId()).toEqual('p0_3'); + expect(idFactory1.createObjId()).toEqual('p0_4'); + }); + }); +}); +})); diff --git a/test/unit/jasmine-boot.js b/test/unit/jasmine-boot.js index f30578a90..b010e4f7e 100644 --- a/test/unit/jasmine-boot.js +++ b/test/unit/jasmine-boot.js @@ -48,23 +48,22 @@ function initializePDFJS(callback) { require(['pdfjs/display/global', 'pdfjs-test/unit/annotation_layer_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/crypto_spec', - 'pdfjs-test/unit/dom_utils_spec', 'pdfjs-test/unit/evaluator_spec', - 'pdfjs-test/unit/fonts_spec', 'pdfjs-test/unit/function_spec', - 'pdfjs-test/unit/metadata_spec', 'pdfjs-test/unit/murmurhash3_spec', - 'pdfjs-test/unit/network_spec', 'pdfjs-test/unit/parser_spec', - 'pdfjs-test/unit/primitives_spec', 'pdfjs-test/unit/stream_spec', - 'pdfjs-test/unit/type1_parser_spec', 'pdfjs-test/unit/ui_utils_spec', - 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/util_spec'], - function (displayGlobal, testUnitAnnotationLayerSpec, - testUnitApiSpec, testUnitCFFParserSpec, - testUnitCMapSpec, testUnitCryptoSpec, - testUnitDOMUtilsSpec, testUnitEvaluatorSpec, - testUnitFontsSpec, testUnitFunctionSpec, - testUnitMetadataSpec, testUnitMurmurHash3Spec, - testUnitNetworkSpec, testUnitParserSpec, + 'pdfjs-test/unit/document_spec', 'pdfjs-test/unit/dom_utils_spec', + 'pdfjs-test/unit/evaluator_spec', 'pdfjs-test/unit/fonts_spec', + 'pdfjs-test/unit/function_spec', 'pdfjs-test/unit/metadata_spec', + 'pdfjs-test/unit/murmurhash3_spec', 'pdfjs-test/unit/network_spec', + 'pdfjs-test/unit/parser_spec', 'pdfjs-test/unit/primitives_spec', + 'pdfjs-test/unit/stream_spec', 'pdfjs-test/unit/type1_parser_spec', + 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', + 'pdfjs-test/unit/util_spec'], + function (displayGlobal, testUnitAnnotationLayerSpec, testUnitApiSpec, + testUnitCFFParserSpec, testUnitCMapSpec, testUnitCryptoSpec, + testUnitDocumentSpec, testUnitDOMUtilsSpec, testUnitEvaluatorSpec, + testUnitFontsSpec, testUnitFunctionSpec, testUnitMetadataSpec, + testUnitMurmurHash3Spec, testUnitNetworkSpec, testUnitParserSpec, testUnitPrimitivesSpec, testUnitStreamSpec, - testUnitType1ParserSpec, testUnitUiUtilsSpec, - testUnitUnicodeSpec, testUnitUtilSpec) { + testUnitType1ParserSpec, testUnitUiUtilsSpec, testUnitUnicodeSpec, + testUnitUtilSpec) { // Configure the worker. displayGlobal.PDFJS.workerSrc = '../../src/worker_loader.js';