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>
This commit is contained in:
36
README.md
Normal file
36
README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# lib-core.crafting-display-test
|
||||
|
||||
Test module for `lib-core.crafting-display`. Runs 8 assertions headless
|
||||
via `engine.test.*` (TAP output).
|
||||
|
||||
**Version:** 0.1.0
|
||||
**Lib-ID:** lib-core.crafting-display-test
|
||||
**Role:** test
|
||||
**Requires:** lib-core.crafting-display v0.1.0, lib-core.crafting v0.1.0, lib-core.panel v0.1.1, lib-core.inventory-list v0.1.0, lib-core.composition v0.3.0
|
||||
|
||||
All transitive deps are declared directly per engine's per-module
|
||||
non-transitive resolver.
|
||||
|
||||
## Running
|
||||
|
||||
```bash
|
||||
export PATH="/c/msys64/mingw64/bin:$PATH"
|
||||
cd ~/Projects/Sporel/sporel-engine
|
||||
SPOREL_LOG_STDERR=1 \
|
||||
./build/Sporel.exe \
|
||||
--test-libs=lib-core.crafting-display-test \
|
||||
--libs-dir=/c/Games/Sporel/libs 2>&1 | tail -15
|
||||
```
|
||||
|
||||
Expected: `pass=8 fail=0`.
|
||||
|
||||
## Assertions
|
||||
|
||||
1. `create(container, opts)` returns widget_def with `render`, `handle_input`, and correct `title`
|
||||
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 `_test_get_rows`
|
||||
7. Per-row availability flag matches `can_craft.ok` (true for satisfied inputs, false otherwise)
|
||||
8. Resolver overrides (`set_icon_resolver` / `set_label_resolver` / `set_summary_resolver`) actually take effect
|
||||
Reference in New Issue
Block a user