diff --git a/test/unit/annotation_layer_spec.js b/test/unit/annotation_spec.js similarity index 95% rename from test/unit/annotation_layer_spec.js rename to test/unit/annotation_spec.js index aeb33dafd..d93c56fda 100644 --- a/test/unit/annotation_layer_spec.js +++ b/test/unit/annotation_spec.js @@ -16,23 +16,21 @@ (function (root, factory) { if (typeof define === 'function' && define.amd) { - define('pdfjs-test/unit/annotation_layer_spec', ['exports', + define('pdfjs-test/unit/annotation_spec', ['exports', 'pdfjs/core/primitives', 'pdfjs/core/annotation', 'pdfjs/core/stream', - 'pdfjs/core/parser', 'pdfjs/shared/util', 'pdfjs/display/global'], - factory); + 'pdfjs/core/parser', 'pdfjs/shared/util'], 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/shared/util.js')); } else { - factory((root.pdfjsTestUnitAnnotationLayerSpec = {}), + factory((root.pdfjsTestUnitAnnotationSpec = {}), root.pdfjsCorePrimitives, root.pdfjsCoreAnnotation, root.pdfjsCoreStream, - root.pdfjsCoreParser, root.pdfjsSharedUtil, root.pdfjsDisplayGlobal); + root.pdfjsCoreParser, root.pdfjsSharedUtil); } }(this, function (exports, corePrimitives, coreAnnotation, coreStream, - coreParser, sharedUtil, displayGlobal) { + coreParser, sharedUtil) { var Annotation = coreAnnotation.Annotation; var AnnotationBorderStyle = coreAnnotation.AnnotationBorderStyle; @@ -44,7 +42,6 @@ var Dict = corePrimitives.Dict; var Name = corePrimitives.Name; var Ref = corePrimitives.Ref; var StringStream = coreStream.StringStream; -var PDFJS = displayGlobal.PDFJS; var AnnotationType = sharedUtil.AnnotationType; var AnnotationFlag = sharedUtil.AnnotationFlag; var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType; @@ -52,7 +49,7 @@ var AnnotationFieldFlag = sharedUtil.AnnotationFieldFlag; var stringToBytes = sharedUtil.stringToBytes; var stringToUTF8String = sharedUtil.stringToUTF8String; -describe('Annotation layer', function() { +describe('annotation', function() { function XRefMock(array) { this.map = Object.create(null); for (var elem in array) { @@ -1211,33 +1208,56 @@ describe('Annotation layer', function() { }); describe('FileAttachmentAnnotation', function() { - var loadingTask; - var annotations; - - beforeEach(function(done) { - var pdfUrl = new URL('../pdfs/annotation-fileattachment.pdf', - window.location).href; - loadingTask = PDFJS.getDocument(pdfUrl); - loadingTask.promise.then(function(pdfDocument) { - return pdfDocument.getPage(1).then(function(pdfPage) { - return pdfPage.getAnnotations().then(function (pdfAnnotations) { - annotations = pdfAnnotations; - done(); - }); - }); - }).catch(function (reason) { - done.fail(reason); - }); - }); + it('should correctly parse a file attachment', function() { + var fileStream = new StringStream( + '<<\n' + + '/Type /EmbeddedFile\n' + + '/Subtype /text#2Fplain\n' + + '>>\n' + + 'stream\n' + + 'Test attachment' + + 'endstream\n' + ); + var lexer = new Lexer(fileStream); + var parser = new Parser(lexer, /* allowStreams = */ true); - afterEach(function() { - loadingTask.destroy(); - }); + var fileStreamRef = new Ref(18, 0); + var fileStreamDict = parser.getObj(); - it('should correctly parse a file attachment', function() { - var annotation = annotations[0]; - expect(annotation.file.filename).toEqual('Test.txt'); - expect(annotation.file.content).toEqual(stringToBytes('Test attachment')); + var embeddedFileDict = new Dict(); + embeddedFileDict.set('F', fileStreamRef); + + var fileSpecRef = new Ref(19, 0); + var fileSpecDict = new Dict(); + fileSpecDict.set('Type', Name.get('Filespec')); + fileSpecDict.set('Desc', ''); + fileSpecDict.set('EF', embeddedFileDict); + fileSpecDict.set('UF', 'Test.txt'); + + var fileAttachmentRef = new Ref(20, 0); + var fileAttachmentDict = new Dict(); + fileAttachmentDict.set('Type', Name.get('Annot')); + fileAttachmentDict.set('Subtype', Name.get('FileAttachment')); + fileAttachmentDict.set('FS', fileSpecRef); + fileAttachmentDict.set('T', 'Topic'); + fileAttachmentDict.set('Contents', 'Test.txt'); + + var xref = new XRefMock([ + { ref: fileStreamRef, data: fileStreamDict, }, + { ref: fileSpecRef, data: fileSpecDict, }, + { ref: fileAttachmentRef, data: fileAttachmentDict, } + ]); + embeddedFileDict.assignXref(xref); + fileSpecDict.assignXref(xref); + fileAttachmentDict.assignXref(xref); + + var annotation = annotationFactory.create(xref, fileAttachmentRef, + pdfManagerMock, idFactoryMock); + var data = annotation.data; + expect(data.annotationType).toEqual(AnnotationType.FILEATTACHMENT); + + expect(data.file.filename).toEqual('Test.txt'); + expect(data.file.content).toEqual(stringToBytes('Test attachment')); }); }); diff --git a/test/unit/clitests.json b/test/unit/clitests.json index ee92e899f..6277dc364 100644 --- a/test/unit/clitests.json +++ b/test/unit/clitests.json @@ -1,6 +1,7 @@ { "spec_dir": "test/unit", "spec_files": [ + "annotation_spec.js", "bidi_spec.js", "cff_parser_spec.js", "crypto_spec.js", diff --git a/test/unit/jasmine-boot.js b/test/unit/jasmine-boot.js index 2637ca373..0df7797e2 100644 --- a/test/unit/jasmine-boot.js +++ b/test/unit/jasmine-boot.js @@ -45,7 +45,7 @@ var pdfjsLibs; function initializePDFJS(callback) { require.config({paths: {'pdfjs': '../../src', 'pdfjs-web': '../../web', 'pdfjs-test': '..'}}); - require(['pdfjs/display/global', 'pdfjs-test/unit/annotation_layer_spec', + require(['pdfjs/display/global', 'pdfjs-test/unit/annotation_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/bidi_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/document_spec', @@ -57,7 +57,7 @@ function initializePDFJS(callback) { '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, + function (displayGlobal, testUnitAnnotationSpec, testUnitApiSpec, testUnitBidiSpec, testUnitCFFParserSpec, testUnitCMapSpec, testUnitCryptoSpec, testUnitDocumentSpec, testUnitDOMUtilsSpec, testUnitEvaluatorSpec, testUnitFontsSpec, testUnitFunctionSpec,