feat(linkedin): generalize build-html annotation renderer — tables, headings, inline code (S1a)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
b4aaf7ae82
commit
c225ea1dba
2 changed files with 178 additions and 12 deletions
|
|
@ -0,0 +1,65 @@
|
|||
import { describe, test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { markdownToHtml, inline } from '../build-html.mjs';
|
||||
|
||||
describe('markdownToHtml — tables (beslutning H)', () => {
|
||||
test('converts a pipe table to <table>/<tr>/<td>', () => {
|
||||
const md = [
|
||||
'| Plattform | Pris |',
|
||||
'| --- | --- |',
|
||||
'| Azure | Høy |',
|
||||
'| Foundry | Lav |',
|
||||
].join('\n');
|
||||
const html = markdownToHtml(md);
|
||||
assert.match(html, /<table>/);
|
||||
assert.match(html, /<tr>/);
|
||||
assert.match(html, /<td>/);
|
||||
// header cells render as <th>, body values as <td>
|
||||
assert.match(html, /<th>Plattform<\/th>/);
|
||||
assert.match(html, /<td>Azure<\/td>/);
|
||||
// the separator row must NOT become a data row
|
||||
assert.doesNotMatch(html, /<td>---<\/td>/);
|
||||
});
|
||||
|
||||
test('empty input produces no table', () => {
|
||||
assert.doesNotMatch(markdownToHtml(''), /<table>/);
|
||||
});
|
||||
|
||||
test('tolerates a malformed row (uneven cell count) without throwing', () => {
|
||||
const md = [
|
||||
'| a | b |',
|
||||
'| --- | --- |',
|
||||
'| only-one-cell |',
|
||||
'| x | y |',
|
||||
].join('\n');
|
||||
let html;
|
||||
assert.doesNotThrow(() => { html = markdownToHtml(md); });
|
||||
assert.match(html, /<table>/);
|
||||
assert.match(html, /<td>x<\/td>/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('markdownToHtml — heading levels # … #### (beslutning H)', () => {
|
||||
test('# renders <h1>', () => {
|
||||
assert.match(markdownToHtml('# Tittel'), /<h1>Tittel<\/h1>/);
|
||||
});
|
||||
test('## renders <h2>', () => {
|
||||
assert.match(markdownToHtml('## Seksjon'), /<h2>Seksjon<\/h2>/);
|
||||
});
|
||||
test('### renders <h3>', () => {
|
||||
assert.match(markdownToHtml('### Under'), /<h3>Under<\/h3>/);
|
||||
});
|
||||
test('#### renders <h4>', () => {
|
||||
assert.match(markdownToHtml('#### Detalj'), /<h4>Detalj<\/h4>/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('inline — backtick code span (beslutning H)', () => {
|
||||
test('`code` renders <code>', () => {
|
||||
assert.match(inline('bruk `npm install` her'), /<code>npm install<\/code>/);
|
||||
});
|
||||
test('still handles **bold** and *italic*', () => {
|
||||
assert.match(inline('**fet** og *kursiv*'), /<strong>fet<\/strong>/);
|
||||
assert.match(inline('**fet** og *kursiv*'), /<em>kursiv<\/em>/);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue