Files
memind/mindspace-visual-editor.test.mjs
T
John 79457230c1 Improve MindSpace visual editor UX and default RMB billing.
Add color-coded edit highlights with an in-preview legend, strip CSP meta
for srcdoc editing, and simplify fullscreen preview to immersive visual edit
only. Default billing to CNY token rates unless H5_USE_BACKEND_COST=1.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 00:59:28 -07:00

40 lines
1.6 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
MINDSPACE_PAGE_CONTENT_MESSAGE,
buildEditablePreviewDocument,
} from './src/utils/mindspaceVisualEditor.ts';
test('buildEditablePreviewDocument injects visual editor into body', () => {
const html = '<!doctype html><html><head></head><body><p>Hi</p></body></html>';
const result = buildEditablePreviewDocument(html);
assert.match(result, /mindspace-visual-editor-style/);
assert.match(result, /mindspace-visual-editor-script/);
assert.match(result, /data-mindspace-editing/);
assert.match(result, /<p>Hi<\/p>/);
assert.match(result, new RegExp(MINDSPACE_PAGE_CONTENT_MESSAGE.replace(':', '\\:')));
});
test('buildEditablePreviewDocument wraps fragment html', () => {
const result = buildEditablePreviewDocument('<section>块</section>');
assert.match(result, /<section>块<\/section>/);
assert.match(result, /<\/body>/);
});
test('buildEditablePreviewDocument provides blank fallback', () => {
const result = buildEditablePreviewDocument('');
assert.match(result, /空白页面/);
});
test('buildEditablePreviewDocument strips CSP meta so editor script can run', () => {
const html = `<!DOCTYPE html><html><head>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'none'">
</head><body><h1>探索世界</h1></body></html>`;
const result = buildEditablePreviewDocument(html);
assert.doesNotMatch(result, /Content-Security-Policy/);
assert.match(result, /mindspace-visual-editor-script/);
assert.match(result, /<h1>探索世界<\/h1>/);
});