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 <contact.tinf...@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