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

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <max@nextcloud.com>2022-03-15 14:44:10 +0300
committerMax <max@nextcloud.com>2022-03-31 15:29:21 +0300
commit39cf02c6e67e1784e23b771bb92dcdfdf6c408ba (patch)
tree0c684a1f1b5020eb25be370141415aa7230143c4 /cypress
parent921080c90486ae4872984724f6ebccceb7d673a4 (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.md54
-rw-r--r--cypress/integration/Table.spec.js76
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)
+ }
+})