Some checks failed
Verify / Install node dependencies (push) Failing after 2s
Verify / Build packages (push) Has been skipped
Verify / Check linting & formatting (push) Has been skipped
Verify / Run unit tests (push) Has been skipped
Verify / Run e2e tests (shard 1/4) (push) Has been skipped
Verify / Run e2e tests (shard 2/4) (push) Has been skipped
Verify / Run e2e tests (shard 3/4) (push) Has been skipped
Verify / Run e2e tests (shard 4/4) (push) Has been skipped
Publish / Resolve publish config (push) Failing after 2s
Publish / Send notification to Slack (push) Has been skipped
Publish / Send failure notification to Slack (push) Failing after 8s
Verify / Merge e2e reports (push) Has been skipped
Publish / Build (push) Has been skipped
Publish / Bump Versions OR Release to Registry (push) Has been skipped
95 lines
3.4 KiB
TypeScript
95 lines
3.4 KiB
TypeScript
import { Blockquote } from '@tiptap/extension-blockquote'
|
|
import { Document } from '@tiptap/extension-document'
|
|
import { Heading } from '@tiptap/extension-heading'
|
|
import { Paragraph } from '@tiptap/extension-paragraph'
|
|
import { Text } from '@tiptap/extension-text'
|
|
import { MarkdownManager } from '@tiptap/markdown'
|
|
import { beforeEach, describe, expect, it } from 'vite-plus/test'
|
|
|
|
describe('Blockquote Markdown Conversion', () => {
|
|
let markdownManager: MarkdownManager
|
|
|
|
beforeEach(() => {
|
|
markdownManager = new MarkdownManager({
|
|
extensions: [Document, Paragraph, Text, Blockquote, Heading],
|
|
})
|
|
})
|
|
|
|
it('should convert a single-level blockquote to markdown', () => {
|
|
const markdown = '> This is a blockquote'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should convert a single-level blockquote with multiple paragraphs to markdown', () => {
|
|
const markdown = '> First paragraph\n>\n> Second paragraph'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should convert nested blockquotes to markdown', () => {
|
|
const markdown = '> Level 1\n>\n> > Level 2\n> >\n> > > Level 3'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should handle blockquotes with varying nesting depths', () => {
|
|
const markdown =
|
|
'> Level 1\n>\n> > Level 2\n> >\n> > > Level 3\n> >\n> > Back to level 2\n>\n> Back to level 1'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should convert nested blockquotes with multiple paragraphs', () => {
|
|
const markdown =
|
|
'> First paragraph\n>\n> Second paragraph\n>\n> > Nested paragraph\n> >\n> > > Deeply nested'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should handle a blockquote that jumps multiple levels deep', () => {
|
|
const markdown = '> Level 1\n>\n> > > Level 3 (jumped from 1 to 3)'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should handle blockquotes going back to shallower nesting', () => {
|
|
const markdown =
|
|
'> Level 1\n>\n> > Level 2\n> >\n> > > Level 3\n> >\n> > Back to level 2\n>\n> Back to level 1'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should handle blockquotes with text content at different levels', () => {
|
|
const markdown =
|
|
'> Outer quote with some text\n>\n> > Inner quote with more text\n> >\n> > > Innermost quote'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
|
|
it('should handle blockquotes with mixed content including headings', () => {
|
|
const markdown =
|
|
'> This is a block quote\n>\n> With more paragraphs\n>\n> # And a heading\n>\n> > And nested\n> >\n> > ## And another heading'
|
|
const json = markdownManager.parse(markdown)
|
|
const output = markdownManager.serialize(json)
|
|
|
|
expect(output.trim()).toBe(markdown)
|
|
})
|
|
})
|