mirror of
https://github.com/langgenius/dify.git
synced 2026-03-06 16:16:38 +08:00
142 lines
4.2 KiB
TypeScript
142 lines
4.2 KiB
TypeScript
import type { EditorConfig, LexicalEditor } from 'lexical'
|
|
import { $createParagraphNode, $getRoot } from 'lexical'
|
|
import { createTestEditor, withEditorUpdate } from '../__tests__/utils'
|
|
import { $createCustomTextNode, CustomTextNode } from './node'
|
|
|
|
const createCustomTextTestEditor = () => createTestEditor([CustomTextNode])
|
|
|
|
describe('CustomTextNode', () => {
|
|
let editor: LexicalEditor
|
|
|
|
beforeEach(() => {
|
|
editor = createCustomTextTestEditor()
|
|
})
|
|
|
|
afterEach(() => {
|
|
editor.setRootElement(null)
|
|
})
|
|
|
|
describe('Static Methods', () => {
|
|
it('should return correct type', () => {
|
|
expect(CustomTextNode.getType()).toBe('custom-text')
|
|
})
|
|
|
|
it('should clone a node', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const paragraph = $createParagraphNode()
|
|
$getRoot().append(paragraph)
|
|
const node = $createCustomTextNode('hello')
|
|
paragraph.append(node)
|
|
const cloned = CustomTextNode.clone(node)
|
|
expect(cloned).toBeInstanceOf(CustomTextNode)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('createDOM', () => {
|
|
it('should create a DOM element', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('test')
|
|
const config: EditorConfig = { namespace: 'test', theme: {} }
|
|
const dom = node.createDOM(config)
|
|
expect(dom).toBeDefined()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('exportJSON', () => {
|
|
it('should export correct JSON structure', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const paragraph = $createParagraphNode()
|
|
$getRoot().append(paragraph)
|
|
const node = $createCustomTextNode('hello world')
|
|
paragraph.append(node)
|
|
const json = node.exportJSON()
|
|
expect(json.type).toBe('custom-text')
|
|
expect(json.version).toBe(1)
|
|
expect(json.text).toBe('hello world')
|
|
expect(json.format).toBeDefined()
|
|
expect(json.detail).toBeDefined()
|
|
expect(json.style).toBeDefined()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('importJSON', () => {
|
|
it('should create a text node from serialized data', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const serialized = {
|
|
type: 'custom-text' as const,
|
|
version: 1,
|
|
text: 'imported text',
|
|
format: 0,
|
|
detail: 0,
|
|
mode: 'normal' as const,
|
|
style: '',
|
|
}
|
|
const node = CustomTextNode.importJSON(serialized)
|
|
expect(node).toBeDefined()
|
|
expect(node.getTextContent()).toBe('imported text')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('isSimpleText', () => {
|
|
it('should return true for custom-text type with mode 0', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('simple')
|
|
expect(node.isSimpleText()).toBe(true)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('getTextContent', () => {
|
|
it('should return the text content', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('my content')
|
|
expect(node.getTextContent()).toBe('my content')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('$createCustomTextNode', () => {
|
|
it('should create a CustomTextNode instance', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('test')
|
|
expect(node).toBeInstanceOf(CustomTextNode)
|
|
})
|
|
})
|
|
|
|
it('should set the text content', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('hello')
|
|
expect(node.getTextContent()).toBe('hello')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('Edge Cases', () => {
|
|
it('should handle empty string', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('')
|
|
expect(node.getTextContent()).toBe('')
|
|
})
|
|
})
|
|
|
|
it('should handle special characters', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const node = $createCustomTextNode('{{#context#}}')
|
|
expect(node.getTextContent()).toBe('{{#context#}}')
|
|
})
|
|
})
|
|
|
|
it('should handle very long text', () => {
|
|
withEditorUpdate(editor, () => {
|
|
const longText = 'A'.repeat(10000)
|
|
const node = $createCustomTextNode(longText)
|
|
expect(node.getTextContent()).toBe(longText)
|
|
})
|
|
})
|
|
})
|
|
})
|