feat: add interactive HTML export and verification
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
// Interactive smoke test: verify click -> navigate flow works.
|
||||
const fs = require('fs');
|
||||
const html = fs.readFileSync(process.argv[2], 'utf-8');
|
||||
const m = html.match(/<script>\s*(window\.QUX_MODEL.*?)<\/script>/s);
|
||||
if (!m) { console.error('no engine'); process.exit(1); }
|
||||
|
||||
function makeEl() {
|
||||
const el = {
|
||||
style: {}, dataset: {}, children: [], _listeners: {},
|
||||
classList: { add() {}, remove() {} },
|
||||
appendChild(c) { el.children.push(c); return c; },
|
||||
addEventListener(t, fn) { (el._listeners[t] = el._listeners[t] || []).push(fn); },
|
||||
set textContent(v) { el._text = v; }, get textContent() { return el._text || ''; },
|
||||
set innerHTML(v) { el._html = v; }, get innerHTML() { return el._html || ''; },
|
||||
};
|
||||
return el;
|
||||
}
|
||||
const stage = makeEl();
|
||||
const nameEl = makeEl();
|
||||
global.window = { innerWidth: 1920, innerHeight: 1080, addEventListener() {} };
|
||||
global.document = {
|
||||
getElementById(id) { return id === 'stage' ? stage : (id === 'screenName' ? nameEl : makeEl()); },
|
||||
createElement() { return makeEl(); },
|
||||
};
|
||||
|
||||
eval(m[1]);
|
||||
|
||||
const firstScreenName = nameEl._text;
|
||||
const wired = [];
|
||||
(function collect(el) {
|
||||
if (el._listeners.click && el._listeners.click.length) wired.push(el);
|
||||
el.children.forEach(collect);
|
||||
})(stage);
|
||||
|
||||
console.log('start screen:', firstScreenName);
|
||||
console.log('clickable (wired) widgets on screen:', wired.length);
|
||||
|
||||
if (wired.length) {
|
||||
wired[0]._listeners.click[0](); // simulate click
|
||||
const after = nameEl._text;
|
||||
console.log('after click screen:', after);
|
||||
if (after && after !== firstScreenName) {
|
||||
console.log('INTERACTION OK: navigated', firstScreenName, '->', after);
|
||||
} else {
|
||||
console.log('note: click stayed on same screen (or target is same screen) -', after);
|
||||
}
|
||||
} else {
|
||||
console.log('no wired widgets on start screen (no interactions starting here)');
|
||||
}
|
||||
Reference in New Issue
Block a user