Files

79 lines
2.5 KiB
TypeScript

import { exists, mkdir, readFile, remove, writeFile } from 'fs-extra';
import { join } from 'path';
import htmlpack from '.';
const outputDirectory = './test-output';
describe('htmlpack/index', () => {
beforeEach(async () => {
if (await exists(outputDirectory)) {
await remove(outputDirectory);
}
await mkdir(outputDirectory);
});
test('should convert HTML into a single file', async () => {
const outputFile = join(outputDirectory, 'output.html');
await htmlpack(join('test-data', 'index.html'), outputFile);
const outputContent = await readFile(outputFile, 'utf8');
expect(outputContent).toBe(`
<html>
<head>
<style>* {
color: red;
}</style>
</head>
<body>
<h1>Test</h1>
<a href="data:text/plain;base64,UmVzb3VyY2Uu" download="resource.txt">Test link.</a>
<img src="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItOTUgLTk2IDIwOCAyMDgiIHdpZHRoPSIyMDgiIGhlaWdodD0iMjA4IiB2ZXJzaW9uPSIxLjEiIGJhc2VQcm9maWxlPSJmdWxsIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0ZXh0IHN0eWxlPSJmb250LXNpemU6IDY0cHg7IGZpbGw6IHJlZDsiPlRlc3Q8L3RleHQ+PC9zdmc+" alt="test image"/>
<p>Test paragraph</p>
</body>
</html>`);
});
test('should not throw when a script asset is missing', async () => {
const inputFile = join(outputDirectory, 'input.html');
const outputFile = join(outputDirectory, 'output.html');
const inputHtml = `
<html>
<head>
<script type="application/javascript" src="missing-script.js"></script>
</head>
<body>
<p>Test</p>
</body>
</html>`;
await writeFile(inputFile, inputHtml, 'utf8');
await htmlpack(inputFile, outputFile);
const outputContent = await readFile(outputFile, 'utf8');
expect(outputContent).toContain('<p>Test</p>');
});
test('should preserve non-local anchor href values', async () => {
const inputFile = join(outputDirectory, 'input.html');
const outputFile = join(outputDirectory, 'output.html');
const inputHtml = `
<html>
<body>
<a href="https://example.com/test">External link</a>
<a href="mailto:test@example.com">Email link</a>
<a href="#section">Fragment link</a>
</body>
</html>`;
await writeFile(inputFile, inputHtml, 'utf8');
await htmlpack(inputFile, outputFile);
const outputContent = await readFile(outputFile, 'utf8');
expect(outputContent).toContain('<a href="https://example.com/test">External link</a>');
expect(outputContent).toContain('<a href="mailto:test@example.com">Email link</a>');
expect(outputContent).toContain('<a href="#section">Fragment link</a>');
});
});