You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ki...@apache.org on 2020/05/26 23:43:40 UTC

[commons-imaging] branch master updated: Added parameter and correctness tests

This is an automated email from the ASF dual-hosted git repository.

kinow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git


The following commit(s) were added to refs/heads/master by this push:
     new a94189c  Added parameter and correctness tests
     new f27f471  Merge pull request #77 from gwlucastrig/extendTiffSubImageTest
a94189c is described below

commit a94189cd8984c3971d405422460a6216566cbdae
Author: gwlucastrig <co...@gmail.com>
AuthorDate: Tue May 26 19:13:44 2020 -0400

    Added parameter and correctness tests
---
 .../imaging/formats/tiff/TiffSubImageTest.java     | 83 ++++++++++++++++++++++
 1 file changed, 83 insertions(+)

diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
index 2f2e235..2d4a06a 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
@@ -17,9 +17,13 @@
 package org.apache.commons.imaging.formats.tiff;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.image.BufferedImage;
+import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -31,6 +35,11 @@ import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.junit.jupiter.api.Test;
 
 public class TiffSubImageTest extends TiffBaseTest {
+    final List<File> imageFileList;
+    
+    TiffSubImageTest() throws IOException, ImageReadException{
+        imageFileList = getTiffImages();
+    }
 
     @Test
     public void testSubImage() throws ImageReadException, ImageWriteException, IOException {
@@ -46,4 +55,78 @@ public class TiffSubImageTest extends TiffBaseTest {
         assertEquals(image.getWidth(), 2);
         assertEquals(image.getHeight(), 3);
     }
+    
+    @Test
+    public void testBadSubImage()  throws ImageReadException, IOException{
+        File target = imageFileList.get(0);
+        final BufferedImage referenceImage = Imaging.getBufferedImage(target);
+        int width = referenceImage.getWidth();
+        int height = referenceImage.getHeight();
+        
+        final Map<String, Object> params = new HashMap<>();
+        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, 0);
+        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, 0);
+        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, width);
+        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, height);
+        
+        BufferedImage image = Imaging.getBufferedImage(target, params);
+        assertEquals(image.getWidth(), width, "Improper width when sub-imaging entire image");
+        assertEquals(image.getHeight(), height, "Improper height when sub-imaging entire image");
+        
+        processBadParams(target, -1, 0, width, height, "negative x position");
+        processBadParams(target, 0, -1, width, height, "negative y position");
+        processBadParams(target, 0, 0, 0, height, "zero width");
+        processBadParams(target, 0, 0, width, 0, "zero height");
+        processBadParams(target, 1, 0, width, height, "sub-image width extends beyond bounds");
+        processBadParams(target, 0, 1, width, height, "sub-image height extends beyond bounds");
+    }
+        
+    private void processBadParams(File target, int x, int y, int width, int height, String comment) throws IOException{
+        try{
+            final Map<String, Object> params = new HashMap<>();
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, x);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, y);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, width);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, height);
+            BufferedImage image = Imaging.getBufferedImage(target, params);
+            fail("Reading TIFF sub-image failed to detect bad parameter: "+comment);
+        }catch(ImageReadException ire){
+            // the test passed
+        }
+    }
+    
+    @Test
+    public void testSubImageCorrectness() throws ImageReadException, IOException {
+        for(File target: imageFileList){
+            final BufferedImage referenceImage = Imaging.getBufferedImage(target);
+            int rW = referenceImage.getWidth();
+            int rH = referenceImage.getHeight();
+            if(rW<3 || rH<3){
+                continue;
+            }
+            int []rArgb = new int[rW*rH];
+            referenceImage.getRGB(0, 0, rW, rH, rArgb, 0, rW);
+            final Map<String, Object> params = new HashMap<>();
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, 1);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, 1);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, rW-2);
+            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, rH-2);
+            BufferedImage image = Imaging.getBufferedImage(target, params);
+            int iW = image.getWidth();
+            int iH = image.getHeight();
+            assertEquals(iW, rW-2, "Invalid subimage width");
+            assertEquals(iH, rH-2, "Invalid subimage height");
+            int []iArgb= new int[iW*iH];
+            image.getRGB(0, 0, iW, iH, iArgb, 0, iW);
+            for(int i=0; i<iH; i++){
+                for(int j=0; j<iW; j++){
+                    int rTest = rArgb[(i+1)*rW+j+1];
+                    int iTest = iArgb[i*iW+j];
+                    assertEquals(iTest, rTest, "Invalid pixel lookup for "+target.getName()+" at "+i+", "+j);
+                }
+            }
+        }
+    }
+    
+     
 }
\ No newline at end of file