@portabletext/editor
Version:
Portable Text Editor made in React
143 lines (136 loc) • 3.82 kB
text/typescript
import {expect, test} from 'vitest'
import {compileSchemaDefinition, defineSchema} from '../editor/editor-schema'
import {createTestKeyGenerator} from '../internal-utils/test-key-generator'
import {getTersePt, parseTersePt, parseTersePtString} from './terse-pt'
const keyGenerator = createTestKeyGenerator()
test(getTersePt.name, () => {
const fooBlock = {
_key: 'b1',
_type: 'block',
children: [{_key: 's1', _type: 'span', text: 'foo'}],
}
const emptyBlock = {
_key: 'b2',
_type: 'block',
children: [{_key: 's2', _type: 'span', text: ''}],
}
const barBlock = {
_key: 'b3',
_type: 'block',
children: [{_key: 's3', _type: 'span', text: 'bar'}],
}
const softReturnBlock = {
_key: 'b4',
_type: 'block',
children: [{_key: 's4', _type: 'span', text: 'foo\nbar'}],
}
expect(getTersePt([fooBlock, barBlock])).toEqual(['foo', 'bar'])
expect(getTersePt([emptyBlock, barBlock])).toEqual(['', 'bar'])
expect(getTersePt([fooBlock, emptyBlock, barBlock])).toEqual([
'foo',
'',
'bar',
])
expect(getTersePt([fooBlock, softReturnBlock])).toEqual(['foo', 'foo\nbar'])
expect(
getTersePt([
{
_key: keyGenerator(),
_type: 'block',
children: [{_key: keyGenerator(), _type: 'span', text: 'foo'}],
},
]),
).toEqual(['foo'])
expect(
getTersePt([
{
_key: keyGenerator(),
_type: 'block',
children: [{_key: keyGenerator(), _type: 'span', text: 'foo'}],
listItem: 'number',
},
]),
).toEqual(['#:foo'])
expect(
getTersePt([
{
_key: keyGenerator(),
_type: 'block',
children: [{_key: keyGenerator(), _type: 'span', text: 'foo'}],
listItem: 'number',
style: 'h3',
},
]),
).toEqual(['#h3:foo'])
expect(
getTersePt([
{
_key: keyGenerator(),
_type: 'block',
children: [{_key: keyGenerator(), _type: 'span', text: 'foo'}],
level: 2,
listItem: 'number',
style: 'h3',
},
]),
).toEqual(['>>#h3:foo'])
})
test(parseTersePtString.name, () => {
expect(parseTersePtString('foo')).toEqual(['foo'])
expect(parseTersePtString('foo,bar')).toEqual(['foo,bar'])
expect(parseTersePtString('foo,bar|baz')).toEqual(['foo,bar', 'baz'])
expect(parseTersePtString('|foo')).toEqual(['', 'foo'])
expect(parseTersePtString('foo|')).toEqual(['foo', ''])
expect(parseTersePtString('foo|bar\nbaz')).toEqual(['foo', 'bar\nbaz'])
expect(parseTersePtString('f,oo||ba,r')).toEqual(['f,oo', '', 'ba,r'])
expect(parseTersePtString('|')).toEqual(['', ''])
expect(parseTersePtString('||')).toEqual(['', '', ''])
expect(parseTersePtString('>>#h3:foo')).toEqual(['>>#h3:foo'])
})
test(parseTersePt.name, () => {
expect(
parseTersePt(
{
schema: compileSchemaDefinition(defineSchema({})),
keyGenerator: createTestKeyGenerator(),
},
parseTersePtString('[image]|foo|>>#h4:bar|-:baz,fizz|,[stock-ticker],'),
),
).toEqual([
{
_key: 'k0',
_type: 'image',
},
{
_key: 'k1',
_type: 'block',
children: [{_key: 'k2', _type: 'span', text: 'foo'}],
},
{
_key: 'k3',
_type: 'block',
children: [{_key: 'k4', _type: 'span', text: 'bar'}],
level: 2,
listItem: 'number',
style: 'h4',
},
{
_key: 'k5',
_type: 'block',
children: [
{_key: 'k6', _type: 'span', text: 'baz'},
{_key: 'k7', _type: 'span', text: 'fizz'},
],
listItem: 'bullet',
},
{
_key: 'k8',
_type: 'block',
children: [
{_key: 'k9', _type: 'span', text: ''},
{_key: 'k10', _type: 'stock-ticker'},
{_key: 'k11', _type: 'span', text: ''},
],
},
])
})