mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-10-05 06:45:09 +00:00
CodeRabbit flagged elementKeys() in style-editor.js: render() claims the whole customization.layout child as the widget's own (removing it from the generic fallback renderer, since posting the same offset twice is worse), but elementKeys() only listed keys that also have their own top-level style block. A hand-written schema can put a key under layout that never got one -- a logo, a timeout indicator, a possession arrow with a position but no font or colour -- and that key's only control silently disappeared: no row in the style editor's table (elementKeys never listed it) and no fallback section either (layout was removed wholesale). elementKeys() now appends any layout-declared key not already covered by a style element, so table() renders a row for it (layout columns only, no style columns) and the wholesale layout ownership claim stays truthful. Verified against current code before fixing. New regression test (test/js/unit/test_style_editor_element_keys.js, following this repo's existing eval-extraction pattern for testing widget JS without a browser) fails against the reverted function and passes with the fix; added to run_all.js and the suite table in test/js/README.md. Full pytest suite: 4887 passed, 62 skipped, 2 failed -- both the pre-existing Europe/Kiev/Asia/Calcutta tzdata-alias gap on this sandbox, identical on origin/main, unrelated to this change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dpg3HLWohdCUdzz2QNHanm
60 lines
2.4 KiB
JavaScript
Executable File
60 lines
2.4 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
// Runs the web-interface JS suites.
|
|
//
|
|
// node run_all.js unit suites, plus DOM suites if a
|
|
// web interface is reachable
|
|
// BASE=http://10.0.10.169:5000 node run_all.js point the DOM suites at a rig
|
|
//
|
|
// Unit suites need nothing but node. The DOM suites need `npm install` (jsdom)
|
|
// and a running web interface, because they deliberately test against the real
|
|
// server-rendered HTML and the real API rather than fixtures.
|
|
const { spawnSync } = require('child_process');
|
|
const http = require('http');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const BASE = process.env.BASE || 'http://localhost:5000';
|
|
const UNIT = ['unit/test_list_filter.js', 'unit/test_render_cards.js',
|
|
'unit/test_html_escaping.js', 'unit/test_style_editor_element_keys.js'];
|
|
const DOM = ['dom/test_installed_dom.js', 'dom/test_store_dom.js', 'dom/test_no_double_fetch.js',
|
|
'dom/test_tools_sections.js'];
|
|
|
|
function reachable(url) {
|
|
return new Promise(res => {
|
|
const req = http.get(url, r => { r.resume(); res(r.statusCode < 500); });
|
|
req.on('error', () => res(false));
|
|
req.setTimeout(4000, () => { req.destroy(); res(false); });
|
|
});
|
|
}
|
|
|
|
function run(file) {
|
|
const r = spawnSync(process.execPath, [path.join(__dirname, file)],
|
|
{ stdio: 'inherit', cwd: __dirname, env: process.env });
|
|
return r.status === 0;
|
|
}
|
|
|
|
(async () => {
|
|
const results = [];
|
|
for (const f of UNIT) results.push([f, run(f)]);
|
|
|
|
const haveJsdom = fs.existsSync(path.join(__dirname, 'node_modules', 'jsdom'));
|
|
const up = await reachable(BASE + '/');
|
|
|
|
if (!haveJsdom) {
|
|
console.log(`\nSKIPPING DOM suites: jsdom not installed (run: npm install)\n`);
|
|
} else if (!up) {
|
|
console.log(`\nSKIPPING DOM suites: no web interface reachable at ${BASE}`);
|
|
console.log(` start one with: EMULATOR=true python3 web_interface/app.py`);
|
|
console.log(` or point at a rig: BASE=http://<host>:5000 node run_all.js\n`);
|
|
} else {
|
|
console.log(`\nDOM suites against ${BASE}\n`);
|
|
for (const f of DOM) results.push([f, run(f)]);
|
|
}
|
|
|
|
const failed = results.filter(([, ok]) => !ok);
|
|
console.log('\n─── summary ───');
|
|
results.forEach(([f, ok]) => console.log(` ${ok ? 'PASS' : 'FAIL'} ${f}`));
|
|
if (failed.length) { console.log(`\n${failed.length} suite(s) failed\n`); process.exit(1); }
|
|
console.log('\nall suites passed\n');
|
|
})();
|