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 2015/02/05 20:27:22 UTC

svn commit: r1657668 - /pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java

Author: tilman
Date: Thu Feb  5 19:27:21 2015
New Revision: 1657668

URL: http://svn.apache.org/r1657668
Log:
PDFBOX-1978: deterministic and non-deterministic tests

Modified:
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java?rev=1657668&r1=1657667&r2=1657668&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java Thu Feb  5 19:27:21 2015
@@ -16,74 +16,100 @@
  */
 package org.apache.fontbox.cff;
 
-import static org.junit.Assert.assertArrayEquals;
-
 import java.util.Random;
-import org.junit.Test;
+import junit.framework.TestCase;
+import static org.junit.Assert.assertArrayEquals;
+import org.junit.internal.ArrayComparisonFailure;
 
 /**
  * This class includes some tests for the Type1FontUtil class.
- * 
+ *
  * @author Villu Ruusmann
  * @version $Revision$
  */
-public class Type1FontUtilTest
+public class Type1FontUtilTest extends TestCase
 {
+    static final long DEFAULTSEED = 12345;
+    static final long LOOPS = 1000;
 
     /**
      * Tests the hex encoding/decoding.
      */
-    @Test
-    public void hexEncoding()
+    public void testHexEncoding()
     {
-        byte[] bytes = randomBytes(128);
+        long seed = DEFAULTSEED;
+        tryHexEncoding(seed);
+        for (int i = 0; i < LOOPS; ++i)
+        {
+            tryHexEncoding(System.currentTimeMillis());
+        }
+    }
+
+    private void tryHexEncoding(long seed) throws ArrayComparisonFailure
+    {
+        byte[] bytes = createRandomByteArray(128, seed);
 
         String encodedBytes = Type1FontUtil.hexEncode(bytes);
         byte[] decodedBytes = Type1FontUtil.hexDecode(encodedBytes);
-
-        assertArrayEquals(bytes, decodedBytes);
+        
+        assertArrayEquals("Seed: " + seed, bytes, decodedBytes);
     }
 
     /**
      * Tests the eexec encryption/decryption.
      */
-    @Test
-    public void eexecEncryption()
+    public void testEexecEncryption()
     {
-        byte[] bytes = randomBytes(128);
+        long seed = DEFAULTSEED;
+        tryEexecEncryption(seed);
+        for (int i = 0; i < LOOPS; ++i)
+        {
+            tryEexecEncryption(System.currentTimeMillis());
+        }
+    }
+
+    private void tryEexecEncryption(long seed) throws ArrayComparisonFailure
+    {
+        byte[] bytes = createRandomByteArray(128, seed);
 
         byte[] encryptedBytes = Type1FontUtil.eexecEncrypt(bytes);
         byte[] decryptedBytes = Type1FontUtil.eexecDecrypt(encryptedBytes);
 
-        assertArrayEquals(bytes, decryptedBytes);
+        assertArrayEquals("Seed: " + seed, bytes, decryptedBytes);
     }
 
     /**
      * Tests the charstring encryption/decryption.
      */
-    @Test
-    public void charstringEncryption()
+    public void testCharstringEncryption()
+    {
+        long seed = DEFAULTSEED;
+        tryCharstringEncryption(seed);
+        for (int i = 0; i < LOOPS; ++i)
+        {
+            tryCharstringEncryption(System.currentTimeMillis());
+        }
+    }
+
+    private void tryCharstringEncryption(long seed) throws ArrayComparisonFailure
     {
-        byte[] bytes = randomBytes(128);
+        byte[] bytes = createRandomByteArray(128, seed);
 
         byte[] encryptedBytes = Type1FontUtil.charstringEncrypt(bytes, 4);
-        byte[] decryptedBytes = Type1FontUtil.charstringDecrypt(encryptedBytes,
-                4);
+        byte[] decryptedBytes = Type1FontUtil.charstringDecrypt(encryptedBytes, 4);
 
-        assertArrayEquals(bytes, decryptedBytes);
+        assertArrayEquals("Seed: " + seed, bytes, decryptedBytes);
     }
 
-    private static byte[] randomBytes(int length)
+    private static byte[] createRandomByteArray(int arrayLength, long seed)
     {
-        byte[] bytes = new byte[length];
+        byte[] bytes = new byte[arrayLength];
+        Random ramdom = new Random(seed);
 
-        for (int i = 0; i < length; i++)
+        for (int i = 0; i < arrayLength; i++)
         {
-            bytes[i] = (byte) RANDOM.nextInt(256);
+            bytes[i] = (byte) ramdom.nextInt(256);
         }
-
         return bytes;
     }
-
-    private static final Random RANDOM = new Random();
-}
\ No newline at end of file
+}