Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/content_editor/services/markdown_sourcemap_spec.js')
-rw-r--r--spec/frontend/content_editor/services/markdown_sourcemap_spec.js109
1 files changed, 83 insertions, 26 deletions
diff --git a/spec/frontend/content_editor/services/markdown_sourcemap_spec.js b/spec/frontend/content_editor/services/markdown_sourcemap_spec.js
index 2efc73ddef8..4428fa682e7 100644
--- a/spec/frontend/content_editor/services/markdown_sourcemap_spec.js
+++ b/spec/frontend/content_editor/services/markdown_sourcemap_spec.js
@@ -1,6 +1,8 @@
import { Extension } from '@tiptap/core';
import BulletList from '~/content_editor/extensions/bullet_list';
import ListItem from '~/content_editor/extensions/list_item';
+import TaskList from '~/content_editor/extensions/task_list';
+import TaskItem from '~/content_editor/extensions/task_item';
import Paragraph from '~/content_editor/extensions/paragraph';
import markdownDeserializer from '~/content_editor/services/gl_api_markdown_deserializer';
import { getMarkdownSource, getFullSource } from '~/content_editor/services/markdown_sourcemap';
@@ -18,6 +20,20 @@ const BULLET_LIST_HTML = `<ul data-sourcepos="1:1-3:24" dir="auto">
</li>
</ul>`;
+const BULLET_TASK_LIST_MARKDOWN = `- [ ] list item 1
++ [x] checked list item 2
+ + [ ] embedded list item 1
+ - [x] checked embedded list item 2`;
+const BULLET_TASK_LIST_HTML = `<ul data-sourcepos="1:1-4:36" class="task-list" dir="auto">
+ <li data-sourcepos="1:1-1:17" class="task-list-item"><input type="checkbox" class="task-list-item-checkbox"> list item 1</li>
+ <li data-sourcepos="2:1-4:36" class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked> checked list item 2
+ <ul data-sourcepos="3:3-4:36" class="task-list">
+ <li data-sourcepos="3:3-3:28" class="task-list-item"><input type="checkbox" class="task-list-item-checkbox"> embedded list item 1</li>
+ <li data-sourcepos="4:3-4:36" class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked> checked embedded list item 2</li>
+ </ul>
+ </li>
+</ul>`;
+
const SourcemapExtension = Extension.create({
// lets add `source` attribute to every element using `getMarkdownSource`
addGlobalAttributes() {
@@ -38,19 +54,68 @@ const SourcemapExtension = Extension.create({
});
const tiptapEditor = createTestEditor({
- extensions: [BulletList, ListItem, SourcemapExtension],
+ extensions: [BulletList, ListItem, TaskList, TaskItem, SourcemapExtension],
});
const {
- builders: { doc, bulletList, listItem, paragraph },
+ builders: { doc, bulletList, listItem, taskList, taskItem, paragraph },
} = createDocBuilder({
tiptapEditor,
names: {
bulletList: { nodeType: BulletList.name },
listItem: { nodeType: ListItem.name },
+ taskList: { nodeType: TaskList.name },
+ taskItem: { nodeType: TaskItem.name },
},
});
+const bulletListDoc = () =>
+ doc(
+ bulletList(
+ { bullet: '+', source: '+ list item 1\n+ list item 2\n - embedded list item 3' },
+ listItem({ source: '+ list item 1' }, paragraph('list item 1')),
+ listItem(
+ { source: '+ list item 2\n - embedded list item 3' },
+ paragraph('list item 2'),
+ bulletList(
+ { bullet: '-', source: '- embedded list item 3' },
+ listItem({ source: '- embedded list item 3' }, paragraph('embedded list item 3')),
+ ),
+ ),
+ ),
+ );
+
+const bulletTaskListDoc = () =>
+ doc(
+ taskList(
+ {
+ bullet: '-',
+ source:
+ '- [ ] list item 1\n+ [x] checked list item 2\n + [ ] embedded list item 1\n - [x] checked embedded list item 2',
+ },
+ taskItem({ source: '- [ ] list item 1' }, paragraph('list item 1')),
+ taskItem(
+ {
+ source:
+ '+ [x] checked list item 2\n + [ ] embedded list item 1\n - [x] checked embedded list item 2',
+ checked: true,
+ },
+ paragraph('checked list item 2'),
+ taskList(
+ {
+ bullet: '+',
+ source: '+ [ ] embedded list item 1\n - [x] checked embedded list item 2',
+ },
+ taskItem({ source: '+ [ ] embedded list item 1' }, paragraph('embedded list item 1')),
+ taskItem(
+ { source: '- [x] checked embedded list item 2', checked: true },
+ paragraph('checked embedded list item 2'),
+ ),
+ ),
+ ),
+ ),
+ );
+
describe('content_editor/services/markdown_sourcemap', () => {
describe('getFullSource', () => {
it.each`
@@ -72,29 +137,21 @@ describe('content_editor/services/markdown_sourcemap', () => {
});
});
- it('gets markdown source for a rendered HTML element', async () => {
- const { document } = await markdownDeserializer({
- render: () => BULLET_LIST_HTML,
- }).deserialize({
- schema: tiptapEditor.schema,
- markdown: BULLET_LIST_MARKDOWN,
- });
-
- const expected = doc(
- bulletList(
- { bullet: '+', source: '+ list item 1\n+ list item 2' },
- listItem({ source: '+ list item 1' }, paragraph('list item 1')),
- listItem(
- { source: '+ list item 2' },
- paragraph('list item 2'),
- bulletList(
- { bullet: '-', source: '- embedded list item 3' },
- listItem({ source: '- embedded list item 3' }, paragraph('embedded list item 3')),
- ),
- ),
- ),
- );
+ it.each`
+ description | sourceMarkdown | sourceHTML | expectedDoc
+ ${'bullet list'} | ${BULLET_LIST_MARKDOWN} | ${BULLET_LIST_HTML} | ${bulletListDoc}
+ ${'bullet task list'} | ${BULLET_TASK_LIST_MARKDOWN} | ${BULLET_TASK_LIST_HTML} | ${bulletTaskListDoc}
+ `(
+ 'gets markdown source for a rendered $description',
+ async ({ sourceMarkdown, sourceHTML, expectedDoc }) => {
+ const { document } = await markdownDeserializer({
+ render: () => sourceHTML,
+ }).deserialize({
+ schema: tiptapEditor.schema,
+ markdown: sourceMarkdown,
+ });
- expect(document.toJSON()).toEqual(expected.toJSON());
- });
+ expect(document.toJSON()).toEqual(expectedDoc().toJSON());
+ },
+ );
});