P2: Android parity gallery — real-screen captures (partial, 17/40 surfaces)

Replaces the synthetic theme-showcase ScreenshotTests with real screens
rendered against FixtureDataManager.empty() / .populated() via
LocalDataManager. GallerySurfaces.kt manifest declares 40 screens.

Landed: 68 goldens covering 17 surfaces (login, register, password-reset
chain, 10 onboarding screens, home, residences-list).

Missing: 23 detail/edit screens that need a specific fixture model passed
via GallerySurfaces.kt — tracked as follow-up in docs/parity-gallery.md.
Non-blocking: these render silently as blank and don't fail the suite.

Android total: 2.5 MB, avg 41 KB, max 113 KB — well under the 150 KB
per-file budget enforced by the CI size gate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey T
2026-04-18 23:45:12 -05:00
parent 3bac38449c
commit 6cc5295db8
110 changed files with 470 additions and 453 deletions

View File

@@ -223,11 +223,21 @@ compose.desktop {
}
}
// Roborazzi screenshot-regression plugin (P8). Pin the golden-image
// output directory inside the test source set so goldens live in git
// alongside the tests themselves. Anything under build/ is gitignored
// and gets blown away by `gradle clean` — not where committed goldens
// belong.
// Roborazzi screenshot-regression plugin (parity gallery, P2). Pin the
// golden-image output directory inside the test source set so goldens live
// in git alongside the tests themselves. Anything under build/ is
// gitignored and gets blown away by `gradle clean` — not where committed
// goldens belong.
//
// NOTE on path mismatch: `captureRoboImage(filePath = ...)` in
// ScreenshotTests.kt takes a *relative path* resolved against the Gradle
// test task's working directory (`composeApp/`). We intentionally point
// that same path at `src/androidUnitTest/roborazzi/...` — and configure
// the plugin extension below to match — so record and verify read from
// and write to the exact same committed-golden location. Any other
// arrangement results in the "original file was not found" error because
// the plugin doesn't currently auto-copy between `build/outputs/roborazzi`
// and the extension outputDir for the KMM Android target.
roborazzi {
outputDir.set(layout.projectDirectory.dir("src/androidUnitTest/roborazzi"))
}