import { source } from 'common-tags'; import Editor from '@toast-ui/editor'; import mergedTableCellPlugin from '@/index'; describe('markdown merged table plugin', () => { let container: HTMLElement, editor: Editor; function removeDataAttr(html: string) { return html .replace(/\sdata-nodeid="\d{1,}"/g, '') .replace(/\sclass="toastui-editor-md-preview-highlight"/g, '') .trim(); } function assertMdPreviewHTML(html: string) { const mdPreviewContentEl = editor.getEditorElements().mdPreview.firstChild as HTMLElement; expect(removeDataAttr(mdPreviewContentEl.innerHTML)).toContain(html); } beforeEach(() => { container = document.createElement('div'); document.body.appendChild(container); editor = new Editor({ el: container, previewStyle: 'vertical', plugins: [mergedTableCellPlugin], }); }); afterEach(() => { editor.destroy(); document.body.removeChild(container); }); it('should render basic table properly', () => { const content = source` | head1 | head2 | | --- | --- | | cell1 | cell2 | `; const result = source`
head1 head2
cell1 cell2
`; editor.setMarkdown(content); assertMdPreviewHTML(result); }); it('should render merged cell with colspan header properly', () => { const content = source` | @cols=2:mergedHead1 | @cols=2:mergedHead2 | | --- | --- | --- | --- | | cell1 | cell2 | cell3 | cell4 | `; const result = source`
mergedHead1 mergedHead2
cell1 cell2 cell3 cell4
`; editor.setMarkdown(content); assertMdPreviewHTML(result); }); it('should render merged cell with colspan header, body properly', () => { const content = source` | @cols=2:mergedHead1 | @cols=2:mergedHead2 | | --- | --- | --- | --- | | @cols=2:mergedCell1 | cell2 | cell3 | `; const result = source`
mergedHead1 mergedHead2
mergedCell1 cell2 cell3
`; editor.setMarkdown(content); assertMdPreviewHTML(result); }); it('should render merged cell with rowspan body properly', () => { const content = source` | head1 | head2 | | --- | --- | | cell1-1 | @rows=2:cell1-2 | | cell2-1 | cell2-2 | `; const result = source`
head1 head2
cell1-1 cell1-2
cell2-1
`; editor.setMarkdown(content); assertMdPreviewHTML(result); }); describe('should render merged cell with rowspan, colspan properly', () => { const examples = [ { no: 1, content: source` | @cols=2:mergedHead1 | @cols=2:mergedHead2 | | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | cell1-3 | | @rows=3:mergedCell2-1 | cell2-2 | cell2-3 | cell2-4 | | cell3-1 | cell3-2 | cell3-3 | cell3-4 | | cell4-1 | cell4-2 | cell4-3 | cell4-4 | | cell5-1 | cell5-2 | cell5-3 | cell5-4 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 cell1-3
mergedCell2-1 cell2-2 cell2-3 cell2-4
cell3-1 cell3-2 cell3-3
cell4-1 cell4-2 cell4-3
cell5-1 cell5-2 cell5-3 cell5-4
`, }, { no: 2, content: source` | @cols=2:mergedHead1 | @cols=2:mergedHead2 | | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | cell1-3 | | @rows=2:mergedCell2-1 | cell2-2 | cell2-3 | cell2-4 | | cell3-1 | cell3-2 | cell3-3 | cell3-4 | | @cols=3:@rows=2:cell4-1 | cell4-2 | cell4-3 | cell4-4 | | cell5-1 | cell5-2 | cell5-3 | cell5-4 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 cell1-3
mergedCell2-1 cell2-2 cell2-3 cell2-4
cell3-1 cell3-2 cell3-3
cell4-1 cell4-2
cell5-1
`, }, { no: 3, content: source` | @cols=2:mergedHead1 | @cols=2:mergedHead2 | | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | cell1-3 | | @rows=2:mergedCell2-1 | cell2-2 | cell2-3 | cell2-4 | | cell3-1 | cell3-2 | cell3-3 | cell3-4 | | @cols=3:@rows=2:cell4-1 | cell4-2 | cell4-3 | cell4-4 | | @rows=2:cell5-1 | cell5-2 | cell5-3 | cell5-4 | | cell6-1 | cell6-2 | cell6-3 | cell6-4 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 cell1-3
mergedCell2-1 cell2-2 cell2-3 cell2-4
cell3-1 cell3-2 cell3-3
cell4-1 cell4-2
cell5-1
cell6-1 cell6-2 cell6-3
`, }, { no: 4, content: source` | @cols=2:mergedHead1 | @cols=5:mergedHead2 | | --- | --- | --- | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | cell1-3 | cell1-4 | cell1-5 | cell1-6 | | @rows=2:mergedCell2-1 | @rows=2:mergedCell2-2 | cell2-3 | cell2-4 | cell2-5 | cell2-6 | | cell3-1 | cell3-2 | cell3-3 | cell3-4 | cell3-5 | cell3-6 | | @cols=3:@rows=2:mergedCell4-1 | cell4-2 | cell4-3 | cell4-4 | | @rows=2:mergedCell5-1 | cell5-2 | cell5-3 | cell5-4 | cell5-5 | | cell6-1 | cell6-2 | cell6-3 | cell6-4 | cell6-5 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 cell1-3 cell1-4 cell1-5 cell1-6
mergedCell2-1 mergedCell2-2 cell2-3 cell2-4 cell2-5 cell2-6
cell3-1 cell3-2 cell3-3 cell3-4 cell3-5
mergedCell4-1 cell4-2 cell4-3 cell4-4
mergedCell5-1 cell5-2 cell5-3 cell5-4
cell6-1 cell6-2 cell6-3 cell6-4 cell6-5
`, }, { no: 5, content: source` | @cols=2:mergedHead1 | @cols=5:mergedHead2 | | --- | --- | --- | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | @cols=2:@rows=5:mergedCell1-3 | cell1-4 | cell1-5 | cell1-6 | | @rows=2:mergedCell2-1 | @rows=2:mergedCell2-2 | cell2-3 | cell2-4 | cell2-5 | cell2-6 | | cell3-1 | cell3-2 | | @cols=3:@rows=2:mergedCell4-1 | cell4-2 | | cell5-1 | cell5-2 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 mergedCell1-3 cell1-4 cell1-5
mergedCell2-1 mergedCell2-2 cell2-3 cell2-4 cell2-5
cell3-1 cell3-2
mergedCell4-1 cell4-2
cell5-1 cell5-2
`, }, { no: 6, content: source` | @cols=2:mergedHead1 | @cols=3:mergedHead2 | | --- | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | cell1-2 | @cols=2:@rows=5:mergedCell1-3 | | @rows=2:mergedCell2-1 | @rows=2:mergedCell2-2 | cell2-3 | cell2-4 | cell2-5 | cell2-6 | | cell3-1 | | cell4-1 | cell4-2 | | cell5-1 | cell5-2 | cell5-3 | cell5-4 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 cell1-2 mergedCell1-3
mergedCell2-1 mergedCell2-2 cell2-3
cell3-1
cell4-1 cell4-2
cell5-1 cell5-2 cell5-3
`, }, { no: 7, content: source` | @cols=2:mergedHead1 | @cols=3:mergedHead2 | | --- | --- | --- | --- | --- | | @cols=2:mergedCell1-1 | @rows=3:mergedCell1-2 | @cols=2:@rows=5:mergedCell1-3 | | @rows=2:mergedCell2-1 | @rows=2:mergedCell2-2 | | | cell4-1 | cell4-2 | | | cell5-1 | cell5-2 | cell5-3 | `, result: source`
mergedHead1 mergedHead2
mergedCell1-1 mergedCell1-2 mergedCell1-3
mergedCell2-1 mergedCell2-2
cell4-1 cell4-2
cell5-1 cell5-2 cell5-3
`, }, { no: 8, content: source` | @cols=2:foo"bar" | @cols=2:baz | | --- | --- | --- | --- | | @cols=2:foo"bar" | cell1-2 | cell1-3 | | @rows=2:baz | cell2-2 | cell2-3 | cell2-4 | | cell3-1 | cell3-2 | cell3-3 | cell3-4 | | @cols=3:@rows=2:foo"bar"baz | cell4-2 | cell4-3 | cell4-4 | | cell5-1 | cell5-2 | cell5-3 | cell5-4 | `, result: source`
foo"bar" baz
foo"bar" cell1-2 cell1-3
baz cell2-2 cell2-3 cell2-4
cell3-1 cell3-2 cell3-3
foo"bar"baz cell4-2
cell5-1
`, }, ]; examples.forEach(({ no, content, result }) => { it(` - example${no}`, () => { editor.setMarkdown(content); assertMdPreviewHTML(result); }); }); }); });