diff --git a/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java b/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java index 270ac8712..cfe01d81f 100644 --- a/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java +++ b/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java @@ -22,13 +22,19 @@ /** * Exhaustiveness guard: every {@link ShapeOutline} permit must render through - * both outline-consuming surfaces — the shape-container clip path and - * the inline-shape run — without throwing. Each surface dispatches on the - * outline kind with an {@code instanceof} chain that ends in an - * {@code IllegalStateException}; this test reflects over - * {@code getPermittedSubclasses()} so the next permit added to the sealed type - * cannot silently miss a render branch (the lesson from the + * all three outline-consuming surfaces — the shape-container outline + * fill/stroke, the shape-container clip path, and the inline-shape run — + * without throwing. Each surface dispatches on the outline kind with an + * {@code instanceof} chain that ends in an {@code IllegalStateException}; this + * test reflects over {@code getPermittedSubclasses()} so the next permit added + * to the sealed type cannot silently miss a render branch (the lesson from the * {@code ShapeOutline.Path} clipper, where the inline-shape switch was missed). + * + *
The fill surface is isolated with {@link ClipPolicy#OVERFLOW_VISIBLE}: the + * clip test exercises {@code ShapeContainerDefinition}'s fill-geometry chain + * transitively (the outline fragment is emitted whether or not the container + * clips), but a dedicated fill-only case keeps that branch covered if the clip + * surface ever changes.
*/ class ShapeOutlineRenderCoverageTest { @@ -51,10 +57,35 @@ void everyPermittedOutlineHasARepresentative() { Set