Fixes #1337 - show explicit guidance when opened from file:// - route browser boot through a classic script gate - sanitize malformed generated app module before execution - trim duplicated footer junk and add regression tests
21 lines
1.2 KiB
JavaScript
21 lines
1.2 KiB
JavaScript
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { bootPage } = require('../boot.js');
|
|
const el = (tagName = 'div') => ({ tagName, textContent: '', innerHTML: '', style: {}, children: [], type: '', src: '', appendChild(child) { this.children.push(child); } });
|
|
|
|
test('bootPage handles file and http origins', () => {
|
|
const loaderSubtitle = el(), bootMessage = el(), body = el('body');
|
|
const doc = { body, querySelector: s => s === '.loader-subtitle' ? loaderSubtitle : null, getElementById: id => id === 'boot-message' ? bootMessage : null, createElement: tag => el(tag) };
|
|
const fileResult = bootPage({ location: { protocol: 'file:' } }, doc);
|
|
assert.equal(fileResult.mode, 'file');
|
|
assert.equal(body.children.length, 0);
|
|
assert.match(loaderSubtitle.textContent, /serve this world over http/i);
|
|
assert.match(bootMessage.innerHTML, /python3 -m http\.server 8888/i);
|
|
const httpResult = bootPage({ location: { protocol: 'http:' } }, doc);
|
|
assert.equal(httpResult.mode, 'module');
|
|
assert.equal(body.children.length, 1);
|
|
assert.equal(body.children[0].tagName, 'script');
|
|
assert.equal(body.children[0].type, 'module');
|
|
assert.equal(body.children[0].src, './bootstrap.mjs');
|
|
});
|