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 =
'
| Firstname | Lastname | Age |
|---|
| Jill | Smith | 50 |
| Eve | Jackson | 94 |
| John | Doe | 80 |
'
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 =
'| Name | Description |
|---|
| Cyndi Lauper | Singer | Songwriter | Actress |
| Marie Curie | Scientist | Chemist | Physicist |
| Indira Gandhi | Prime minister | Politician |
'
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 =
'| Name | Description |
|---|
| Cyndi Lauper | Singer | Songwriter | Actress |
| Marie Curie | Scientist | Chemist | Physicist |
| Indira Gandhi | Prime minister | Politician |
'
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 =
'| Name | Description |
|---|
| Cyndi Lauper | Singer |
'
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()
})
})