Skip to main content

max / makenotwork

797 B · 23 lines History Blame Raw
1 import { test } from 'node:test';
2 import assert from 'node:assert/strict';
3 import { escapeHtml, escapeAttr } from './dom.ts';
4
5 test('escapeHtml escapes all five HTML-special characters', () => {
6 assert.equal(escapeHtml(`<a href="x" title='y'>&`), '&lt;a href=&quot;x&quot; title=&#39;y&#39;&gt;&amp;');
7 });
8
9 test('escapeHtml is ampersand-first (no double-escaping of entities it emits)', () => {
10 // & must be replaced before <,>," so "&lt;" is not re-escaped into "&amp;lt;".
11 assert.equal(escapeHtml('<'), '&lt;');
12 assert.equal(escapeHtml('&lt;'), '&amp;lt;');
13 });
14
15 test('escapeHtml coerces non-strings', () => {
16 assert.equal(escapeHtml(42), '42');
17 assert.equal(escapeHtml(null), 'null');
18 });
19
20 test('escapeAttr is the same escaper', () => {
21 assert.equal(escapeAttr, escapeHtml);
22 });
23