Catalog/docs/image-generation-tests-plan.md

85 lines
4.5 KiB
Markdown
Raw Permalink Normal View History

# Image generation test plan — ImageSharp-only (multiplatform)
Goal
-----
Create an automated, cross-platform test project that validates `ImageCreatorImageSharp` behavior by generating synthetic input images and pixel-inspecting outputs produced by the library.
Decisions
---------
- Test only `ImageCreatorImageSharp` (multiplatform).
- Test project targets `net10.0` (not Windows-only) and uses SixLabors.ImageSharp for both generation and verification; avoid `System.Drawing.Common` in tests.
- Inputs are programmatically generated images (no checked-in large binaries).
- Verification uses pixel inspection (sample regions, color averages, non-background pixel counts).
Project
-------
- Name: `MaddoShared.ImageSharpTests` (folder: `MaddoShared.ImageSharpTests/`)
- TargetFramework: `net10.0` (no Windows-only flags)
- Package references:
- `MSTest.TestFramework` / `MSTest.TestAdapter` / `Microsoft.NET.Test.Sdk`
- `FluentAssertions`
- `Moq` (if needed for loggers)
- `SixLabors.ImageSharp` and `SixLabors.ImageSharp.Drawing` (for image creation and pixel inspection)
- `Microsoft.Extensions.Logging.Abstractions` (lightweight logging)
- ProjectReference: `../MaddoShared/MaddoShared.csproj`
Helpers (tests)
----------------
- `TempWorkspace` — creates temporary `Source` and `Dest` folders, cleans up on dispose.
- `TestImageFactory` — creates synthetic JPEG/PNG inputs and in-memory logo PNG bytes. Also can write EXIF orientation values.
- `PixelInspector` — loads output using ImageSharp and exposes:
- `CountNonBackgroundPixels(path, Rectangle region, Rgba32 background, int tolerance)`
- `SampleAverageColor(path, Rectangle region)`
- Region helpers: top/bottom/left/right/center/quadrant rectangles for given image sizes
- `CreatorFactory` — builds `PicSettings` defaults and `ImageCreatorImageSharp` instances.
Test cases (high-level)
-----------------------
1. Image resizing: verify big and small output dimensions respect settings.
2. Text positioning: for `Posizione` = ALTO/CENTRO/BASSO and `Allineamento` = SINISTRA/CENTRO/DESTRA assert text pixels appear in expected regions.
3. Text content: baseline (empty) vs non-empty comparisons to ensure text changes output; EXIF-vertical photo selects `TestoFirmaV`.
4. Logo positioning: use a solid-color logo (e.g., pure red PNG) and verify red pixels appear in the expected quadrant for combinations of `LogoPosizioneH` × `LogoPosizioneV` and with margins (absolute and percentage).
5. Logo features: opacity (logo color blending) and color-key transparency.
6. EXIF orientation: ensure rotation is applied and output contains no EXIF orientation tag.
Verification approach
---------------------
- For text: compare non-background pixel count in the target band vs opposite band (thresholded) to avoid brittle exact glyph placement checks.
- For logo: sample the quadrant where the logo should be; count logo-colored pixels and assert above threshold.
- For opacity: sample average color in logo region and assert it is blended when opacity <100%.
Scope boundaries
----------------
- In scope: `ImageCreatorImageSharp` behavior: resize, EXIF rotation, text presence/position, logo position/opactiy, thumbnails.
2026-05-28 20:27:05 +02:00
- Out of scope: OCR verification of exact text glyphs, font-subpixel metrics, performance testing.
Implementation notes
--------------------
- Keep tests deterministic by creating solid-color inputs and simple logos.
- Use modest image sizes (e.g., 800×600) so tests run fast.
- Carefully choose thresholds for pixel-count assertions to be robust across fonts and rendering differences.
Run & validate
---------------
- Build: `dotnet build MaddoShared.ImageSharpTests`
- Test: `dotnet test MaddoShared.ImageSharpTests`
Files to add
------------
- `MaddoShared.ImageSharpTests/MaddoShared.ImageSharpTests.csproj`
- `MaddoShared.ImageSharpTests/Helpers/TempWorkspace.cs`
- `MaddoShared.ImageSharpTests/Helpers/TestImageFactory.cs`
- `MaddoShared.ImageSharpTests/Helpers/PixelInspector.cs`
- `MaddoShared.ImageSharpTests/Helpers/CreatorFactory.cs`
- `MaddoShared.ImageSharpTests/Tests/ImageResizingTests.cs`
- `MaddoShared.ImageSharpTests/Tests/TextPositioningTests.cs`
- `MaddoShared.ImageSharpTests/Tests/LogoPositioningTests.cs`
- `MaddoShared.ImageSharpTests/Tests/ExifOrientationTests.cs`
- `docs/image-generation-tests-plan.md` (this file)
Next steps
----------
1. Create the `MaddoShared.ImageSharpTests` project and add the helper files.
2. Implement the first set of tests (resizing + a simple text presence test) to validate the testing harness.
3. Iterate thresholds and add remaining tests.