Author: ssteiner
Date: Wed Dec  2 14:49:16 2015
New Revision: 1717644

URL: http://svn.apache.org/viewvc?rev=1717644&view=rev
Log:
Add merge tagged pdf tests from Thanasis Giannimaras

Added:
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
   (with props)
    xmlgraphics/fop-pdf-images/trunk/test/resources/hello2.pdf   (with props)
    xmlgraphics/fop-pdf-images/trunk/test/resources/missingOBJR.pdf   (with 
props)
    xmlgraphics/fop-pdf-images/trunk/test/resources/taggedWorld.pdf   (with 
props)
Modified:
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java

Modified: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1717644&r1=1717643&r2=1717644&view=diff
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
 (original)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
 Wed Dec  2 14:49:16 2015
@@ -115,6 +115,7 @@ public class PDFBoxAdapterTestCase {
     private static final String SHADING = "test/resources/shading.pdf";
     private static final String LINK = "test/resources/link.pdf";
     private static final String IMAGE = "test/resources/image.pdf";
+    private static final String HELLOTagged = "test/resources/taggedWorld.pdf";
 
     private PDFBoxAdapter getPDFBoxAdapter() {
         PDFDocument doc = new PDFDocument("");
@@ -324,6 +325,20 @@ public class PDFBoxAdapterTestCase {
     }
 
     @Test
+    public void testTaggedPDFWriter() throws IOException {
+        PDFDocument pdfdoc = new PDFDocument("");
+        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        pdfpage.setDocument(pdfdoc);
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new 
HashMap<Integer, PDFArray>());
+        adapter.setCurrentMCID(5);
+        PDDocument doc = PDDocument.load(HELLOTagged);
+        PDPage page = (PDPage) doc.getDocumentCatalog().getAllPages().get(0);
+        AffineTransform at = new AffineTransform();
+        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+        String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", 
at, null, r);
+        Assert.assertTrue(stream, stream.contains("/P <</MCID 5 >>BDC"));
+        doc.close();
+    }
     public void testLink() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);

Modified: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java?rev=1717644&r1=1717643&r2=1717644&view=diff
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
 (original)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
 Wed Dec  2 14:49:16 2015
@@ -18,15 +18,20 @@
 package org.apache.fop.render.pdf;
 
 import java.io.IOException;
+import java.util.HashMap;
 
 import org.junit.Test;
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
+
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.graphics.PDXObject;
 
 import org.apache.fop.render.pdf.pdfbox.PageParentTreeFinder;
 
@@ -59,4 +64,17 @@ public class PageParentTreeFinderTestCas
         expected = 1;
         Assert.assertEquals(test, expected);
     }
+
+    @Test
+    public void testNoparentTreePresent() {
+        PDPage srcPage = new PDPage();
+        srcPage.getCOSDictionary().setItem(COSName.STRUCT_PARENTS, 
COSInteger.get(-1));
+        PDResources res = new PDResources();
+        res.setXObjects(new HashMap<String, PDXObject>());
+        srcPage.setResources(res);
+        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+        COSArray parentTree = finder.getPageParentTreeArray(null);
+        int test = parentTree.size();
+        Assert.assertEquals(test, 0);
+    }
 }

Modified: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java?rev=1717644&r1=1717643&r2=1717644&view=diff
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
 (original)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
 Wed Dec  2 14:49:16 2015
@@ -23,8 +23,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
-
-
 import org.junit.Test;
 
 import org.apache.pdfbox.cos.COSArray;
@@ -33,7 +31,6 @@ import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
 
-
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 
@@ -42,6 +39,7 @@ import org.apache.fop.pdf.PDFDictionary;
 import org.apache.fop.pdf.PDFDocument;
 import org.apache.fop.pdf.PDFName;
 import org.apache.fop.pdf.PDFNumber;
+import org.apache.fop.pdf.PDFObject;
 import org.apache.fop.pdf.PDFPage;
 import org.apache.fop.pdf.PDFReference;
 import org.apache.fop.pdf.PDFResources;
@@ -55,8 +53,8 @@ import junit.framework.Assert;
 
 public class StructureTreeMergerTestCase {
     private static final String LINK = "test/resources/linkTagged.pdf";
-    private static final String NoParentTree = 
"test/resources/NoParentTree.pdf";
     private static final String BrokenLink = "test/resources/brokenLink.pdf";
+    private static final String MissingOBJR = "test/resources/missingOBJR.pdf";
     private PDFPage pdfPage;
     private PDFDocument pdfDoc;
     private PDFBoxAdapter adapter;
@@ -71,6 +69,7 @@ public class StructureTreeMergerTestCase
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(2);
         adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new 
HashMap<Integer, PDFArray>());
+        adapter.setCurrentMCID(1);
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, 
adapter, srcPage);
         merger.copyStructure(markedContentParents);
@@ -81,19 +80,50 @@ public class StructureTreeMergerTestCase
     }
 
     @Test
-    public void testCreateDirectDescendants() throws IOException {
+    public void testNullEntriesInParentTree() throws IOException {
+        setUp();
+        PDDocument doc = PDDocument.load(LINK);
+        PDPage srcPage = doc.getPage(0);
+        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+        markedContentParents.add(0, null);
+        PDFStructElem elem = new PDFStructElem();
+        elem.setObjectNumber(2);
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new 
HashMap<Integer, PDFArray>());
+        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, 
adapter, srcPage);
+        merger.copyStructure(markedContentParents);
+        PDFArray array = handler.getPageParentTree();
+        Assert.assertNull(array.get(0));
+    }
+
+    @Test
+    public void testOBJRCorrectPosition() throws IOException {
         setUp();
-        PDDocument doc = PDDocument.load(NoParentTree);
+        PDDocument doc = PDDocument.load(MissingOBJR);
         PDPage srcPage = doc.getPage(0);
+        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(2);
         adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new 
HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, 
adapter, srcPage);
-        COSDictionary strucRootDict = 
(COSDictionary)doc.getDocumentCatalog().getStructureTreeRoot()
-            .getCOSObject();
-        merger.createDirectDescendants(strucRootDict, elem);
-        checkNoParentTree(elem, 0);
+        merger.copyStructure(markedContentParents);
+//        PDFArray array = handler.getPageParentTree();
+
+//        PDFStructElem kid = (PDFStructElem)array.get(0);
+//        PDFReference reference = (PDFReference) kid.get("P");
+//        PDFStructElem parent = (PDFStructElem)reference.getObject();
+//        List<PDFObject> kids = parent.getKids();
+//        PDFDictionary first = (PDFDictionary) kids.get(0);
+
+//        Assert.assertEquals(first.get("Type").toString(), "/OBJR");
+//        PDFDictionary last = (PDFDictionary) kids.get(2);
+//        Assert.assertEquals(last.get("Type").toString(), "/OBJR");
+
+//        PDFStructElem middle = (PDFStructElem) kids.get(1);
+//        Assert.assertEquals(middle.get("Type").toString(), "/StructElem");
     }
 
     private void checkMarkedContentsParentsForLinkTest(PDFArray array) {
@@ -101,17 +131,17 @@ public class StructureTreeMergerTestCase
         List firstKids = first.getKids();
         PDFDictionary firstKid = (PDFDictionary) firstKids.get(0);
         int test = ((PDFNumber)firstKid.get("MCID")).getNumber().intValue();
-        int expected = 0;
+        int expected = 1;
         Assert.assertEquals(test, expected);
         PDFDictionary firstKidSibling = (PDFDictionary) firstKids.get(2);
         test = ((PDFNumber)firstKidSibling.get("MCID")).getNumber().intValue();
-        expected = 2;
+        expected = 3;
         Assert.assertEquals(test, expected);
         PDFStructElem second = (PDFStructElem)array.get(1);
         List secondKids = second.getKids();
         PDFDictionary secKid = (PDFDictionary) secondKids.get(0);
         test = ((PDFNumber)secKid.get("MCID")).getNumber().intValue();
-        expected = 1;
+        expected = 2;
         Assert.assertEquals(test, expected);
     }
 
@@ -129,8 +159,8 @@ public class StructureTreeMergerTestCase
 
     private void setUp() {
         Rectangle2D r = new Rectangle2D.Double();
-        pdfPage = new PDFPage(new PDFResources(pdfDoc), 0, r, r, r, r);
         pdfDoc = new PDFDocument(" ");
+        pdfPage = new PDFPage(new PDFResources(pdfDoc), 0, r, r, r, r);
         pdfDoc.makeStructTreeRoot(null);
         pdfPage.setObjectNumber(1);
         pdfPage.setDocument(pdfDoc);
@@ -143,38 +173,8 @@ public class StructureTreeMergerTestCase
         return handler;
     }
 
-    private void checkNoParentTree(PDFStructElem elem, int index) {
-        String [] types = {"Document", "Part"};
-        if (index != 2) {
-            PDFStructElem kid = (PDFStructElem)elem.getKids().get(0);
-            String test = ((PDFName)kid.get("S")).getName();
-            String expected = types[index];
-            Assert.assertEquals(test, expected);
-            index++;
-            checkNoParentTree(kid, index);
-        }
-    }
-
-
     @Test
-    public void testNullEntriesInParentTree() throws IOException {
-        setUp();
-        PDDocument doc = PDDocument.load(LINK);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        markedContentParents.add(0, null);
-        PDFStructElem elem = new PDFStructElem();
-        elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new 
HashMap<Integer, PDFArray>());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, 
adapter, srcPage);
-        merger.copyStructure(markedContentParents);
-        PDFArray array = handler.getPageParentTree();
-        Assert.assertNull(array.get(0));
-    }
-    @Test
-    public void checkNullCOSObject() throws IOException {
+    public void testCheckNullCOSObject() throws IOException {
         setUp();
         PDDocument doc = PDDocument.load(BrokenLink);
         PDPage srcPage = doc.getPage(0);
@@ -198,4 +198,28 @@ public class StructureTreeMergerTestCase
         PDFDictionary objrDict = (PDFDictionary) parentElem.getKids().get(1);
         Assert.assertNull(objrDict.get("Obj"));
     }
+
+    @Test
+    public void testDirectDescedants() throws IOException {
+        PDFStructElem elem = new PDFStructElem();
+        elem.setObjectNumber(100);
+        setUp();
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new 
HashMap<Integer, PDFArray>());
+        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+        PDPage srcPage = new PDPage();
+        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, 
adapter, srcPage);
+        COSArray array = new COSArray();
+        COSDictionary dict = new COSDictionary();
+        dict.setItem(COSName.S, COSName.P);
+        COSObject obj = new COSObject(dict);
+        obj.setObjectNumber(COSInteger.get(200));
+        obj.setGenerationNumber(COSInteger.ZERO);
+        array.add(0, obj);
+        merger.createDirectDescendants(array, elem);
+        List<PDFObject> list = elem.getKids();
+        PDFStructElem kid = (PDFStructElem)list.get(0);
+        PDFName name = (PDFName)kid.get("S");
+        String test = name.getName();
+        Assert.assertEquals(test, "P");
+    }
 }

Added: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java?rev=1717644&view=auto
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
 (added)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
 Wed Dec  2 14:49:16 2015
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.fop.render.pdf;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+
+import org.apache.fop.render.pdf.pdfbox.StructureTreeMergerUtil;
+
+import junit.framework.Assert;
+
+public class StructureTreeMergerUtilTestCase {
+
+    @Test
+    public void testFindRoleMapKeyByValue() {
+
+        COSDictionary rolemap = new COSDictionary();
+        COSName key1 = COSName.getPDFName("Para");
+        COSName value1 = COSName.getPDFName("P");
+        COSName key2 = COSName.getPDFName("Icon");
+        COSName value2 = COSName.getPDFName("Image");
+        rolemap.setItem(key1, value1);
+        rolemap.setItem(key2, value2);
+        String type = "Image";
+        List<String> result = 
StructureTreeMergerUtil.findRoleMapKeyByValue(type, rolemap);
+        String test = result.get(0);
+        String expected = "Icon";
+        Assert.assertEquals(test, expected);
+    }
+}

Propchange: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java?rev=1717644&r1=1717643&r2=1717644&view=diff
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
 (original)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
 Wed Dec  2 14:49:16 2015
@@ -46,6 +46,8 @@ public class TaggedPDFConductorTestCase
     private static final String HELLO = "test/resources/helloWorld.pdf";
     private static final String TABLE = "test/resources/emptyRowTable.pdf";
     private static final String OTF = "test/resources/otf.pdf";
+    private static final String IMAGE = "test/resources/hello2.pdf";
+    private static final String NOPARENTTREE = 
"test/resources/NoParentTree.pdf";
     private PDFPage pdfPage;
     private PDFDocument pdfDoc;
 
@@ -74,12 +76,15 @@ public class TaggedPDFConductorTestCase
 
     private String print(PDFStructElem x) throws IOException {
         StringBuilder sb = new StringBuilder(x.get("S").toString());
-        for (PDFObject k : x.getKids()) {
-            if (k instanceof PDFStructElem) {
-                sb.append(print((PDFStructElem) k));
+        if (x.getKids() != null) {
+            for (PDFObject k : x.getKids()) {
+                if (k instanceof PDFStructElem) {
+                    sb.append(print((PDFStructElem) k));
+                }
             }
+            return sb.toString();
         }
-        return sb.toString();
+        return "";
     }
 
     private void runConductor(String pdf, PDFStructElem elem) throws 
IOException {
@@ -138,4 +143,18 @@ public class TaggedPDFConductorTestCase
             Assert.assertEquals(test, expected);
         }
     }
+
+    @Test
+    public void testTaggedImagePDF() throws IOException {
+        PDFStructElem elem = new PDFStructElem();
+        runConductor(IMAGE, elem);
+        Assert.assertEquals(print(elem), "/Div/Part/Sect/P/Image");
+    }
+
+    @Test
+    public void testCreateDirectDescendants() throws IOException {
+        PDFStructElem elem = new PDFStructElem();
+        runConductor(NOPARENTTREE, elem);
+        Assert.assertEquals(print(elem), "/Div/Document");
+    }
 }

Added: xmlgraphics/fop-pdf-images/trunk/test/resources/hello2.pdf
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/hello2.pdf?rev=1717644&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/hello2.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: xmlgraphics/fop-pdf-images/trunk/test/resources/missingOBJR.pdf
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/missingOBJR.pdf?rev=1717644&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/missingOBJR.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: xmlgraphics/fop-pdf-images/trunk/test/resources/taggedWorld.pdf
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/taggedWorld.pdf?rev=1717644&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/taggedWorld.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to