aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/gallery-probes/probe.mjs35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/gallery-probes/probe.mjs b/tests/gallery-probes/probe.mjs
index ed09d8d..16bff17 100644
--- a/tests/gallery-probes/probe.mjs
+++ b/tests/gallery-probes/probe.mjs
@@ -1240,6 +1240,41 @@ try {
ok('entryKeypad buffers digits only, caps at 6, clears and commits',
b5dom === JSON.stringify({ buf3: '123', stray: '123', cap: '123456', clr: '', commit: '' }), b5dom);
+ // batch-6 domain gates on detached hosts: fourWayToggle falls back to C on a
+ // bad initial position and ignores invalid quadrants in set(), camTimer
+ // clamps set() to the ring (12 steps → 0..11, fractions floor), pinMatrix
+ // drops initial pins that name no intersection.
+ const clamps6 = await evl(`(() => {
+ const fw = DUPRE.fourWayToggle(document.createElement('div'), { position: 'Z' });
+ const fwDef = fw.get(); fw.set('B'); const fwB = fw.get(); fw.set('Q'); const fwQ = fw.get();
+ fw.set('toString'); const fwProto = fw.get();
+ const ct = DUPRE.camTimer(document.createElement('div'), { position: 99 });
+ const ctHi = ct.get(); ct.set(-5); const ctLo = ct.get(); ct.set(2.7); const ctInt = ct.get();
+ const pm = DUPRE.pinMatrix(document.createElement('div'), { pins: ['OSC1>VCF', 'BAD>KEY', 'LFO>NOPE', 'OSC2>VCA>X'] });
+ return JSON.stringify({ fwDef, fwB, fwQ, fwProto, ctHi, ctLo, ctInt, pmN: pm.get().length });
+ })()`);
+ ok('batch-6 domain gates: fourWayToggle quadrant, camTimer step clamp, pinMatrix pin filter',
+ clamps6 === JSON.stringify({ fwDef: 'C', fwB: 'B', fwQ: 'B', fwProto: 'B', ctHi: 11, ctLo: 0, ctInt: 2, pmN: 1 }), clamps6);
+
+ // dsky verb/noun grammar through the prefixed DOM (catches rename stragglers):
+ // VERB arms exactly one hot window, V16 N36 commits PROG 16 and disarms,
+ // V35 lights all six status lamps.
+ const b6dom = await evl(`(() => {
+ const d = DUPRE.dsky(document.createElement('div'));
+ const K = {};
+ d.el.querySelectorAll('.dupre-dsky-pad .dupre-key').forEach(b => K[b.textContent] = b);
+ K.VERB.click();
+ const hot1 = d.el.querySelectorAll('.dupre-dsky-win.dupre-hot').length;
+ K['1'].click(); K['6'].click(); K.NOUN.click(); K['3'].click(); K['6'].click(); K.ENTR.click();
+ const prog = d.get().prog;
+ const hot0 = d.el.querySelectorAll('.dupre-dsky-win.dupre-hot').length;
+ K.VERB.click(); K['3'].click(); K['5'].click(); K.ENTR.click();
+ const lit = d.el.querySelectorAll('.dupre-dsky-sl.dupre-on').length;
+ return JSON.stringify({ hot1, prog, hot0, lit });
+ })()`);
+ ok('dsky grammar drives prefixed DOM: hot window, V16 N36 sets PROG, V35 lights all lamps',
+ b6dom === JSON.stringify({ hot1: 1, prog: '16', hot0: 0, lit: 6 }), b6dom);
+
// late exceptions from interactions
const errs2 = events.filter(e => e.method === 'Runtime.exceptionThrown');
ok('no exceptions after interaction', errs2.length === 0);