diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-16 19:42:30 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-16 19:42:30 +0200 |
| commit | 0526541133e1d4cc2c4b7f291897734b120e7ebc (patch) | |
| tree | 022d8ef7c6d3b9e2600277c99e9c653cbddea2a8 | |
| parent | 9c8947ab8dea5709ea83992c14e663214a571833 (diff) | |
| download | conky-theme-udt-0526541133e1d4cc2c4b7f291897734b120e7ebc.tar.gz conky-theme-udt-0526541133e1d4cc2c4b7f291897734b120e7ebc.zip | |
test: make the layout assertion actually able to fail
The out-of-grid check iterated `G.layout or {}`. With layout unexported
that walks an empty table, so the block passed vacuously and the test
could never detect the very condition it existed to check. Confirmed by
unexporting layout and watching the suite still pass.
Drops the fallback and asserts the export first. Verified by mutation:
unexporting layout now fails with "dashboard.lua must export layout",
and moving the clock to col=5 fails with "layout entry out of columns",
so both paths have teeth.
The plan's Step 3 expected a failure that could not happen; it now says
what the failure looks like and warns that a pass there means the test
is broken rather than the code.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| -rw-r--r-- | docs/superpowers/plans/2026-09-16-conky-lua-dashboard.md | 14 | ||||
| -rw-r--r-- | test/test_layout.lua | 7 |
2 files changed, 18 insertions, 3 deletions
diff --git a/docs/superpowers/plans/2026-09-16-conky-lua-dashboard.md b/docs/superpowers/plans/2026-09-16-conky-lua-dashboard.md index a77c30b..c57bcbc 100644 --- a/docs/superpowers/plans/2026-09-16-conky-lua-dashboard.md +++ b/docs/superpowers/plans/2026-09-16-conky-lua-dashboard.md @@ -1134,7 +1134,12 @@ assert(math.abs(span.w - (a.w * 2 + G.GAP)) < 0.01, 'span must absorb the gap') -- The shipped layout must not place anything outside the declared grid, which -- is the mistake a user editing the table will actually make. -for _, e in ipairs(G.layout or {}) do +-- +-- No `or {}` fallback here: with one, an unexported layout makes ipairs walk an +-- empty table and the whole block passes vacuously, which is exactly the bug +-- this assertion is supposed to catch. +assert(G.layout, 'dashboard.lua must export layout') +for _, e in ipairs(G.layout) do assert(e.col >= 1 and e.col + (e.w or 1) - 1 <= G.COLS, 'layout entry out of columns: ' .. tostring(e.widget)) assert(e.row >= 1 and e.row + (e.h or 1) - 1 <= G.ROWS, @@ -1148,7 +1153,12 @@ print('test_layout: all assertions passed') Run: `cd ~/Programming/GIT/conky-theme-udt && lua test/test_layout.lua` -Expected: failure. The last block reads `G.layout`, which Step 1 did not export. +Expected: failure with `dashboard.lua must export layout`. The last block +asserts on `G.layout`, which Step 1 deliberately did not export. + +If this run PASSES, the test is broken, not the code: an `ipairs(G.layout or {})` +would walk an empty table and pass vacuously. Check the assertion is there +before continuing. - [ ] **Step 4: Export the layout too** diff --git a/test/test_layout.lua b/test/test_layout.lua index f3f47e3..976f78f 100644 --- a/test/test_layout.lua +++ b/test/test_layout.lua @@ -50,7 +50,12 @@ assert(math.abs(span.w - (a.w * 2 + G.GAP)) < 0.01, 'span must absorb the gap') -- The shipped layout must not place anything outside the declared grid, which -- is the mistake a user editing the table will actually make. -for _, e in ipairs(G.layout or {}) do +-- +-- No `or {}` fallback here: with one, an unexported layout makes ipairs walk an +-- empty table and the whole block passes vacuously, which is exactly the bug +-- this assertion is supposed to catch. +assert(G.layout, 'dashboard.lua must export layout') +for _, e in ipairs(G.layout) do assert(e.col >= 1 and e.col + (e.w or 1) - 1 <= G.COLS, 'layout entry out of columns: ' .. tostring(e.widget)) assert(e.row >= 1 and e.row + (e.h or 1) - 1 <= G.ROWS, |
