diff options
author | Max <max@nextcloud.com> | 2022-03-15 14:44:10 +0300 |
---|---|---|
committer | Max <max@nextcloud.com> | 2022-03-31 15:29:21 +0300 |
commit | 39cf02c6e67e1784e23b771bb92dcdfdf6c408ba (patch) | |
tree | 0c684a1f1b5020eb25be370141415aa7230143c4 /cypress | |
parent | 921080c90486ae4872984724f6ebccceb7d673a4 (diff) |
fix: keep tables separate in markdown
Also make sure that table rows are rendered on one line each.
Signed-off-by: Max <max@nextcloud.com>
Diffstat (limited to 'cypress')
-rw-r--r-- | cypress/fixtures/Table.md | 54 | ||||
-rw-r--r-- | cypress/integration/Table.spec.js | 76 |
2 files changed, 130 insertions, 0 deletions
diff --git a/cypress/fixtures/Table.md b/cypress/fixtures/Table.md new file mode 100644 index 000000000..634544249 --- /dev/null +++ b/cypress/fixtures/Table.md @@ -0,0 +1,54 @@ +## Preserve Tables + +This is a table + +| Header | other Header | +|--------|--------------| +| Cell | other cell | +| Cell | other cell | + +--- + +This is a table + +| Header | other Header | +|--------|--------------| +| Cell | other cell | +| Cell | other cell | + +## Create a table + +insertTable + +--- + +| | | | +|--|--|--| +| | | | +| | | | + +did insertTable + +## Create second tables + +| | | | +|--|--|--| +| | | | +| | | | + +insertTable + +--- + +| | | | +|--|--|--| +| | | | +| | | | + +| | | | +|--|--|--| +| | | | +| | | | + +did insertTable + diff --git a/cypress/integration/Table.spec.js b/cypress/integration/Table.spec.js new file mode 100644 index 000000000..a04601123 --- /dev/null +++ b/cypress/integration/Table.spec.js @@ -0,0 +1,76 @@ +import Table from './../../src/nodes/Table' +import TableBody from './../../src/nodes/TableBody' +import TableCell from './../../src/nodes/TableCell' +import TableHead from './../../src/nodes/TableHead' +import TableHeader from './../../src/nodes/TableHeader' +import TableRow from './../../src/nodes/TableRow' +import Markdown from './../../src/extensions/Markdown' +import markdownit from './../../src/markdownit' +import { createMarkdownSerializer } from './../../src/extensions/Markdown'; +import { findChildren, findChildrenByType } from 'prosemirror-utils' +import createEditor from './../../src/tests/createEditor' +import testData from '../fixtures/Table.md' + +describe('ListItem extension integrated in the editor', () => { + + const editor = createEditor({ + content: '', + extensions: [ + Markdown, + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, + ], + }) + + for (const spec of testData.split(/#+\s+/)){ + const [description, ...rest] = spec.split(/\n/) + const [input, output] = rest.join('\n').split(/\n\n---\n\n/) + if (!description) { + continue + } + it(description, () => { + expect(spec).to.include('\n') + expect(input).to.be.ok + expect(output).to.be.ok + loadMarkdown(input) + runCommands() + expectMarkdown(output.replace(/\n*$/, '')) + }) + } + + function loadMarkdown(markdown) { + editor.commands.setContent(markdownit.render(markdown)) + } + + function runCommands() { + let found + while (found = findCommand()) { + const name = found.node.text + editor.commands.setTextSelection(found.pos) + editor.commands[name]() + const updated = findCommand() + editor.commands.setTextSelection(updated.pos) + editor.commands.insertContent('did ') + } + } + + function findCommand() { + const doc = editor.state.doc + return findChildren(doc, child => { + return child.isText && editor.commands.hasOwnProperty(child.text) + })[0] + } + + function expectMarkdown(markdown) { + expect(getMarkdown().replace(/\n$/, '')).to.equal(markdown) + } + + function getMarkdown() { + const serializer = createMarkdownSerializer(editor.schema) + return serializer.serialize(editor.state.doc) + } +}) |