import { Editor } from '@tiptap/core' import Document from '@tiptap/extension-document' import Paragraph from '@tiptap/extension-paragraph' import Text from '@tiptap/extension-text' import { describe, expect, it } from 'vite-plus/test' import { TableCell } from '../cell/table-cell.js' import { TableRow } from '../row/table-row.js' import { Table } from '../table/table.js' import { TableHeader } from './table-header.js' describe('extension table header', () => { const editorElClass = 'tiptap' let editor: Editor | null = null const createEditorEl = () => { const editorEl = document.createElement('div') editorEl.classList.add(editorElClass) document.body.appendChild(editorEl) return editorEl } const getEditorEl = () => document.querySelector(`.${editorElClass}`) it('should start with a Table', () => { const content = '
FirstnameLastnameAge
JillSmith50
EveJackson94
JohnDoe80
' editor = new Editor({ element: createEditorEl(), extensions: [ Document, Text, Paragraph, TableCell, TableHeader, TableRow, Table.configure({ resizable: true, }), ], content, }) expect(editor.getHTML()).toContain('Jackson') editor?.destroy() getEditorEl()?.remove() }) it('should parse a single colWidth', () => { const content = '
NameDescription
Cyndi LauperSingerSongwriterActress
Marie CurieScientistChemistPhysicist
Indira GandhiPrime ministerPolitician
' editor = new Editor({ element: createEditorEl(), extensions: [ Document, Text, Paragraph, TableCell, TableHeader, TableRow, Table.configure({ resizable: true, }), ], content, }) // @ts-expect-error content is not guaranteed to be this shape expect(editor.getJSON().content[0].content[0].content[0].attrs.colwidth[0]).toBe(200) editor?.destroy() getEditorEl()?.remove() }) it('should parse multiple colWidths', () => { const content = '
NameDescription
Cyndi LauperSingerSongwriterActress
Marie CurieScientistChemistPhysicist
Indira GandhiPrime ministerPolitician
' editor = new Editor({ element: createEditorEl(), extensions: [ Document, Text, Paragraph, TableCell, TableHeader, TableRow, Table.configure({ resizable: true, }), ], content, }) // @ts-expect-error content is not guaranteed to be this shape expect(editor.getJSON().content[0].content[0].content[1].attrs.colwidth).toEqual([150, 100]) editor?.destroy() getEditorEl()?.remove() }) it('should parse the colgroup col widths for a header row', () => { const content = '
NameDescription
Cyndi LauperSinger
' editor = new Editor({ element: createEditorEl(), extensions: [ Document, Text, Paragraph, TableCell, TableHeader, TableRow, Table.configure({ resizable: true, }), ], content, }) const headerRow = editor.getJSON().content?.[0].content?.[0] expect(headerRow?.content?.[0].attrs?.colwidth).toEqual([64]) expect(headerRow?.content?.[1].attrs?.colwidth).toEqual([128]) editor?.destroy() getEditorEl()?.remove() }) })