Browse Source

Merge pull request #7951 from Snuffleupagus/FileAttachmentAnnotation-simplified-unittest

Rename `annotation_layer_spec.js` to `annotation_spec.js` to better describe what is actually tested, and simplify the `FileAttachmentAnnotation` unit-test to avoid having to use the entire API in the test
Yury Delendik 8 years ago committed by GitHub
parent
commit
c0d7029039
  1. 88
      test/unit/annotation_spec.js
  2. 1
      test/unit/clitests.json
  3. 4
      test/unit/jasmine-boot.js

88
test/unit/annotation_layer_spec.js → test/unit/annotation_spec.js

@ -16,23 +16,21 @@
(function (root, factory) { (function (root, factory) {
if (typeof define === 'function' && define.amd) { 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/primitives', 'pdfjs/core/annotation', 'pdfjs/core/stream',
'pdfjs/core/parser', 'pdfjs/shared/util', 'pdfjs/display/global'], 'pdfjs/core/parser', 'pdfjs/shared/util'], factory);
factory);
} else if (typeof exports !== 'undefined') { } else if (typeof exports !== 'undefined') {
factory(exports, require('../../src/core/primitives.js'), factory(exports, require('../../src/core/primitives.js'),
require('../../src/core/annotation.js'), require('../../src/core/annotation.js'),
require('../../src/core/stream.js'), require('../../src/core/parser.js'), require('../../src/core/stream.js'), require('../../src/core/parser.js'),
require('../../src/shared/util.js'), require('../../src/shared/util.js'));
require('../../src/display/global.js'));
} else { } else {
factory((root.pdfjsTestUnitAnnotationLayerSpec = {}), factory((root.pdfjsTestUnitAnnotationSpec = {}),
root.pdfjsCorePrimitives, root.pdfjsCoreAnnotation, root.pdfjsCoreStream, root.pdfjsCorePrimitives, root.pdfjsCoreAnnotation, root.pdfjsCoreStream,
root.pdfjsCoreParser, root.pdfjsSharedUtil, root.pdfjsDisplayGlobal); root.pdfjsCoreParser, root.pdfjsSharedUtil);
} }
}(this, function (exports, corePrimitives, coreAnnotation, coreStream, }(this, function (exports, corePrimitives, coreAnnotation, coreStream,
coreParser, sharedUtil, displayGlobal) { coreParser, sharedUtil) {
var Annotation = coreAnnotation.Annotation; var Annotation = coreAnnotation.Annotation;
var AnnotationBorderStyle = coreAnnotation.AnnotationBorderStyle; var AnnotationBorderStyle = coreAnnotation.AnnotationBorderStyle;
@ -44,7 +42,6 @@ var Dict = corePrimitives.Dict;
var Name = corePrimitives.Name; var Name = corePrimitives.Name;
var Ref = corePrimitives.Ref; var Ref = corePrimitives.Ref;
var StringStream = coreStream.StringStream; var StringStream = coreStream.StringStream;
var PDFJS = displayGlobal.PDFJS;
var AnnotationType = sharedUtil.AnnotationType; var AnnotationType = sharedUtil.AnnotationType;
var AnnotationFlag = sharedUtil.AnnotationFlag; var AnnotationFlag = sharedUtil.AnnotationFlag;
var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType; var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType;
@ -52,7 +49,7 @@ var AnnotationFieldFlag = sharedUtil.AnnotationFieldFlag;
var stringToBytes = sharedUtil.stringToBytes; var stringToBytes = sharedUtil.stringToBytes;
var stringToUTF8String = sharedUtil.stringToUTF8String; var stringToUTF8String = sharedUtil.stringToUTF8String;
describe('Annotation layer', function() { describe('annotation', function() {
function XRefMock(array) { function XRefMock(array) {
this.map = Object.create(null); this.map = Object.create(null);
for (var elem in array) { for (var elem in array) {
@ -1211,33 +1208,56 @@ describe('Annotation layer', function() {
}); });
describe('FileAttachmentAnnotation', function() { describe('FileAttachmentAnnotation', function() {
var loadingTask; it('should correctly parse a file attachment', function() {
var annotations; 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);
beforeEach(function(done) { var fileStreamRef = new Ref(18, 0);
var pdfUrl = new URL('../pdfs/annotation-fileattachment.pdf', var fileStreamDict = parser.getObj();
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);
});
});
afterEach(function() { var embeddedFileDict = new Dict();
loadingTask.destroy(); embeddedFileDict.set('F', fileStreamRef);
});
it('should correctly parse a file attachment', function() { var fileSpecRef = new Ref(19, 0);
var annotation = annotations[0]; var fileSpecDict = new Dict();
expect(annotation.file.filename).toEqual('Test.txt'); fileSpecDict.set('Type', Name.get('Filespec'));
expect(annotation.file.content).toEqual(stringToBytes('Test attachment')); 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'));
}); });
}); });

1
test/unit/clitests.json

@ -1,6 +1,7 @@
{ {
"spec_dir": "test/unit", "spec_dir": "test/unit",
"spec_files": [ "spec_files": [
"annotation_spec.js",
"bidi_spec.js", "bidi_spec.js",
"cff_parser_spec.js", "cff_parser_spec.js",
"crypto_spec.js", "crypto_spec.js",

4
test/unit/jasmine-boot.js

@ -45,7 +45,7 @@ var pdfjsLibs;
function initializePDFJS(callback) { function initializePDFJS(callback) {
require.config({paths: {'pdfjs': '../../src', 'pdfjs-web': '../../web', require.config({paths: {'pdfjs': '../../src', 'pdfjs-web': '../../web',
'pdfjs-test': '..'}}); '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/api_spec', 'pdfjs-test/unit/bidi_spec',
'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec',
'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/document_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/type1_parser_spec',
'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec',
'pdfjs-test/unit/util_spec'], 'pdfjs-test/unit/util_spec'],
function (displayGlobal, testUnitAnnotationLayerSpec, testUnitApiSpec, function (displayGlobal, testUnitAnnotationSpec, testUnitApiSpec,
testUnitBidiSpec, testUnitCFFParserSpec, testUnitCMapSpec, testUnitBidiSpec, testUnitCFFParserSpec, testUnitCMapSpec,
testUnitCryptoSpec, testUnitDocumentSpec, testUnitDOMUtilsSpec, testUnitCryptoSpec, testUnitDocumentSpec, testUnitDOMUtilsSpec,
testUnitEvaluatorSpec, testUnitFontsSpec, testUnitFunctionSpec, testUnitEvaluatorSpec, testUnitFontsSpec, testUnitFunctionSpec,

Loading…
Cancel
Save