Skip to content

Commit 7d5587b

Browse files
committed
test(wasm): add comprehensive test suite
- Test basic markdown conversions - Test GFM, MDX, and security options - Test sync/async APIs - Cover edge cases and complex markdown
1 parent 1b36e68 commit 7d5587b

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

wasm/test/index.test.mjs

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import assert from 'node:assert';
2+
import { describe, it } from 'node:test';
3+
import { toHtml, toHtmlWithOptions, toHtmlSync, toHtmlWithOptionsSync } from '../lib/index.mjs';
4+
5+
describe('markdown-rs WASM', () => {
6+
describe('Basic functionality', () => {
7+
it('converts heading to HTML', async () => {
8+
const result = await toHtml('# Hello World');
9+
assert.strictEqual(result, '<h1>Hello World</h1>');
10+
});
11+
12+
it('converts paragraph to HTML', async () => {
13+
const result = await toHtml('This is a paragraph.');
14+
assert.strictEqual(result, '<p>This is a paragraph.</p>');
15+
});
16+
17+
it('converts emphasis to HTML', async () => {
18+
const result = await toHtml('*italic* and **bold**');
19+
assert.strictEqual(result, '<p><em>italic</em> and <strong>bold</strong></p>');
20+
});
21+
22+
it('converts links to HTML', async () => {
23+
const result = await toHtml('[GitHub](https://github.com)');
24+
assert.strictEqual(result, '<p><a href="https://github.com">GitHub</a></p>');
25+
});
26+
27+
it('converts code blocks to HTML', async () => {
28+
const result = await toHtml('```js\nconst x = 1;\n```');
29+
assert(result.includes('<pre>'));
30+
assert(result.includes('<code'));
31+
assert(result.includes('const x = 1;'));
32+
});
33+
});
34+
35+
describe('GFM options', () => {
36+
it('enables strikethrough with GFM', async () => {
37+
const result = await toHtmlWithOptions('~strikethrough~', { gfm: true });
38+
assert(result.includes('<del>strikethrough</del>'));
39+
});
40+
41+
it('enables tables with GFM', async () => {
42+
const markdown = '| a | b |\n|---|---|\n| c | d |';
43+
const result = await toHtmlWithOptions(markdown, { gfm: true });
44+
assert(result.includes('<table>'));
45+
assert(result.includes('<td>c</td>'));
46+
});
47+
48+
it('enables autolinks with GFM', async () => {
49+
const result = await toHtmlWithOptions('https://example.com', { gfm: true });
50+
assert(result.includes('<a href="https://example.com">'));
51+
});
52+
});
53+
54+
describe('MDX options', () => {
55+
it('handles JSX with MDX enabled', async () => {
56+
const result = await toHtmlWithOptions('# Hello <Component />', { mdx: true });
57+
assert(result.includes('<h1>'));
58+
});
59+
});
60+
61+
describe('Security options', () => {
62+
it('blocks dangerous HTML by default', async () => {
63+
const html = '<script>alert("test")</script>';
64+
const result = await toHtmlWithOptions(html, {});
65+
assert(!result.includes('<script>'));
66+
});
67+
68+
it('allows dangerous HTML when enabled', async () => {
69+
const html = '<script>alert("test")</script>';
70+
const result = await toHtmlWithOptions(html, { allowDangerousHtml: true });
71+
assert(result.includes('<script>'));
72+
});
73+
});
74+
75+
describe('Sync functions', () => {
76+
it('sync functions work after initialization', async () => {
77+
// First initialize with async call
78+
await toHtml('# Init');
79+
80+
// Now sync should work
81+
const result = toHtmlSync('# Hello Sync');
82+
assert.strictEqual(result, '<h1>Hello Sync</h1>');
83+
});
84+
85+
it('sync with options works', async () => {
86+
await toHtml('# Init');
87+
const result = toHtmlWithOptionsSync('~strike~', { gfm: true });
88+
assert(result.includes('<del>strike</del>'));
89+
});
90+
});
91+
92+
describe('Edge cases', () => {
93+
it('handles empty input', async () => {
94+
const result = await toHtml('');
95+
assert.strictEqual(result, '');
96+
});
97+
98+
it('handles complex markdown', async () => {
99+
const markdown = `
100+
# Title
101+
102+
Paragraph with **bold** and *italic*.
103+
104+
- List item 1
105+
- List item 2
106+
107+
\`\`\`js
108+
console.log('code');
109+
\`\`\`
110+
111+
> Blockquote
112+
`;
113+
const result = await toHtml(markdown);
114+
assert(result.includes('<h1>Title</h1>'));
115+
assert(result.includes('<ul>'));
116+
assert(result.includes('<blockquote>'));
117+
});
118+
});
119+
});

0 commit comments

Comments
 (0)