const categoryContainer = { name: "", units: "", buildHTML() { return `

${this.name}

${this.units}
`; }, addUnit(outcome, value) { this.units += unit.buildHTML(outcome, value); }, addToPage() { micronit.innerHTML += this.buildHTML(); }, reset() { this.name = ""; this.units = ""; } }; const unit = { buildHTML(outcome, value) { return `
${value}
` }, test(tests) { document.addEventListener("DOMContentLoaded", () => { document.head.innerHTML += ` `; for (const category in tests) { categoryContainer.name = category; for (const unit in tests[category]) { const unitName = unit; const unitFunction = tests[category][unit]; try { unitFunction();/*✔*/ categoryContainer.addUnit(`unit-passed`, unitName); } catch (error) { categoryContainer.addUnit(`unit-failed`, unitName); categoryContainer.addUnit("unit-error", error); categoryContainer.addUnit("unit-error-stack", error.stack); /*✖*/ } } categoryContainer.addToPage(); categoryContainer.reset(); } }); }, assert: (expression, message) => { if (!expression) unit.fail(message); }, assertEqual: (expected, actual) => { if (expected != actual) unit.fail(`${expected} != ${actual}`) }, assertNotEqual: (expected, actual) => { if (expected == actual) unit.fail(`${expected} == ${actual}`) }, assertStrictEqual: (expected, actual) => { if (expected !== actual) unit.fail(`${expected} !== ${actual}`) }, assertNotStrictEqual: (expected, actual) => { if (expected === actual) unit.fail(`${expected} === ${actual}`) }, assertTrue: object => { if (object !== true) unit.fail(`${object} !== true`) }, assertFalse: object => { if (object !== false) unit.fail(`${object} !== false`) }, fail: message => { throw new Error(message); }, };