diff --git a/src/tests/markdown.spec.js b/src/tests/markdown.spec.js index 05f288d49ab..f59f9aabb26 100644 --- a/src/tests/markdown.spec.js +++ b/src/tests/markdown.spec.js @@ -1,4 +1,3 @@ -import spec from "./fixtures/spec" import markdownit from './../markdownit' import { typesAvailable } from './../markdownit/callouts' import { @@ -15,53 +14,6 @@ import createEditor from "../EditorFactory"; * Please add test belonging to some Node or Mark to the corresponding file in './nodes/` or `./marks/` */ -describe('Commonmark', () => { - const skippedMarkdownTests = [ - // we interpret this as front matter - 96, 98, - // contain HTML - 21, 31, 201, 344, 474, 475, 476, 490, 493, 523, 535, 642, 643, - // contain comments - 309, 308, - ]; - - const normalize = (str) => { - // https://github.com/markdown-it/markdown-it/blob/df4607f1d4d4be7fdc32e71c04109aea8cc373fa/test/commonmark.js#L10 - return str.replace(/
<\/blockquote>/g, '\n') - .replace(/([^<]+)<\/span>/g, '$1') - .replace(/
/g, '
\n') - .replace(/{ - // We do not support HTML - if (entry.section === 'HTML blocks' || entry.section === 'Raw HTML') return; - - if (skippedMarkdownTests.indexOf(entry.example) !== -1) { - return - } - - test('commonmark parsing ' + entry.example, () => { - let expected = entry.markdown.includes('__') - ? entry.html.replace(//g, '').replace(/<\/strong>/g, '') - : entry.html - if (figureImageMarkdownTests.indexOf(entry.example) !== -1) { - expected = expected.replace(/
/g, '
').replace(/<\/p>/g, ' ') - } - - const rendered = markdownit.render(entry.markdown) - - // Ignore special markup for untouched markdown - expect(normalize(rendered)).toBe(expected) - }) - }) -}) - describe('Markdown though editor', () => { test('headlines', () => { expect(markdownThroughEditor('# Test')).toBe('# Test') diff --git a/src/tests/markdownit.spec.js b/src/tests/markdownit.spec.js deleted file mode 100644 index 3d6cc8178e3..00000000000 --- a/src/tests/markdownit.spec.js +++ /dev/null @@ -1,74 +0,0 @@ -import markdownit from './../markdownit' -import { typesAvailable } from '../markdownit/callouts' - -describe('markdownit', () => { - - it('render image figures', () => { - expect(markdownit.render('[](/uri)\n')).toBe('\n') - }) - - it('renders task lists', () => { - const rendered = markdownit.render('* [ ] task\n* not a task') - expect(stripIndent(rendered)).toBe(stripIndent(` - -
-- task
--
` - )) - }) - - it('exposes bullet list markup', () => { - ['*', '-'].forEach(bullet => { - const rendered = markdownit.render(`${bullet} first\n${bullet} second`) - expect(stripIndent(rendered)).toBe(stripIndent(` -- not a task
--
` - )) - }) - }) - - it('renders bullet and task lists separately', () => { - const rendered = markdownit.render('* not a task\n* [ ] task') - expect(stripIndent(rendered)).toBe(stripIndent(` -- first
-- second
--
-- not a task
--
` - )) - }) - - it('renders mentions of users with escaped whitespace', () => { - const rendered = markdownit.render('@[whitespace user](mention://user/whitespace%20user)') - expect(stripIndent(rendered)).toBe(stripIndent(` -- task
-whitespace user
` - )) - }) - - describe('callouts', () => { - typesAvailable.forEach((type) => { - it(`render ${type}`, () => { - const rendered = markdownit.render(`::: ${type}\nHey there!\n:::`) - expect(stripIndent(rendered)).toBe(stripIndent( - `-` - )) - }) - }) - }) - -}) - -function stripIndent(content) { - return content - .replace(/\n/g, "") - .replace(/[\t ]+\[\t ]+\<") - .replace(/\>[\t ]+$/g, ">") -} diff --git a/src/tests/markdownit/bulletList.spec.js b/src/tests/markdownit/bulletList.spec.js new file mode 100644 index 00000000000..6d387d31631 --- /dev/null +++ b/src/tests/markdownit/bulletList.spec.js @@ -0,0 +1,30 @@ +import markdownit from '../../markdownit' +import stripIndent from './stripIndent' + +describe('markdownit', () => { + + it('exposes bullet list markup', () => { + ['*', '-'].forEach(bullet => { + const rendered = markdownit.render(`${bullet} first\n${bullet} second`) + expect(stripIndent(rendered)).toBe(stripIndent(` +Hey there!
-+
` + )) + }) + }) + + it('renders bullet and task lists separately', () => { + const rendered = markdownit.render('* not a task\n* [ ] task') + expect(stripIndent(rendered)).toBe(stripIndent(` +- first
+- second
++
+- not a task
++
` + )) + }) + +}) diff --git a/src/tests/markdownit/callouts.spec.js b/src/tests/markdownit/callouts.spec.js new file mode 100644 index 00000000000..3bd8d8ab713 --- /dev/null +++ b/src/tests/markdownit/callouts.spec.js @@ -0,0 +1,17 @@ +import markdownit from '../../markdownit' +import { typesAvailable } from '../../markdownit/callouts' +import stripIndent from './stripIndent.js' + +describe('callouts', () => { + typesAvailable.forEach((type) => { + it(`render ${type}`, () => { + const rendered = markdownit.render(`::: ${type}\nHey there!\n:::`) + expect(stripIndent(rendered)).toBe(stripIndent( + `- task
++` + )) + }) + }) +}) + diff --git a/src/tests/markdownit/commonmark.spec.js b/src/tests/markdownit/commonmark.spec.js new file mode 100644 index 00000000000..e016120f5bd --- /dev/null +++ b/src/tests/markdownit/commonmark.spec.js @@ -0,0 +1,49 @@ +import spec from "../fixtures/spec" +import markdownit from '../../markdownit' + +describe('Commonmark', () => { + const skippedMarkdownTests = [ + // we interpret this as front matter + 96, 98, + // contain HTML + 21, 31, 201, 344, 474, 475, 476, 490, 493, 523, 535, 642, 643, + // contain comments + 309, 308, + ]; + + const normalize = (str) => { + // https://github.com/markdown-it/markdown-it/blob/df4607f1d4d4be7fdc32e71c04109aea8cc373fa/test/commonmark.js#L10 + return str.replace(/Hey there!
+<\/blockquote>/g, '\n') + .replace(/([^<]+)<\/span>/g, '$1') + .replace(/
/g, '
\n') + .replace(/{ + // We do not support HTML + if (entry.section === 'HTML blocks' || entry.section === 'Raw HTML') return; + + if (skippedMarkdownTests.indexOf(entry.example) !== -1) { + return + } + + test('commonmark parsing ' + entry.example, () => { + let expected = entry.markdown.includes('__') + ? entry.html.replace(//g, '').replace(/<\/strong>/g, '') + : entry.html + if (figureImageMarkdownTests.indexOf(entry.example) !== -1) { + expected = expected.replace(/
/g, '
').replace(/<\/p>/g, ' ') + } + + const rendered = markdownit.render(entry.markdown) + + // Ignore special markup for untouched markdown + expect(normalize(rendered)).toBe(expected) + }) + }) +}) diff --git a/src/tests/markdownit/imageFigures.spec.js b/src/tests/markdownit/imageFigures.spec.js new file mode 100644 index 00000000000..d1e41459af7 --- /dev/null +++ b/src/tests/markdownit/imageFigures.spec.js @@ -0,0 +1,10 @@ +import markdownit from '../../markdownit' + +describe('image figures extension', () => { + + it('renders images as figures', () => { + expect(markdownit.render('[](/uri)\n')) + .toBe('\n') + }) + +}) diff --git a/src/tests/markdownit/mentions.spec.js b/src/tests/markdownit/mentions.spec.js new file mode 100644 index 00000000000..fa3e83a1499 --- /dev/null +++ b/src/tests/markdownit/mentions.spec.js @@ -0,0 +1,13 @@ +import markdownit from '../../markdownit' +import stripIndent from './stripIndent.js' + +describe('markdownit', () => { + + it('renders mentions of users with escaped whitespace', () => { + const rendered = markdownit.render('@[whitespace user](mention://user/whitespace%20user)') + expect(stripIndent(rendered)).toBe(stripIndent(` + whitespace user
` + )) + }) + +}) diff --git a/src/tests/markdownit/stripIndent.js b/src/tests/markdownit/stripIndent.js new file mode 100644 index 00000000000..f44b51b9f04 --- /dev/null +++ b/src/tests/markdownit/stripIndent.js @@ -0,0 +1,7 @@ +export default function stripIndent(content) { + return content + .replace(/\n/g, "") + .replace(/[\t ]+\[\t ]+\<") + .replace(/\>[\t ]+$/g, ">") +} diff --git a/src/tests/markdownit/taskLists.spec.js b/src/tests/markdownit/taskLists.spec.js new file mode 100644 index 00000000000..6f30e511dec --- /dev/null +++ b/src/tests/markdownit/taskLists.spec.js @@ -0,0 +1,19 @@ +import markdownit from '../../markdownit' +import stripIndent from './stripIndent' + +describe('task list extension', () => { + + it('renders task lists', () => { + const rendered = markdownit.render('* [ ] task\n* not a task') + expect(stripIndent(rendered)).toBe(stripIndent(` ++
+- task
++
` + )) + }) + +}) +- not a task
+