| 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'>&`), '<a href="x" title='y'>&'); |
| 7 |
}); |
| 8 |
|
| 9 |
test('escapeHtml is ampersand-first (no double-escaping of entities it emits)', () => { |
| 10 |
// & must be replaced before <,>," so "<" is not re-escaped into "&lt;". |
| 11 |
assert.equal(escapeHtml('<'), '<'); |
| 12 |
assert.equal(escapeHtml('<'), '&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 |
|