aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-18 14:09:35 -0500
committerCraig Jennings <c@cjennings.net>2026-07-18 14:09:35 -0500
commitd0a0c0e7714e63f410a4615fdf0a8f266b471d42 (patch)
tree3bca0e4484d60938e77ba2b7efc0d24781773140 /tests
parent0b596f1c3e98d57f23aee10931348aea39da727d (diff)
downloadarchsetup-d0a0c0e7714e63f410a4615fdf0a8f266b471d42.tar.gz
archsetup-d0a0c0e7714e63f410a4615fdf0a8f266b471d42.zip
feat(gallery): bring ten more controls to the extraction bar
rotarySelector, slideRule, rocker, transport, presetBank, dualKnob, encoder, keySwitch, crossfader, and thumbwheel get contract comments, dupre- prefixed CSS, and cached element refs. presetBank and dualKnob set() now clamp out-of-range input, with a probe check covering both. rotarySelector and keySwitch cap their inputs at the five- and three-stop plates they draw. The audit's contract count moves to 34/111.
Diffstat (limited to 'tests')
-rw-r--r--tests/gallery-probes/probe.mjs14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/gallery-probes/probe.mjs b/tests/gallery-probes/probe.mjs
index a242c41..e4696ad 100644
--- a/tests/gallery-probes/probe.mjs
+++ b/tests/gallery-probes/probe.mjs
@@ -1151,6 +1151,20 @@ try {
})()`);
ok('every card ID badge links to its own anchor', anchors === 'ok', anchors);
+ // Batch-3 set() hardening: out-of-range input cannot wedge an instrument.
+ // presetBank clamps; dualKnob clamps both spindles. Built on detached hosts
+ // so the gallery's own cards stay untouched.
+ const clamps = await evl(`(() => {
+ const pb = DUPRE.presetBank(document.createElement('div'));
+ pb.set(99); const hi = pb.get();
+ pb.set(-5); const lo = pb.get();
+ const dk = DUPRE.dualKnob(document.createElement('div'));
+ dk.set(500, -500); const [o, i] = dk.get();
+ return JSON.stringify({ hi, lo, o, i });
+ })()`);
+ ok('presetBank and dualKnob set() clamp out-of-range input',
+ clamps === JSON.stringify({ hi: 3, lo: 0, o: 100, i: 0 }), clamps);
+
// late exceptions from interactions
const errs2 = events.filter(e => e.method === 'Runtime.exceptionThrown');
ok('no exceptions after interaction', errs2.length === 0);