This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit a2fb0bdc0274d7b34dc4f0b15458a596b902b78f Author: jcouteau <couteau@codelutin.com> Date: Wed Aug 8 11:42:58 2018 +0200 Create a real pixel perfect test for #10004 --- .../services/service/EmailServiceTest.java | 95 ++++++++++++++++++--- .../src/test/resources/pdf/10004-page1.png | Bin 0 -> 72751 bytes 2 files changed, 85 insertions(+), 10 deletions(-) diff --git a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java index 595b8dbd..9570a9df 100644 --- a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java +++ b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java @@ -57,7 +57,9 @@ import org.nuiton.util.pagination.PaginationResult; import javax.imageio.ImageIO; import javax.mail.Session; import javax.mail.internet.MimeMessage; +import java.awt.*; import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -408,27 +410,72 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { */ public void test10004jbig2dependency() throws IOException { File pdf = new File("src/test/resources/pdf/10004.pdf"); + File image = new File("src/test/resources/pdf/10004-page1.png"); + //Pre-generate PDF rendering PDDocument pdDocument = PDDocument.load(pdf); PDFRenderer renderer = new PDFRenderer(pdDocument); + BufferedImage pageImage = renderer.renderImage(0, 1.5f); - for (int i = 0; i < pdDocument.getNumberOfPages(); i++) { - BufferedImage pageImage = renderer.renderImage(i, 1.5f); + //Get properly generated image + BufferedImage in = ImageIO.read(image); - File tempFile = File.createTempFile("10004-"+i, ".png"); - tempFile.createNewFile(); + Assert.assertTrue(compareImagePixels(in, pageImage)); + } + private final int ALPHA = 24; + private final int RED = 16; + private final int GREEN = 8; + private final int BLUE = 0; + + protected int[] getRGBA(BufferedImage img, int x, int y) + { + int[] color = new int[4]; + color[0]=getColor(img, x,y,RED); + color[1]=getColor(img, x,y,GREEN); + color[2]=getColor(img, x,y,BLUE); + color[3]=getColor(img, x,y,ALPHA); + return color; + } - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write( pageImage, "png", baos ); - baos.flush(); - byte[] imageInByte = baos.toByteArray(); - baos.close(); + protected static int getColor(BufferedImage img, int x, int y, int color) + { + int value=img.getRGB(x, y) >> color & 0xff; + return value; + } - Files.write(imageInByte, tempFile); + protected boolean compareImagePixels(BufferedImage biA, BufferedImage biB) { + try { + if (biA.getHeight() != biB.getHeight()){ + return false; + } + + if (biA.getWidth() != biB.getWidth()){ + return false; + } + + //loop on pixels to get their values + for (int i=0;i<biA.getWidth();i++) { + for (int j=0;j<biA.getHeight();j++){ + int[] colorA = getRGBA(biA,i,j); + int[] colorB = getRGBA(biB,i,j); + + for (int k=0; k<4; k++) { + if (colorA[k] != colorB[k]){ + log.debug("Difference at pixel " + i+ ","+j+" channel " + k); + return false; + } + } + } + } + return true; + } catch (Exception e) { + log.debug("Failed to compare image files ..."); + return false; } } + // @Test // public void testSendPdfBlanc() { // testSendEmail(""); @@ -460,4 +507,32 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { // e.printStackTrace(); // } // } + + /** + * Helper method to generate image for each page of a pdf file + * + * @throws IOException + */ + public void generateImageForEachPage() throws IOException { + File pdf = new File("src/test/resources/pdf/10004.pdf"); + + //Pre-generate PDF rendering + PDDocument pdDocument = PDDocument.load(pdf); + PDFRenderer renderer = new PDFRenderer(pdDocument); + + for (int i = 0; i < pdDocument.getNumberOfPages(); i++) { + BufferedImage pageImage = renderer.renderImage(0, 1.5f); + File tempFile = File.createTempFile("10004-"+0, ".png"); + tempFile.createNewFile(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write( pageImage, "png", baos ); + baos.flush(); + byte[] imageInByte = baos.toByteArray(); + baos.close(); + + Files.write(imageInByte, tempFile); + } + + } } diff --git a/faxtomail-service/src/test/resources/pdf/10004-page1.png b/faxtomail-service/src/test/resources/pdf/10004-page1.png new file mode 100644 index 00000000..ace15205 Binary files /dev/null and b/faxtomail-service/src/test/resources/pdf/10004-page1.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.