From c1af3b9f0df0b8e53c7e4d0b8c4eeb67756b1085 Mon Sep 17 00:00:00 2001 From: 11912937 <11912937@mail.sustech.edu.cn> Date: Sun, 22 May 2022 23:30:21 +0800 Subject: [PATCH] add log --- jhbii/result.png | Bin 0 -> 45397 bytes .../image/comparison/ImageComparisonUtil.java | 13 ++++++ .../romankh3/image/comparison/LogTest.java | 39 ++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 jhbii/result.png create mode 100644 src/test/java/com/github/romankh3/image/comparison/LogTest.java diff --git a/jhbii/result.png b/jhbii/result.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ba9543b2017e19f41b3a7f53789897166ac23 GIT binary patch literal 45397 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/github/romankh3/image/comparison/ImageComparisonUtil.java b/src/main/java/com/github/romankh3/image/comparison/ImageComparisonUtil.java index 4d1f5f1..97a31e1 100644 --- a/src/main/java/com/github/romankh3/image/comparison/ImageComparisonUtil.java +++ b/src/main/java/com/github/romankh3/image/comparison/ImageComparisonUtil.java @@ -15,11 +15,16 @@ import java.io.InputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; +import java.util.logging.*; /** * Tools for the {@link ImageComparison} object. */ public final class ImageComparisonUtil { + /** + * The Logger object. + */ + static Logger logger = Logger.getLogger("com.github.romankh3.image.comparison.ImageComparisonUtil"); /** * Make a copy of the {@link BufferedImage} object. @@ -45,19 +50,24 @@ public static BufferedImage readImageFromResources(String path) throws ImageComp File imageFile = new File(path); if (imageFile.exists()) { try { + logger.info("Read image form User Successfully."); return ImageIO.read(imageFile); } catch (IOException e) { + logger.severe("Cannot read image from the file, path = "+ path); throw new ImageComparisonException(String.format("Cannot read image from the file, path=%s", path), e); } } else { InputStream inputStream = ImageComparisonUtil.class.getClassLoader().getResourceAsStream(path); if (inputStream != null) { try { + logger.info("Reading image file from path."); return ImageIO.read(inputStream); } catch (IOException e) { + logger.severe("Cannot read image from the file, path="+path); throw new ImageComparisonException(String.format("Cannot read image from the file, path=%s", path), e); } } else { + logger.severe("Image with path = "+ path + " not found"); throw new ImageNotFoundException(String.format("Image with path = %s not found", path)); } } @@ -75,11 +85,14 @@ public static void saveImage(File pathFile, BufferedImage image) throws ImageCom // make dir if it's not using from Gradle. boolean dirExists = dir == null || dir.isDirectory() || dir.mkdirs(); if (!dirExists) { + logger.severe("Unable to create directory " + dir); throw new ImageComparisonException("Unable to create directory " + dir); } try { + logger.info("Write the result image to the file directory"); ImageIO.write(image, "png", pathFile); } catch (IOException e) { + logger.severe("Cannot save image to path=" + pathFile.getAbsolutePath()); throw new ImageComparisonException( String.format("Cannot save image to path=%s", pathFile.getAbsolutePath()), e); } diff --git a/src/test/java/com/github/romankh3/image/comparison/LogTest.java b/src/test/java/com/github/romankh3/image/comparison/LogTest.java new file mode 100644 index 0000000..2795639 --- /dev/null +++ b/src/test/java/com/github/romankh3/image/comparison/LogTest.java @@ -0,0 +1,39 @@ +package com.github.romankh3.image.comparison; + +import com.github.romankh3.image.comparison.model.ImageComparisonResult; +import com.github.romankh3.image.comparison.model.ImageComparisonState; +import org.junit.jupiter.api.Test; + +import java.awt.image.BufferedImage; +import java.io.File; + +import static org.junit.jupiter.api.Assertions.*; + +public class LogTest { + @Test + public void logTest1(){ + //load images to be compared: + try{ + BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expcted.png"); + fail(); + } + catch (Exception e){ + assertEquals(e.getMessage(), "Image with path = expcted.png not found"); + } + } + + @Test + public void logTest2(){ + //load images to be compared: + try{ + BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expected.png"); + BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("actul.jpg"); + ImageComparisonResult imageComparisonResult1 = new ImageComparison(expectedImage, actualImage).compareImages(); + fail(); + } + catch (Exception e){ + assertEquals(e.getMessage(), "Image with path = actul.jpg not found"); + } + } + +}