package br.gov.frameworkdemoiselle.behave.regression.report.imagemagick.report; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import org.apache.commons.io.FilenameUtils; public class BrowserResultColumn { private String name; private String originalFileName; private String pngFileName; private String gifFileName; private BigDecimal expectedTotalPixels; private BigDecimal actualTotalPixels; private String consoleOutput; private ComparisonStrategy strategy; public BrowserResultColumn(String name, String originalFileName, String pngFileName, String gifFileName, BigDecimal expectedTotalPixels, BigDecimal actualTotalPixels, String consoleOutput, ComparisonStrategy strategy) { super(); this.name = name; this.originalFileName = originalFileName; this.pngFileName = pngFileName; this.gifFileName = gifFileName; this.expectedTotalPixels = expectedTotalPixels; this.actualTotalPixels = actualTotalPixels; this.consoleOutput = consoleOutput; this.strategy = strategy; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOriginalFileName() { return originalFileName; } public String getOriginalFileNameReport() { return FilenameUtils.getName(originalFileName); } public void setOriginalFileName(String originalFileName) { this.originalFileName = originalFileName; } public String getPngFileName() { return pngFileName; } public String getPngFileNameReport() { return FilenameUtils.getName(pngFileName); } public void setPngFileName(String pngFileName) { this.pngFileName = pngFileName; } public String getGifFileName() { return gifFileName; } public String getGifFileNameReport() { return FilenameUtils.getName(gifFileName); } public void setGifFileName(String gifFileName) { this.gifFileName = gifFileName; } public BigDecimal getExpectedTotalPixels() { return expectedTotalPixels; } public void setExpectedTotalPixels(BigDecimal expectedTotalPixels) { this.expectedTotalPixels = expectedTotalPixels; } public BigDecimal getActualTotalPixels() { return actualTotalPixels; } public void setActualTotalPixels(BigDecimal actualTotalPixels) { this.actualTotalPixels = actualTotalPixels; } public BigDecimal getPercentageDeviation() throws IOException { String output = getFinalOutput(strategy, getConsoleOutput()); BigDecimal percentageDeviation; if (getExpectedTotalPixels().longValue() > getActualTotalPixels().longValue()) { percentageDeviation = calculatePercentageDeviation(getExpectedTotalPixels(), output); } else { percentageDeviation = calculatePercentageDeviation(getActualTotalPixels(), output); } return percentageDeviation; } private BigDecimal calculatePercentageDeviation(BigDecimal totalImagePixels, String output) throws IOException { BigDecimal percentageDeviation; try { BigDecimal pixelDifference = new BigDecimal(output); percentageDeviation = pixelDifference.divide(totalImagePixels, 4, RoundingMode.HALF_UP); } catch (Exception e) { percentageDeviation = BigDecimal.valueOf(-1); } return percentageDeviation.multiply(new BigDecimal(100)); } private String getFinalOutput(ComparisonStrategy strategy, String output) { if (strategy.equals(ComparisonStrategy.SUB_IMAGE)) { output = output.replace(output.substring(output.indexOf("@"), output.length()), "").trim(); } return output; } public BigDecimal getDiffPixels() { return actualTotalPixels.subtract(expectedTotalPixels); } public String getConsoleOutput() { return consoleOutput; } public void setConsoleOutput(String consoleOutput) { this.consoleOutput = consoleOutput; } }