[Pkg-javascript-commits] [pdf.js] 380/414: Add a couple of `LinkAnnotation` unit-tests

David Prévot taffit at moszumanska.debian.org
Tue Jun 28 17:12:42 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository pdf.js.

commit 171f908b892e43062586c25418c722861f98f6b0
Author: Jonas Jenwald <jonas.jenwald at gmail.com>
Date:   Sat Mar 26 10:00:25 2016 +0100

    Add a couple of `LinkAnnotation` unit-tests
    
    We currently don't have *any* unit-tests for `LinkAnnotation`s, so it seemed a good idea to add a few. These tests are taken from various actual PDF files.
---
 test/unit/annotation_layer_spec.js | 160 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 157 insertions(+), 3 deletions(-)

diff --git a/test/unit/annotation_layer_spec.js b/test/unit/annotation_layer_spec.js
index 593c495..31911bc 100644
--- a/test/unit/annotation_layer_spec.js
+++ b/test/unit/annotation_layer_spec.js
@@ -1,10 +1,20 @@
 /* globals expect, it, describe, Dict, Name, Annotation, AnnotationBorderStyle,
-           AnnotationBorderStyleType, AnnotationFlag, PDFJS, 
-           beforeEach, afterEach, stringToBytes */
+           AnnotationBorderStyleType, AnnotationType, AnnotationFlag, PDFJS,
+           beforeEach, afterEach, stringToBytes, AnnotationFactory, Ref,
+           beforeAll, afterAll */
 
 'use strict';
 
 describe('Annotation layer', function() {
+  function XrefMock(queue) {
+    this.queue = queue || [];
+  }
+  XrefMock.prototype = {
+    fetchIfRef: function() {
+      return this.queue.shift();
+    }
+  };
+
   describe('Annotation', function() {
     it('should set and get flags', function() {
       var dict = new Dict();
@@ -174,12 +184,156 @@ describe('Annotation layer', function() {
     });
   });
 
+  describe('LinkAnnotation', function() {
+    var annotationFactory;
+
+    beforeAll(function (done) {
+      annotationFactory = new AnnotationFactory();
+      done();
+    });
+
+    afterAll(function () {
+      annotationFactory = null;
+    });
+
+    it('should correctly parse a URI action', function() {
+      var actionDict = new Dict();
+      actionDict.set('Type', Name.get('Action'));
+      actionDict.set('S', Name.get('URI'));
+      actionDict.set('URI', 'http://www.ctan.org/tex-archive/info/lshort');
+
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('A', actionDict);
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(820, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toEqual('http://www.ctan.org/tex-archive/info/lshort');
+      expect(data.dest).toBeUndefined();
+    });
+
+    it('should correctly parse a URI action, where the URI entry ' +
+       'is missing a protocol', function() {
+      var actionDict = new Dict();
+      actionDict.set('Type', Name.get('Action'));
+      actionDict.set('S', Name.get('URI'));
+      actionDict.set('URI', 'www.hmrc.gov.uk');
+
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('A', actionDict);
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(353, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toEqual('http://www.hmrc.gov.uk');
+      expect(data.dest).toBeUndefined();
+    });
+
+    it('should correctly parse a GoTo action', function() {
+      var actionDict = new Dict();
+      actionDict.set('Type', Name.get('Action'));
+      actionDict.set('S', Name.get('GoTo'));
+      actionDict.set('D', 'page.157');
+
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('A', actionDict);
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(798, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toBeUndefined();
+      expect(data.dest).toEqual('page.157');
+    });
+
+    it('should correctly parse a GoToR action, where the FileSpec entry ' +
+       'is a string containing a relative URL', function() {
+      var actionDict = new Dict();
+      actionDict.set('Type', Name.get('Action'));
+      actionDict.set('S', Name.get('GoToR'));
+      actionDict.set('F', '../../0021/002156/215675E.pdf');
+      actionDict.set('D', '15');
+
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('A', actionDict);
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(489, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toBeUndefined();
+      expect(data.dest).toBeUndefined();
+      expect(data.newWindow).toBeFalsy();
+    });
+
+    it('should correctly parse a Named action', function() {
+      var actionDict = new Dict();
+      actionDict.set('Type', Name.get('Action'));
+      actionDict.set('S', Name.get('Named'));
+      actionDict.set('N', Name.get('GoToPage'));
+
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('A', actionDict);
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(12, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toBeUndefined();
+      expect(data.action).toEqual('GoToPage');
+    });
+
+    it('should correctly parse a simple Dest', function() {
+      var annotationDict = new Dict();
+      annotationDict.set('Type', Name.get('Annot'));
+      annotationDict.set('Subtype', Name.get('Link'));
+      annotationDict.set('Dest', Name.get('LI0'));
+
+      var xrefMock = new XrefMock([annotationDict]);
+      var annotationRef = new Ref(583, 0);
+
+      var annotation = annotationFactory.create(xrefMock, annotationRef);
+      var data = annotation.data;
+      expect(data.annotationType).toEqual(AnnotationType.LINK);
+
+      expect(data.url).toBeUndefined();
+      expect(data.dest).toEqual('LI0');
+    });
+  });
+
   describe('FileAttachmentAnnotation', function() {
     var loadingTask;
     var annotations;
 
     beforeEach(function(done) {
-      var pdfUrl = new URL('../pdfs/annotation-fileattachment.pdf', 
+      var pdfUrl = new URL('../pdfs/annotation-fileattachment.pdf',
                            window.location).href;
       loadingTask = PDFJS.getDocument(pdfUrl);
       loadingTask.promise.then(function(pdfDocument) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git



More information about the Pkg-javascript-commits mailing list