aboutsummaryrefslogtreecommitdiff
path: root/tests/gallery-probes/probe.mjs
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-18 09:51:55 -0500
committerCraig Jennings <c@cjennings.net>2026-07-18 09:51:55 -0500
commitb0db5e842d93564b1cb2e4b142ba0a0de1843fbd (patch)
treee1d8a0ccdfc07a1339d64f387200e7766bda28be /tests/gallery-probes/probe.mjs
parent3da976bd0287ebb632b0d8475f2e780d1b10e1b8 (diff)
downloadarchsetup-b0db5e842d93564b1cb2e4b142ba0a0de1843fbd.tar.gz
archsetup-b0db5e842d93564b1cb2e4b142ba0a0de1843fbd.zip
fix(gallery): split-flap defaults are paper cards, Helvetica, 100ms
The default skin is the white card with dark lettering, not white ink on black, and the default face is Helvetica. Both list first in their chip rows with the alternatives a click away. The base flap rate moves to 100ms. The probe pins all three defaults, and its cascade windows widen to match the slower base so worst-case travel keeps its margin.
Diffstat (limited to 'tests/gallery-probes/probe.mjs')
-rw-r--r--tests/gallery-probes/probe.mjs43
1 files changed, 22 insertions, 21 deletions
diff --git a/tests/gallery-probes/probe.mjs b/tests/gallery-probes/probe.mjs
index 051d575..e394316 100644
--- a/tests/gallery-probes/probe.mjs
+++ b/tests/gallery-probes/probe.mjs
@@ -890,7 +890,7 @@ try {
// anywhere, and every command cascades (there is deliberately no teleport
// path). setText is the deterministic seam; next() is random by design.
await evl(`document.querySelector('#card-N20').gw.setText('SYSTEM\\nVOLUME\\nSIGNAL')`);
- await sleep(5400);
+ await sleep(6500);
// Start a cascade and sample the displayed reading every 15ms until stable.
await evl(`(() => {
@@ -908,7 +908,7 @@ try {
window.__n20.anims++;
}, 15);
})()`);
- await sleep(5400);
+ await sleep(6500);
const n20 = await evl(`(() => {
clearInterval(window.__n20.timer);
const h = document.querySelector('#card-N20').gw;
@@ -938,7 +938,7 @@ try {
window.__n20r.timer = setInterval(() => window.__n20r.samples.push(h.reading()), 15);
h.setText('SIGNAL\\nRECORD\\nONLINE'); setTimeout(() => h.setText('RECORD\\nONLINE\\nSTEREO'), 180);
})()`);
- await sleep(5800);
+ await sleep(7000);
const n20b = await evl(`(() => {
clearInterval(window.__n20r.timer);
const h = document.querySelector('#card-N20').gw;
@@ -1000,44 +1000,45 @@ try {
const h = document.querySelector('#card-N20').gw;
if (typeof h.setStyle !== 'function' || !GW.splitFlap.STYLES || !GW.splitFlap.STYLES.skin) return 'no skin axis';
const skins = Object.keys(GW.splitFlap.STYLES.skin);
- if (skins[0] !== 'white') return 'white must list first, got: ' + skins.join(',');
+ if (skins[0] !== 'paper') return 'paper must list first, got: ' + skins.join(',');
if (!['dark','white','light','paper'].every(k => skins.includes(k))) return 'skins are: ' + skins.join(',');
const ink = () => getComputedStyle(document.querySelector('#card-N20 .fh')).color;
const lum = c => { const m = c.match(/[0-9]+/g).map(Number); return m[0] + m[1] + m[2]; };
- const white = ink(); // the card's default skin is white ink
- if (white !== 'rgb(255, 255, 255)') return 'default ink is not white: ' + white;
+ const paperDef = ink(); // the card's default skin is the white card, dark letters
+ if (lum(paperDef) >= 300) return 'default ink is not dark-on-paper: ' + paperDef;
+ if (!document.querySelector('#card-N20 .flap').classList.contains('flap-paper')) return 'default skin class is not paper';
+ h.setStyle('skin', 'white');
+ const white = ink();
+ if (white !== 'rgb(255, 255, 255)') return 'white skin ink is ' + white;
h.setStyle('skin', 'dark');
const cream = ink();
h.setStyle('skin', 'light');
const light = ink();
const gotClass = document.querySelector('#card-N20 .flap').classList.contains('flap-light');
h.setStyle('skin', 'paper');
- const paper = ink();
- const paperClass = document.querySelector('#card-N20 .flap').classList.contains('flap-paper');
- h.setStyle('skin', 'white');
const back = ink();
if (!gotClass) return 'light skin class missing';
- if (!paperClass) return 'paper skin class missing';
- if (!(lum(cream) > 400 && lum(cream) < 760 && lum(light) < 300 && lum(paper) < 300)) return 'inks wrong: ' + cream + ' / ' + light + ' / ' + paper;
- if (back !== white) return 'did not restore the white default: ' + back;
+ if (!(lum(cream) > 400 && lum(cream) < 760 && lum(light) < 300)) return 'inks wrong: ' + cream + ' / ' + light;
+ if (back !== paperDef) return 'did not restore the paper default: ' + back;
return 'ok';
})()`);
- ok('N20 skins: white default first, cream, ivory board, white board — all switch and restore', n20e === 'ok', n20e);
+ ok('N20 skins: paper default first, white ink, cream, ivory — all switch and restore', n20e === 'ok', n20e);
const n20fnt = await evl(`(() => {
const h = document.querySelector('#card-N20').gw;
if (!GW.splitFlap.STYLES.font) return 'no font axis';
const fam = () => getComputedStyle(document.querySelector('#card-N20 .fh')).fontFamily;
+ const helv = fam(); // the card's default face is Helvetica
+ if (!/helvetica/i.test(helv)) return 'default face is not helvetica: ' + helv;
+ h.setStyle('font', 'mono');
const mono = fam();
h.setStyle('font', 'helv');
- const helv = fam();
- h.setStyle('font', 'mono');
const back = fam();
- if (!/helvetica/i.test(helv)) return 'helv did not apply: ' + helv;
- if (!/berkeley|mono/i.test(mono) || back !== mono) return 'mono wrong or not restored: ' + mono + ' / ' + back;
+ if (!/berkeley|mono/i.test(mono) || /helvetica/i.test(mono)) return 'mono did not apply: ' + mono;
+ if (back !== helv) return 'did not restore the helv default: ' + back;
return 'ok';
})()`);
- ok('N20 font switches between Berkeley Mono and Helvetica', n20fnt === 'ok', n20fnt);
+ ok('N20 face: Helvetica default, Berkeley Mono one click away', n20fnt === 'ok', n20fnt);
const n20f = await evl(`(() => {
const chips = [...document.querySelectorAll('#card-N20 .famchips .fc, #card-N20 .famchips [title]')].map(c => c.title || c.textContent);
return chips.length ? chips.join(',') : 'no chips';
@@ -1058,7 +1059,7 @@ try {
const h = document.querySelector('#card-N20').gw;
if (typeof h.setFlapMs !== 'function' || typeof h.flapMs !== 'function') return 'no speed api';
const before = h.flapMs();
- if (before !== 85) return 'default flap rate is ' + before + ', want 85';
+ if (before !== 100) return 'default flap rate is ' + before + ', want 100';
h.setFlapMs(120);
if (h.flapMs() !== 120) return 'setFlapMs did not take: ' + h.flapMs();
const slider = document.querySelector('#card-N20 input[type=range]');
@@ -1083,7 +1084,7 @@ try {
}, 50);
h.set(0);
})()`);
- await sleep(9000);
+ await sleep(10500);
const dwell = await evl(`(() => {
const d = window.__n20dwell; clearInterval(d.timer);
return { settleAt: d.settleAt, delta: d.changeAt ? d.changeAt - d.settleAt : -1 };
@@ -1102,7 +1103,7 @@ try {
if (new Set(skins).size !== 4) return 'skin previews not distinct: ' + skins.join(' ');
if (chips.slice(0, 4).some(c => getComputedStyle(c, '::after').content === 'none')) return 'skin chip has no ink letter';
const fams = chips.slice(4).map(c => getComputedStyle(c, '::after').fontFamily);
- if (!/helvetica/i.test(fams[1]) || fams[0] === fams[1]) return 'font previews wrong: ' + fams.join(' vs ');
+ if (!fams.some(f => /helvetica/i.test(f)) || fams[0] === fams[1]) return 'font previews wrong: ' + fams.join(' vs ');
const size = parseFloat(getComputedStyle(chips[0]).width);
return size >= 15 ? 'ok' : 'chips too small to read: ' + size;
})()`);