You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/07/21 17:10:44 UTC

svn commit: r1802615 - in /pdfbox/trunk/pdfbox/src/test: java/org/apache/pdfbox/pdmodel/ resources/org/apache/pdfbox/pdfparser/

Author: tilman
Date: Fri Jul 21 17:10:44 2017
New Revision: 1802615

URL: http://svn.apache.org/viewvc?rev=1802615&view=rev
Log:
PDFBOX-3639: replace inactive test with rudimentary but active test

Added:
    pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf   (with props)
    pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf
    pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf
Modified:
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java?rev=1802615&r1=1802614&r2=1802615&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java Fri Jul 21 17:10:44 2017
@@ -16,280 +16,60 @@
  */
 package org.apache.pdfbox.pdmodel;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URISyntaxException;
 import java.util.List;
-import junit.framework.Test;
 import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.pdfbox.contentstream.PDContentStream;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSString;
-import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.fdf.FDFDocument;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
+import org.apache.pdfbox.pdmodel.fdf.FDFField;
 import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
-import org.apache.pdfbox.pdmodel.interactive.form.PDField;
-import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton;
-import org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField;
-import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
 
 /**
  * This will test the FDF algorithms in PDFBox.
  *
  * @author Ben Litchfield
+ * @author Tilman Hausherr
  * 
  */
 public class TestFDF extends TestCase
 {
-
-    private static final String PDF_FDEB = "target/test-input-ext/fdeb.pdf";
-    private static final String PDF_LOTSOFFIELDS = "target/test-input-ext/pdf_with_lots_of_fields.pdf";
-    private static final String PDF_FREEDOM = "target/test-input-ext/FreedomExpressions.pdf";
-    private static final String FDF_FREEDOM = "target/test-input-ext/FreedomExpressions.fdf";
-
-    /**
-     * Constructor.
-     *
-     * @param name The name of the test to run.
-     */
-    public TestFDF( String name )
-    {
-        super( name );
-    }
-
-    /**
-     * This will get the suite of test that this class holds.
-     *
-     * @return All of the tests that this class holds.
-     */
-    public static Test suite()
-    {
-        return new TestSuite( TestFDF.class );
-    }
-
-    /**
-     * infamous main method.
-     *
-     * @param args The command line arguments.
-     */
-    public static void main( String[] args )
-    {
-        String[] arg = {TestFDF.class.getName() };
-        junit.textui.TestRunner.main( arg );
-    }
-
-    /**
-     * This will test some simple field setting.
-     *
-     * @throws Exception If there is an exception while encrypting.
-     */
-    public void testFDFfdeb() throws Exception
-    {
-        
-        File filePDF = new File(PDF_FDEB); 
-        if ( filePDF.exists() )
-        {
-            PDDocument fdeb = null;
-            try
-            {
-                fdeb = PDDocument.load( filePDF );
-                PDAcroForm form = fdeb.getDocumentCatalog().getAcroForm();
-                PDTextField field = (PDTextField)form.getField( "f67_1" );
-                field.setValue( "2" );
-    
-                String expected =
-                    "/Tx BMC " +
-                    "BT " +
-                    "/Helv 9 Tf " +
-                    " 0 g " +
-                    " 2 1.985585 Td " +
-                    "2.07698 0 Td " +
-                    "(2) Tj " +
-                    "ET " +
-                    "EMC";
-    
-                testContentStreams( fdeb, field, expected );
-            }
-            finally
-            {
-                if( fdeb != null )
-                {
-                    fdeb.close();
-                }
-            }
-        }
-    }
-
-    /**
-     * This will test a pdf with lots of fields.
-     *
-     * @throws Exception If there is an exception while encrypting.
-     */
-    public void testFDFPDFWithLotsOfFields() throws Exception
-    {
-        File filePDF = new File(PDF_LOTSOFFIELDS); 
-        if ( filePDF.exists() )
-        {
-            PDDocument fdeb = null;
-            try
-            {
-                fdeb = PDDocument.load( filePDF );
-                PDAcroForm form = fdeb.getDocumentCatalog().getAcroForm();
-                PDTextField feld2 = (PDTextField)form.getField( "Feld.2" );
-                feld2.setValue( "Benjamin" );
-    
-                String expected =
-                "1 1 0.8000000119 rg " +
-                " 0 0 127.5 19.8299999237 re " +
-                " f " +
-                " 0 0 0 RG " +
-                " 1 w " +
-                " 0.5 0.5 126.5 18.8299999237 re " +
-                " S " +
-                " 0.5 g " +
-                " 1 1 m " +
-                " 1 18.8299999237 l " +
-                " 126.5 18.8299999237 l " +
-                " 125.5 17.8299999237 l " +
-                " 2 17.8299999237 l " +
-                " 2 2 l " +
-                " 1 1 l " +
-                " f " +
-                " 0.75 g " +
-                " 1 1 m " +
-                " 126.5 1 l " +
-                " 126.5 18.8299999237 l " +
-                " 125.5 17.8299999237 l " +
-                " 125.5 2 l " +
-                " 2 2 l " +
-                " 1 1 l " +
-                " f " +
-                " /Tx BMC  " +
-                "BT " +
-                "/Helv 14 Tf " +
-                " 0 0 0 rg " +
-                " 4 4.721 Td " +
-                "(Benjamin) Tj " +
-                "ET " +
-                "EMC";
-    
-                testContentStreams( fdeb, feld2, expected );
-    
-                PDRadioButton feld3 = (PDRadioButton)form.getField( "Feld.3" );
-                feld3.setValue("RB1");
-                assertEquals( "RB1", feld3.getValue());
-            }
-            finally
-            {
-                if( fdeb != null )
-                {
-                    fdeb.close();
-                }
-            }
-        }
-    }
-
     /**
-     * This will test the Freedom pdf.
+     * Test load two simple fdf files with two fields. One of the files does not have a
+     * /Type/Catalog entry, which isn't required anyway (PDFBOX-3639).
      *
-     * @throws Exception If there is an error while testing.
+     * @throws URISyntaxException
+     * @throws IOException
      */
-    public void testFDFFreedomExpressions() throws Exception
+    public void testLoad2() throws URISyntaxException, IOException
     {
-        File filePDF = new File(PDF_FREEDOM); 
-        File fileFDF = new File(FDF_FREEDOM); 
-        if (filePDF.exists() && fileFDF.exists())
-        {
-            PDDocument freedom = null;
-            FDFDocument fdf = null;
-            try
-            {
-                freedom = PDDocument.load( filePDF );
-                fdf = FDFDocument.load( fileFDF );
-                PDAcroForm form = freedom.getDocumentCatalog().getAcroForm();
-                form.importFDF( fdf );
-                
-                PDTextField field2 = (PDTextField)form.getField( "eeFirstName" );
-                List<PDAnnotationWidget> kids = field2.getWidgets();
-                PDAnnotationWidget firstKid = kids.get( 0 );
-                PDAnnotationWidget secondKid = kids.get( 1 );
-                testContentStreamContains( freedom, firstKid, "Steve" );
-                testContentStreamContains( freedom, secondKid, "Steve" );
-    
-                //the appearance stream is suppose to be null because there
-                //is an F action in the AA dictionary that populates that field.
-                PDField totalAmt = form.getField( "eeSuppTotalAmt" );
-                assertTrue( totalAmt.getCOSObject().getDictionaryObject( COSName.AP ) == null );
-    
+        checkFields("/org/apache/pdfbox/pdfparser/withcatalog.fdf");
+        checkFields("/org/apache/pdfbox/pdfparser/nocatalog.fdf");
+    }
+
+    private void checkFields(String name) throws IOException, URISyntaxException
+    {
+        try (FDFDocument fdf = FDFDocument.load(new File(TestFDF.class.getResource(name).toURI())))
+        {
+            fdf.saveXFDF(new PrintWriter(new ByteArrayOutputStream()));
+            
+            List<FDFField> fields = fdf.getCatalog().getFDF().getFields();
+            
+            assertEquals(2, fields.size());
+            assertEquals("Field1", fields.get(0).getPartialFieldName());
+            assertEquals("Field2", fields.get(1).getPartialFieldName());
+            assertEquals("Test1", fields.get(0).getValue());
+            assertEquals("Test2", fields.get(1).getValue());
+            
+            try (PDDocument pdf = PDDocument.load(new File(TestFDF.class.getResource("/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf").toURI())))
+            {
+                PDAcroForm acroForm = pdf.getDocumentCatalog().getAcroForm();
+                acroForm.importFDF(fdf);
+                assertEquals("Test1", acroForm.getField("Field1").getValueAsString());
+                assertEquals("Test2", acroForm.getField("Field2").getValueAsString());
             }
-            finally
-            {
-                if( freedom != null )
-                {
-                    freedom.close();
-                }
-                if( fdf != null )
-                {
-                    fdf.close();
-                }
-            }
-        }
-    }
-
-    private void testContentStreamContains( PDDocument doc, PDAnnotationWidget widget, String expected ) throws Exception
-    {
-        PDAppearanceEntry normalAppearance = widget.getAppearance().getNormalAppearance();
-        PDAppearanceStream appearanceStream = normalAppearance.getAppearanceStream();
-
-        List<Object> actualTokens = getStreamTokens( doc, appearanceStream );
-        assertTrue( actualTokens.contains( new COSString( expected ) ) );
-    }
-
-    private void testContentStreams( PDDocument doc, PDTerminalField field, String expected ) throws Exception
-    {
-        PDAnnotationWidget widget = field.getWidgets().get(0);
-        PDAppearanceEntry normalAppearance = widget.getAppearance().getNormalAppearance();
-        PDAppearanceStream appearanceStream = normalAppearance.getAppearanceStream();
-
-        List<Object> actualTokens = getStreamTokens( doc, appearanceStream );
-        List<Object> expectedTokens = getStreamTokens( doc, expected );
-        assertEquals( actualTokens.size(), expectedTokens.size() );
-        for( int i=0; i<actualTokens.size(); i++ )
-        {
-            Object actualToken = actualTokens.get( i );
-            Object expectedToken = expectedTokens.get( i );
-            assertEquals( actualToken, expectedToken );
-        }
-    }
-
-    private List<Object> getStreamTokens( PDDocument doc, String string ) throws IOException
-    {
-        PDFStreamParser parser;
-
-        List<Object> tokens = null;
-        if( string != null )
-        {
-            parser = new PDFStreamParser( string.getBytes() );
-            parser.parse();
-            tokens = parser.getTokens();
-        }
-        return tokens;
-    }
-
-    private List<Object> getStreamTokens( PDDocument doc, PDContentStream stream ) throws IOException
-    {
-        PDFStreamParser parser;
-
-        List<Object> tokens = null;
-        if( stream != null )
-        {
-            parser = new PDFStreamParser( stream );
-            parser.parse();
-            tokens = parser.getTokens();
         }
-        return tokens;
     }
 }

Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf?rev=1802615&view=auto
==============================================================================
Binary file - no diff available.

Propchange: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/pdf

Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf?rev=1802615&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf (added)
+++ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf Fri Jul 21 17:10:44 2017
@@ -0,0 +1,8 @@
+%FDF-1.4
+%âãÏÓ
+1 0 obj
+<</FDF<</Fields[<</T(Field1)/V(Test1)>><</T(Field2)/V(Test2)>>]>>>>
+endobj
+trailer
+<</Root 1 0 R>>
+%%EOF

Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf?rev=1802615&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf (added)
+++ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf Fri Jul 21 17:10:44 2017
@@ -0,0 +1,8 @@
+%FDF-1.4
+%âãÏÓ
+1 0 obj
+<</FDF<</Fields[<</T(Field1)/V(Test1)>><</T(Field2)/V(Test2)>>]>>/Type/Catalog>>
+endobj
+trailer
+<</Root 1 0 R>>
+%%EOF