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); }); });