/** * Minimal test runner for BB frontend JS tests. * No npm dependencies — runs with plain Node.js. * * Usage: node src-tauri/frontend/js/tests/run.js */ let passed = 0; let failed = 0; let currentSuite = ''; const failures = []; function describe(name, fn) { currentSuite = name; fn(); currentSuite = ''; } function test(name, fn) { const fullName = currentSuite ? `${currentSuite} > ${name}` : name; try { fn(); passed++; } catch (err) { failed++; failures.push({ name: fullName, error: err.message }); } } function assert(condition, message) { if (!condition) throw new Error(message || 'Assertion failed'); } function assertEqual(actual, expected, message) { if (actual !== expected) { throw new Error( message || `Expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}` ); } } function assertDeepEqual(actual, expected, message) { const a = JSON.stringify(actual); const e = JSON.stringify(expected); if (a !== e) { throw new Error(message || `Expected ${e}, got ${a}`); } } function assertThrows(fn, message) { let threw = false; try { fn(); } catch (_) { threw = true; } if (!threw) throw new Error(message || 'Expected function to throw'); } function report() { console.log(`\n${passed + failed} tests: ${passed} passed, ${failed} failed`); if (failures.length > 0) { console.log('\nFailures:'); failures.forEach(f => { console.log(` FAIL: ${f.name}`); console.log(` ${f.error}`); }); } return failed === 0; } module.exports = { describe, test, assert, assertEqual, assertDeepEqual, assertThrows, report };