Catalog/docs/image-generation-tests-plan.md
Maddo d76e133f18
Some checks failed
Build Windows Avalonia / build (push) Failing after 1m47s
Completely removed GDI
2026-05-28 20:27:05 +02:00

85 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
- 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.