VisualRegressionCheckConsumer.java
package io.github.giulong.spectrum.utils.events.html_report;
import java.nio.file.Files;
import java.nio.file.Path;
import com.fasterxml.jackson.annotation.JsonView;
import io.github.giulong.spectrum.internals.jackson.views.Views.Internal;
import io.github.giulong.spectrum.pojos.events.Event;
import io.github.giulong.spectrum.utils.visual_regression.ImageDiff.Result;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@JsonView(Internal.class)
public class VisualRegressionCheckConsumer extends VisualRegressionConsumer {
@Override
protected boolean shouldAccept(final Event event) {
return super.shouldAccept(event) && Files.exists(referencePath) && !shouldOverrideSnapshots();
}
@Override
public void accept(final Event event) {
runChecksOn(event);
if (fileUtils.compare(referencePath, screenshot)) {
log.debug("Screenshot matches with its reference {}", referencePath);
addScreenshot(referencePath);
return;
}
final Path failedScreenshotPath = regressionPath.resolve(fileUtils.getFailedScreenshotNameFrom(testData));
addScreenshot(failedScreenshotPath);
final Result result = visualRegression.getDiff().buildBetween(referencePath, failedScreenshotPath, regressionPath, fileUtils.getScreenshotsDiffNameFrom(testData));
if (!result.isRegressionConfirmed()) {
log.debug("ImageDiff doesn't confirm the regression for {}. Returning.", referencePath);
return;
}
final String visualRegressionTag = htmlUtils.buildVisualRegressionTagFor(testData.getFrameNumber(), testData, fileUtils.readBytesOf(referencePath), screenshot, result);
log.error("Visual regression: screenshot not matching with its reference {}", referencePath);
testData.registerFailedVisualRegression();
currentNode.fail(visualRegressionTag);
if (visualRegression.isFailFast()) {
log.error("Failing fast due to first visual regression found!");
throw testData.getTestFailedException();
}
}
}