import { expect, test, suite, describe } from 'vitest'
import { HopDown } from '../dist';
import { Macro, TagCollection } from "../dist/tags";
import dedent from "dedent";
var hopdown = new HopDown();
var jsonMacro = {
name: 'json',
template: dedent(`
::: json
: indent=2
{
"Foo": "BAR",
"one": 1
}
:::
`),
renderer: (macro) => {
var src = macro.data.trim();
return JSON.stringify(JSON.parse(src), null, parseInt(macro.params.indent));
}
};
var errorMacro = {
name: 'error',
template: dedent(`
::: error
: message=I AM ERROR
:::
`),
renderer: (macro) => {
return (
'
An Error Occurred
'
+ `${macro.params.message}`
);
}
};
hopdown.macros.register(jsonMacro);
hopdown.macros.register(errorMacro);
suite('Markdown <=> HTML Roundtrips', () => {
function assert(name, input, output, expected = undefined) {
return test(name, () => {
const html = hopdown.toHTML(input);
const markdown = hopdown.toMarkdown(html);
expect(html).toBe(output);
expect(markdown).toBe(expected || input);
});
}
describe('JSON', () => {
var html = (
''
+ '\n'
+ '{\n'
+ ' "Foo": "BAR",\n'
+ ' "one": 1\n'
+ '}\n'
+ '
'
);
assert('macro', jsonMacro.template, html);
});
describe('Messages', () => {
var html = (
''
+ '\n'
+ "An Error Occurred
I AM ERROR\n"
+ "
"
);
assert('Error', errorMacro.template, html);
});
});
suite('Markdown <=> Editor Node Roundtrips', () => {
function assertBlock(name, input, output) {
return test(name, () => {
const div = document.createElement('div');
div.appendChild(hopdown.toEditorNode(input));
expect(div.innerHTML).toStrictEqual(output);
});
}
describe('json', () => {
var html = (
''
+ '\n'
+ '{\n'
+ ' "Foo": "BAR",\n'
+ ' "one": 1\n'
+ '}\n'
+ ''
);
assertBlock('Macro', jsonMacro.template, html);
});
});