CaTML/test/test.js

75 lines
3.2 KiB
JavaScript

const assert = require('assert');
const CatML = require('../catml.js');
console.log('🐾 Running CaTML Test Suite...\n');
// Test 1: Tag Translations
console.log('Test 1: Basic tag translations');
const source1 = '<box><purr>Hello world</purr></box>';
const expected1 = '<div><p>Hello world</p></div>';
assert.strictEqual(CatML.compile(source1), expected1);
console.log('✓ Passed: Basic tags');
// Test 2: Headings and lists
console.log('Test 2: Headings and food bowls');
const source2 = '<meow1>Grand Meow</meow1><bowl><treat>Tuna</treat><treat>Salmon</treat></bowl>';
const expected2 = '<h1>Grand Meow</h1><ul><li>Tuna</li><li>Salmon</li></ul>';
assert.strictEqual(CatML.compile(source2), expected2);
console.log('✓ Passed: Headings and lists');
// Test 3: Attributes (catch, prey, scent, breed, tag, fluff)
console.log('Test 3: Attribute translation');
const source3 = '<stare prey="cat.jpg" scent="Cute kitty" tag="avatar" breed="round-cat" fluff="margin: 10px;" />';
const compiled3 = CatML.compile(source3);
assert(compiled3.includes('<img'));
assert(compiled3.includes('src="cat.jpg"'));
assert(compiled3.includes('alt="Cute kitty"'));
assert(compiled3.includes('id="avatar"'));
assert(compiled3.includes('class="round-cat"'));
assert(compiled3.includes('style="margin: 10px;"'));
console.log('✓ Passed: Attributes');
// Test 4: Interactive elements & Events (bap, sniff, on-bap)
console.log('Test 4: Interactive buttons & events');
const source4 = '<bap on-bap="pounce()" breed="red-laser">Catch!</bap><sniff treat-type="text" curiosity="Search prey..." on-sniff="search()" />';
const compiled4 = CatML.compile(source4);
assert(compiled4.includes('<button onclick="pounce()" class="red-laser">Catch!</button>'));
assert(compiled4.includes('<input type="text" placeholder="Search prey..." oninput="search()"'));
console.log('✓ Passed: Interactive & events');
// Test 5: Full document wrapper (<catworld>, <whiskers>, <collar>, <fur>, <litterbox>)
console.log('Test 5: Full document translation');
const source5 = `
<catworld>
<whiskers>
<collar>My Cat Page</collar>
</whiskers>
<fur>
<curtain><meow1>Header</meow1></curtain>
<hammock>
<purr>Content</purr>
</hammock>
<litterbox><purr>Footer</purr></litterbox>
</fur>
</catworld>
`.trim();
const compiled5 = CatML.compile(source5);
assert(compiled5.includes('<html>'));
assert(compiled5.includes('<head>'));
assert(compiled5.includes('<title>My Cat Page</title>'));
assert(compiled5.includes('<body>'));
assert(compiled5.includes('<header><h1>Header</h1></header>'));
assert(compiled5.includes('<main>'));
assert(compiled5.includes('<footer><p>Footer</p></footer>'));
assert(compiled5.includes('</html>'));
console.log('✓ Passed: Full document structure');
// Test 6: Script / Style elements (<catnip>, <groom>)
console.log('Test 6: Script & styles');
const source6 = '<groom>box { color: orange; }</groom><catnip>console.log("purr");</catnip>';
const compiled6 = CatML.compile(source6);
assert.strictEqual(compiled6, '<style>box { color: orange; }</style><script>console.log("purr");</script>');
console.log('✓ Passed: Styles and scripts');
console.log('\n🎉 ALL CaTML TESTS PASSED! Purrfection achieved! 🐱');