Commit Graph

2 Commits

Author SHA1 Message Date
Calic
b88842161c test: add render-contract assertion
Adds a 9th assertion that drives widget.render(ctx) with a stub ctx
shaped per lib-core.panel's widget-lifecycle contract (bounds, theme
with packed-RGBA colours and font_size_body, is_focused) and verifies
the widget populates _render_rows correctly. Catches future drift
between this widget and the panel API.

engine.render.draw_text is registered but errors in test_mode (no
OpenGL context); the assertion stubs it for the duration of the
render call so the layout pass runs to completion without coupling
to the rendering backend.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-14 13:36:36 +02:00
Calic
0154f54fde feat: lib-core.crafting-display-test v0.1.0 — 8 TAP asserts
Test suite for lib-core.crafting-display v0.1.0. Covers:

  1. create returns widget_def with render, handle_input, title set
     from opts.
  2. register_action + unregister_action round-trip: action-count
     goes 0 -> 1 -> 0.
  3. Duplicate action label -> Loud-Error matching
     'crafting-display.register_action.*duplicate'.
  4. Non-function callback -> Loud-Error matching
     'crafting-display.register_action.*callback'.
  5. Default action-set is empty directly after create.
  6. Rows filtered via is_known: only known recipes appear in the
     per-frame row-list (one recipe is_known=false is hidden).
  7. Per-row availability flag matches can_craft.ok: container with
     1x rock makes a recipe needing rock available=true and a
     recipe needing missing stick available=false.
  8. Resolver overrides (set_icon_resolver / set_label_resolver /
     set_summary_resolver) actually take effect — backdoors return
     the overridden values.

Uses engine.test.assert with string.find for pattern matching
loud-error messages (engine.test has no assert_match helper).
Per-test isolation via crafting._test_clear_all; composition
templates are defined once at module-scope under namespace
craft_display_test.* (composition has no clear-all hook).

Depends on lib-core.crafting-display 0.1.0, lib-core.crafting
0.1.0, lib-core.panel 0.1.1, lib-core.inventory-list 0.1.0,
lib-core.composition 0.3.0 — all five declared directly per
engine's per-module non-transitive resolver.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-14 12:34:42 +02:00