From 303d607a4c8dd45d120398499d7c25d4239d67de Mon Sep 17 00:00:00 2001
From: DemchaAV
Each baseline lives at {@code src/test/resources/visual-baselines/<name>-page-N.png}. - * In the default mode the harness renders the supplied PDF, converts each page - * to a {@link BufferedImage} via {@link PdfRenderBridge}, and compares against - * the baseline using {@link ImageDiff}. A failing comparison writes the actual - * render and the diff image next to the baseline for inspection.
+ *The default baseline directory is {@code src/test/resources/visual-baselines} + * (override with {@link #baselineRoot(Path)}); each page is stored as + * {@code <name>-page-N.png}. In the default mode the harness renders the + * supplied PDF, converts each page to a {@link BufferedImage} with PDFBox's + * {@link PDFRenderer}, and compares against the baseline using {@link ImageDiff}. + * A failing comparison writes the actual render and the diff image next to the + * baseline for inspection.
* *To re-bless baselines, run the test with the system property * {@code -Dgraphcompose.visual.approve=true} (or environment variable @@ -29,6 +36,7 @@ * assertion.
* * @author Artem Demchyshyn + * @since 1.6.9 */ public final class PdfVisualRegression { @@ -94,8 +102,12 @@ public PdfVisualRegression renderScale(float renderScale) { * * @param perPixelTolerance tolerance per channel * @return updated harness + * @throws IllegalArgumentException if {@code perPixelTolerance} is outside {@code 0..255} */ public PdfVisualRegression perPixelTolerance(int perPixelTolerance) { + if (perPixelTolerance < 0 || perPixelTolerance > 255) { + throw new IllegalArgumentException("perPixelTolerance must be 0..255, got " + perPixelTolerance); + } return new PdfVisualRegression(baselineRoot, renderScale, perPixelTolerance, mismatchedPixelBudget); } @@ -176,9 +188,10 @@ public void assertMatchesBaseline(String baselineName, byte[] pdfBytes) throws I public ListOwnership: Owned by the testing support surface and intended for consumer regression tests.
+ *Extension rules: Extend with diff and render-harness utilities only; runtime engine code must not depend on this package.
+ * + * @since 1.6.9 + */ +package com.demcha.compose.testing.visual; diff --git a/src/test/java/com/demcha/compose/document/templates/coverletter/presets/PresetVisualParityTest.java b/src/test/java/com/demcha/compose/document/templates/coverletter/presets/PresetVisualParityTest.java index 7b3fda56..777a8c09 100644 --- a/src/test/java/com/demcha/compose/document/templates/coverletter/presets/PresetVisualParityTest.java +++ b/src/test/java/com/demcha/compose/document/templates/coverletter/presets/PresetVisualParityTest.java @@ -7,7 +7,7 @@ import com.demcha.compose.document.templates.coverletter.spec.CoverLetterHeader; import com.demcha.compose.document.templates.coverletter.spec.CoverLetterSpec; import com.demcha.compose.document.theme.BusinessTheme; -import com.demcha.testing.visual.PdfVisualRegression; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/src/test/java/com/demcha/compose/document/templates/coverletter/v2/presets/CoverLetterV2VisualParityTest.java b/src/test/java/com/demcha/compose/document/templates/coverletter/v2/presets/CoverLetterV2VisualParityTest.java index c61ba18c..b8cd501d 100644 --- a/src/test/java/com/demcha/compose/document/templates/coverletter/v2/presets/CoverLetterV2VisualParityTest.java +++ b/src/test/java/com/demcha/compose/document/templates/coverletter/v2/presets/CoverLetterV2VisualParityTest.java @@ -6,7 +6,7 @@ import com.demcha.compose.document.templates.api.DocumentTemplate; import com.demcha.compose.document.templates.coverletter.v2.data.CoverLetterDocument; import com.demcha.compose.document.templates.cv.v2.data.CvIdentity; -import com.demcha.testing.visual.PdfVisualRegression; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/PresetVisualParityTest.java b/src/test/java/com/demcha/compose/document/templates/cv/presets/PresetVisualParityTest.java index 396b5abe..30d5bbde 100644 --- a/src/test/java/com/demcha/compose/document/templates/cv/presets/PresetVisualParityTest.java +++ b/src/test/java/com/demcha/compose/document/templates/cv/presets/PresetVisualParityTest.java @@ -13,7 +13,7 @@ import com.demcha.compose.document.templates.cv.spec.CvModule; import com.demcha.compose.document.templates.cv.spec.CvSpec; import com.demcha.compose.document.theme.BusinessTheme; -import com.demcha.testing.visual.PdfVisualRegression; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/src/test/java/com/demcha/compose/document/templates/cv/v2/presets/CvV2VisualParityTest.java b/src/test/java/com/demcha/compose/document/templates/cv/v2/presets/CvV2VisualParityTest.java index 0b6220be..6e965866 100644 --- a/src/test/java/com/demcha/compose/document/templates/cv/v2/presets/CvV2VisualParityTest.java +++ b/src/test/java/com/demcha/compose/document/templates/cv/v2/presets/CvV2VisualParityTest.java @@ -12,7 +12,7 @@ import com.demcha.compose.document.templates.cv.v2.data.RowStyle; import com.demcha.compose.document.templates.cv.v2.data.RowsSection; import com.demcha.compose.document.templates.cv.v2.data.SkillsSection; -import com.demcha.testing.visual.PdfVisualRegression; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/src/test/java/com/demcha/testing/visual/PdfVisualRegressionTest.java b/src/test/java/com/demcha/testing/visual/PdfVisualRegressionTest.java index cd41843b..8487ca5d 100644 --- a/src/test/java/com/demcha/testing/visual/PdfVisualRegressionTest.java +++ b/src/test/java/com/demcha/testing/visual/PdfVisualRegressionTest.java @@ -3,6 +3,8 @@ import com.demcha.compose.GraphCompose; import com.demcha.compose.document.api.DocumentSession; import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.testing.visual.ImageDiff; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -71,6 +73,16 @@ void differentSizesAreReportedAsMaxDelta() { assertThat(diff.diffImage()).isNull(); } + @Test + void perPixelToleranceOutsideChannelRangeIsRejected() { + assertThatThrownBy(() -> PdfVisualRegression.standard().perPixelTolerance(-1)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("perPixelTolerance"); + assertThatThrownBy(() -> PdfVisualRegression.standard().perPixelTolerance(256)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("perPixelTolerance"); + } + @Test void renderingTheSameDocumentTwiceProducesPixelIdenticalPages() throws Exception { byte[] first = renderSampleDocument(); diff --git a/src/test/java/com/demcha/testing/visual/ShapeContainerVisualRegressionTest.java b/src/test/java/com/demcha/testing/visual/ShapeContainerVisualRegressionTest.java index 5e230abb..d3f125d4 100644 --- a/src/test/java/com/demcha/testing/visual/ShapeContainerVisualRegressionTest.java +++ b/src/test/java/com/demcha/testing/visual/ShapeContainerVisualRegressionTest.java @@ -13,6 +13,7 @@ import com.demcha.compose.document.style.DocumentTextDecoration; import com.demcha.compose.document.style.DocumentTextStyle; import com.demcha.compose.font.FontName; +import com.demcha.compose.testing.visual.PdfVisualRegression; import org.junit.jupiter.api.Test; class ShapeContainerVisualRegressionTest { diff --git a/src/test/java/com/demcha/testing/visual/TableRowSpanDemoTest.java b/src/test/java/com/demcha/testing/visual/TableRowSpanDemoTest.java index 716b0522..fcf8e200 100644 --- a/src/test/java/com/demcha/testing/visual/TableRowSpanDemoTest.java +++ b/src/test/java/com/demcha/testing/visual/TableRowSpanDemoTest.java @@ -14,6 +14,7 @@ import com.demcha.compose.document.table.DocumentTableColumn; import com.demcha.compose.document.table.DocumentTableStyle; import com.demcha.compose.engine.components.content.table.TableResolvedCell; +import com.demcha.compose.testing.visual.PdfVisualRegression; import com.demcha.testing.VisualTestOutputs; import org.junit.jupiter.api.Test;