import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { TableCellInnerFormat } from '../../formats'; import { TableUp } from '../../table-up'; import { createQuillWithTableModule, createTable } from './utils'; beforeEach(() => { vi.useFakeTimers(); }); afterEach(() => { vi.useRealTimers(); }); describe('remove column from table', () => { it('remove column', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(3, 3); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.removeCol([tds[0], tds[1], tds[3], tds[4]]); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `


${ new Array(3).fill(0).map(() => ` `).join('\n') }



`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); it('remove column in not full table', async () => { const quill = await createTable(1, 3, { full: false }); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.removeCol([tds[0]]); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `


2

3


`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); it('remove column. remove colspan start cell and rowspan cell', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(4, 4); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.mergeCells([tds[4], tds[5], tds[6], tds[8], tds[9], tds[10]]); await vi.runAllTimersAsync(); tableModule.mergeCells([tds[13], tds[14], tds[15]]); await vi.runAllTimersAsync(); tableModule.removeCol([tds[1], tds[2]]); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `










`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); }); describe('remove row from table', () => { it('remove row', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(3, 3); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.removeRow([tds[0], tds[1], tds[2], tds[3], tds[4], tds[5]]); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `


${new Array(3).fill(0).map(() => ``).join('\n')} ${new Array(3).fill(0).map(() => ``).join('\n')}



`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); it('remove row. remove rowspan cell at start index', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(3, 3); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.mergeCells([tds[1], tds[2], tds[4], tds[5]]); await vi.runAllTimersAsync(); tableModule.removeRow([tds[0]]); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `


${new Array(3).fill(0).map(() => ``).join('\n')} ${new Array(3).fill(0).map(() => ``).join('\n')}





`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); }); describe('unusual delete', () => { it('delete head from outside table to inside', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(5, 5); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.mergeCells([tds[0], tds[1], tds[2], tds[5], tds[6], tds[7], tds[10], tds[11], tds[12]]); tableModule.mergeCells([tds[4], tds[9], tds[14], tds[19]]); tableModule.mergeCells([tds[17], tds[18], tds[22], tds[23]]); await vi.runAllTimersAsync(); quill.deleteText(0, 16); await vi.runAllTimersAsync(); // After remove all `col`, `fixUnusuaDeletelTable` will remove whole table. // The remaining two rows around expect(quill.root).toEqualHTML(`



`); }); it('delete tail from inside table to outside', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(5, 5); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.mergeCells([tds[0], tds[1], tds[2], tds[5], tds[6], tds[7], tds[10], tds[11], tds[12]]); await vi.runAllTimersAsync(); tableModule.mergeCells([tds[4], tds[9], tds[14], tds[19]]); await vi.runAllTimersAsync(); tableModule.mergeCells([tds[17], tds[18], tds[22], tds[23]]); await vi.runAllTimersAsync(); quill.deleteText(9, 5); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `







`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); it('delete table inside cell', async () => { const quill = createQuillWithTableModule(`


`); const tableModule = quill.getModule(TableUp.moduleName) as TableUp; tableModule.insertTable(5, 5); await vi.runAllTimersAsync(); const tds = quill.scroll.descendants(TableCellInnerFormat, 0); tableModule.mergeCells([tds[0], tds[1], tds[2], tds[5], tds[6], tds[7], tds[10], tds[11], tds[12]]); tableModule.mergeCells([tds[4], tds[9], tds[14], tds[19]]); tableModule.mergeCells([tds[17], tds[18], tds[22], tds[23]]); await vi.runAllTimersAsync(); quill.deleteText(10, 3); await vi.runAllTimersAsync(); expect(quill.root).toEqualHTML( `


${new Array(5).fill(``).join('\n')} ${new Array(4).fill(``).join('\n')}








`, { ignoreAttrs: ['data-wrap-tag', 'data-tag', 'class', 'style', 'data-table-id', 'data-row-id', 'data-col-id', 'data-rowspan', 'data-colspan', 'contenteditable'] }, ); }); });