mirror of
https://github.com/ueberdosis/tiptap.git
synced 2025-01-09 21:38:18 +08:00
184 lines
5.0 KiB
TypeScript
184 lines
5.0 KiB
TypeScript
/// <reference types="cypress" />
|
|
|
|
import { getSchema, isNodeEmpty } from '@tiptap/core'
|
|
import Document from '@tiptap/extension-document'
|
|
import Image from '@tiptap/extension-image'
|
|
import StarterKit from '@tiptap/starter-kit'
|
|
|
|
const schema = getSchema([StarterKit])
|
|
const modifiedSchema = getSchema([StarterKit.configure({ document: false }), Document.extend({ content: 'heading block*' })])
|
|
const imageSchema = getSchema([StarterKit.configure({ document: false }), Document.extend({ content: 'image block*' }), Image])
|
|
|
|
describe('isNodeEmpty', () => {
|
|
describe('with default schema', () => {
|
|
it('should return false when text has content', () => {
|
|
const node = schema.nodeFromJSON({ type: 'text', text: 'Hello world!' })
|
|
|
|
expect(isNodeEmpty(node)).to.eq(false)
|
|
})
|
|
|
|
it('should return false when a paragraph has text', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'paragraph',
|
|
content: [{ type: 'text', text: 'Hello world!' }],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(false)
|
|
})
|
|
|
|
it('should return true when a paragraph has no content', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'paragraph',
|
|
content: [],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('should return true when a paragraph has additional attrs & no content', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'paragraph',
|
|
content: [],
|
|
attrs: {
|
|
id: 'test',
|
|
},
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('should return true when a paragraph has additional marks & no content', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'paragraph',
|
|
content: [],
|
|
attrs: {
|
|
id: 'test',
|
|
},
|
|
marks: [{ type: 'bold' }],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('should return false when a document has text', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{
|
|
type: 'paragraph',
|
|
content: [{ type: 'text', text: 'Hello world!' }],
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(false)
|
|
})
|
|
it('should return true when a document has an empty paragraph', () => {
|
|
const node = schema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{
|
|
type: 'paragraph',
|
|
content: [],
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
})
|
|
|
|
describe('with modified schema', () => {
|
|
it('should return false when a document has a filled heading', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{
|
|
type: 'heading',
|
|
content: [
|
|
{ type: 'text', text: 'Hello world!' },
|
|
],
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(false)
|
|
})
|
|
|
|
it('should return false when a document has a filled paragraph', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'heading' },
|
|
{
|
|
type: 'paragraph',
|
|
content: [
|
|
{ type: 'text', text: 'Hello world!' },
|
|
],
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(false)
|
|
})
|
|
|
|
it('should return true when a document has an empty heading', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'heading', content: [] },
|
|
{ type: 'paragraph', content: [] },
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('should return true when a document has an empty heading with attrs', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'heading', content: [], attrs: { level: 2 } },
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('should return true when a document has an empty heading & paragraph', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'heading', content: [] },
|
|
{ type: 'paragraph', content: [] },
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
it('should return true when a document has an empty heading & paragraph with attributes', () => {
|
|
const node = modifiedSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'heading', content: [], attrs: { id: 'test' } },
|
|
{ type: 'paragraph', content: [], attrs: { id: 'test' } },
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
|
|
it('can handle an image node', () => {
|
|
const node = imageSchema.nodeFromJSON({
|
|
type: 'doc',
|
|
content: [
|
|
{ type: 'image', attrs: { src: 'https://examples.com' } },
|
|
{ type: 'heading', content: [] },
|
|
],
|
|
})
|
|
|
|
expect(isNodeEmpty(node)).to.eq(true)
|
|
})
|
|
})
|
|
})
|