Files
quantux_mcp/tests/jsdom_click_test.js
T

63 lines
2.2 KiB
JavaScript

// Real-DOM test with jsdom: load the exported HTML, simulate clicks on wired
// widgets, verify navigation and surface any runtime errors.
const fs = require('fs');
const { JSDOM } = require('jsdom');
const file = process.argv[2];
const html = fs.readFileSync(file, 'utf-8');
const errors = [];
const vc = new (require('jsdom').VirtualConsole)();
vc.on('jsdomError', (e) => errors.push('jsdomError: ' + e.message));
vc.on('error', (...a) => errors.push('console.error: ' + a.join(' ')));
const dom = new JSDOM(html, { runScripts: 'dangerously', pretendToBeVisual: true, virtualConsole: vc });
const { window } = dom;
const { document } = window;
const model = window.QUX_MODEL;
const nameEl = document.getElementById('screenName');
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
async function main() {
await sleep(300);
const start = nameEl.textContent;
console.log('file:', file);
console.log('app:', model.name, '| screens:', Object.keys(model.screens).length, '| lines:', Object.keys(model.lines || {}).length);
console.log('start screen:', start);
// find all elements with click listeners (our engine sets a property marker)
// walk DOM to find wired widgets: they have class qux-clickable
const wired = document.querySelectorAll('.qux-clickable');
console.log('clickable elements on screen:', wired.length);
if (wired.length > 0) {
// click the FIRST wired element in real DOM
const el = wired[0];
const rect = el.getBoundingClientRect ? el : null;
const evt = new window.MouseEvent('click', { bubbles: true, cancelable: true, view: window });
el.dispatchEvent(evt);
await sleep(300);
const after = nameEl.textContent;
console.log('after clicking [', el.textContent.trim() || el.className, ']:', after);
if (after !== start) {
console.log('INTERACTION OK:', start, '->', after);
} else {
console.log('NO NAVIGATION (stayed on', after, ')');
}
} else {
console.log('no wired widgets on start screen');
}
if (errors.length) {
console.log('\nRUNTIME ERRORS:');
errors.slice(0, 10).forEach(e => console.log(' -', e));
process.exit(1);
} else {
console.log('no runtime errors');
}
}
main().catch(e => { console.error('TEST FAILED:', e); process.exit(1); });