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`
`;
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);
});
});
});
});