29 lines
1.0 KiB
JavaScript
29 lines
1.0 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
injectBeforeDocumentClosingBody,
|
|
injectBeforeDocumentClosingHead,
|
|
} from './html-document-injection.mjs';
|
|
|
|
test('injectBeforeDocumentClosingBody skips </body> inside inline scripts', () => {
|
|
const html = `<html><body>
|
|
<script>
|
|
var x='<html><body>'+tb+'</body></html>';
|
|
</script>
|
|
<p>content</p>
|
|
</body></html>`;
|
|
const result = injectBeforeDocumentClosingBody(html, '<footer>brand</footer>\n');
|
|
assert.match(result, /\+tb\+'<\/body><\/html>'/);
|
|
assert.match(result, /<footer>brand<\/footer>\s*<\/body><\/html>$/);
|
|
assert.equal((result.match(/<\/body>/gi) ?? []).length, 2);
|
|
});
|
|
|
|
test('injectBeforeDocumentClosingHead uses the last </head>', () => {
|
|
const html = `<html><head><title>x</title></head><body>
|
|
<script>var h='</head>';</script>
|
|
</body></html>`;
|
|
const result = injectBeforeDocumentClosingHead(html, '<style>body{}</style>\n');
|
|
assert.match(result, /var h='<\/head>'/);
|
|
assert.match(result, /<style>body\{\}<\/style>\s*<\/head><body>/);
|
|
});
|