atagen

malice

public
Star0
Watch0
f12c7de2a3ab83d8b3f716f519bb7fcdee39fe58
2
ssh://brewery@pls.lobotomise.me:33/atagen/malice.git

Blame: web/test/code.test.ts

df3c0f2b3da4atagen2026-10-22 13:07 UTC1
import assert from 'node:assert/strict';
df3c0f2b3da4atagen2026-10-22 13:07 UTC2
import { test } from 'node:test';
df3c0f2b3da4atagen2026-10-22 13:07 UTC3
import { codeToHtml, parseCode } from '../src/lib/code.ts';
df3c0f2b3da4atagen2026-10-22 13:07 UTC4
df3c0f2b3da4atagen2026-10-22 13:07 UTC5
test('plain text has no formatted body', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC6
  assert.equal(codeToHtml('hello <b>'), null);
df3c0f2b3da4atagen2026-10-22 13:07 UTC7
});
df3c0f2b3da4atagen2026-10-22 13:07 UTC8
df3c0f2b3da4atagen2026-10-22 13:07 UTC9
test('splits inline code', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC10
  assert.deepEqual(parseCode('run `ls -l` now'), [
df3c0f2b3da4atagen2026-10-22 13:07 UTC11
    { kind: 'text', text: 'run ' },
df3c0f2b3da4atagen2026-10-22 13:07 UTC12
    { kind: 'inline', text: 'ls -l' },
df3c0f2b3da4atagen2026-10-22 13:07 UTC13
    { kind: 'text', text: ' now' }
df3c0f2b3da4atagen2026-10-22 13:07 UTC14
  ]);
df3c0f2b3da4atagen2026-10-22 13:07 UTC15
});
df3c0f2b3da4atagen2026-10-22 13:07 UTC16
df3c0f2b3da4atagen2026-10-22 13:07 UTC17
test('parses fenced blocks with language', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC18
  assert.deepEqual(parseCode('see\n```rust\nfn main() {}\n```\nok'), [
df3c0f2b3da4atagen2026-10-22 13:07 UTC19
    { kind: 'text', text: 'see\n' },
df3c0f2b3da4atagen2026-10-22 13:07 UTC20
    { kind: 'block', text: 'fn main() {}', lang: 'rust' },
df3c0f2b3da4atagen2026-10-22 13:07 UTC21
    { kind: 'text', text: 'ok' }
df3c0f2b3da4atagen2026-10-22 13:07 UTC22
  ]);
df3c0f2b3da4atagen2026-10-22 13:07 UTC23
});
df3c0f2b3da4atagen2026-10-22 13:07 UTC24
df3c0f2b3da4atagen2026-10-22 13:07 UTC25
test('backticks inside a block stay literal', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC26
  assert.deepEqual(parseCode('```\na `b` c\n```'), [{ kind: 'block', text: 'a `b` c', lang: null }]);
df3c0f2b3da4atagen2026-10-22 13:07 UTC27
});
df3c0f2b3da4atagen2026-10-22 13:07 UTC28
df3c0f2b3da4atagen2026-10-22 13:07 UTC29
test('unclosed backtick is text', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC30
  assert.deepEqual(parseCode('a ` b'), [{ kind: 'text', text: 'a ` b' }]);
df3c0f2b3da4atagen2026-10-22 13:07 UTC31
});
df3c0f2b3da4atagen2026-10-22 13:07 UTC32
df3c0f2b3da4atagen2026-10-22 13:07 UTC33
test('html escapes and keeps line breaks', () => {
df3c0f2b3da4atagen2026-10-22 13:07 UTC34
  assert.equal(
df3c0f2b3da4atagen2026-10-22 13:07 UTC35
    codeToHtml('x<y\n`a&b`\n```js\n<p>\n```'),
df3c0f2b3da4atagen2026-10-22 13:07 UTC36
    'x&lt;y<br><code>a&amp;b</code><br><pre><code class="language-js">&lt;p&gt;</code></pre>'
df3c0f2b3da4atagen2026-10-22 13:07 UTC37
  );
df3c0f2b3da4atagen2026-10-22 13:07 UTC38
});