Add comprehensive testing infrastructure: visual snapshots, unit, property, and theme tests

Introduces a multi-layered testing strategy for the libcosmic widget toolkit:

- Visual snapshot testing: Renders widgets via tiny-skia software renderer and
  compares pixel output against reference PNGs. Generates diff images on failure.
  Covers containers, dividers, text styles, progress bars, and layouts.

- Widget unit tests: Thorough behavioral tests for segmented button model
  (selection, ordering, data storage, enable/disable, closable, indent),
  calendar model (month navigation, year wrapping, date selection, grid layout),
  spin button (clamping, increment/decrement, float support), and color picker.

- Property-based tests (proptest): Randomized input testing for spin button
  bounds invariants, calendar first-day-of-week correctness, segmented model
  length/clear/toggle invariants, and theme spacing monotonicity.

- Theme consistency tests: Validates all four theme variants (dark, light,
  high-contrast dark/light) have valid spacing, corner radii ordering,
  non-zero-alpha colors, visible text-on-background, and RON round-trip
  serialization.

- Expanded inline tests: 16 new spin_button unit tests covering increment,
  decrement, clamping, float types, and constructor value bounds.

- CI integration: New visual-tests job runs snapshot, theme, property, and
  widget tests with artifact upload on failure for snapshot diffs.

https://claude.ai/code/session_01P3WLXMif9wmNXbWDo5FhRQ
This commit is contained in:
Claude 2026-02-18 01:23:14 +00:00
parent 3e78eb2381
commit d25a51bd32
No known key found for this signature in database
17 changed files with 1788 additions and 2 deletions

View file

@ -70,6 +70,56 @@ jobs:
env:
RUST_BACKTRACE: full
visual-tests:
needs:
- format
runs-on: ubuntu-22.04
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- name: Get date for registry cache
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: Cargo registry cache
uses: actions/cache@v3
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git
key: ${{ runner.os }}-cargo-registry-visual-${{ steps.date.outputs.date }}
restore-keys: ${{ runner.os }}-cargo-registry-visual-
- name: System dependencies
run: sudo apt-get update; sudo apt-get install -y libxkbcommon-dev libwayland-dev
- name: Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Run visual snapshot tests
run: cargo test --no-default-features --test visual_tests
env:
RUST_BACKTRACE: full
- name: Run theme consistency tests
run: cargo test --no-default-features --test theme_tests
env:
RUST_BACKTRACE: full
- name: Run property-based tests
run: cargo test --no-default-features --test property_tests
env:
RUST_BACKTRACE: full
- name: Run widget unit tests
run: cargo test --no-default-features --test widget_unit_tests
env:
RUST_BACKTRACE: full
- name: Upload snapshot artifacts on failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: snapshot-diffs
path: |
tests/snapshots/*.actual.png
tests/snapshots/*.diff.png
examples:
needs:
- format