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
* wip: update to use cosmic-advanced-text
* use cosmic-advanced-text branch of iced
* fix: line height and spacing for segmented button and update to get svg fix
* fix: spin button styling & spacing
* update iced to fix segmented button border radius
* feat: example improvements
* feat: helper for loading fonts
* feat: add focus style to button
* fix: slider height and iced fixed
* feat: hash icon width and height
* cleanup
* update ci
* refactor: always use lazy feature of iced
* update iced
* update iced
* cleanup & update iced
* update iced: new slider & tiny-skia quad updates
* update iced: fixes for tiny-skia quad rendering with edge case border radius
* re-export iced_runtime & iced_widget
* merge master
* udpate iced
* update iced
* update iced
* update iced
* fix: make rectangle_tracker subscription only return update if there is some
* feat: derive macro for loading a cosmic-config
* feat (cosmic-config): iced subscription
* fix (example): update to rectangle tracker subscription
* fix (cosmic-config)
* refactor(cosmic-config-derive): add support for types with generic parameters
* fix (cosmic-config): feature gate updates for subscription helpers
* feat: support for custom & system themes + move cosmic-theme to libcosmic
* feat: sorta hacky way of creating header bars for libcosmic + update iced to get support for resizable windows in iced-sctk
* update iced
* update and reexport sctk
* fix: applet border radius
* feat (cosmic-theme): add id and name methods
* fix(cosmic-theme): reexport palette from cosmic-theme
* fix(cosmic-config-derive): allow use with reexported cosmic-config
* feat: update iced with fix and refactor applet env vars
* update iced