Files
quantux_mcp/tests/engine_interact.js
T

50 lines
1.8 KiB
JavaScript

// 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)');
}