124 lines
3.9 KiB
TypeScript
124 lines
3.9 KiB
TypeScript
import {RichText} from '../../../src/lib/strings/rich-text'
|
|
|
|
describe('richText.insert', () => {
|
|
const input = new RichText('hello world', [
|
|
{index: {start: 2, end: 7}, type: '', value: ''},
|
|
])
|
|
|
|
it('correctly adjusts entities (scenario A - before)', () => {
|
|
const output = input.clone().insert(0, 'test')
|
|
expect(output.text).toEqual('testhello world')
|
|
expect(output.entities?.[0].index.start).toEqual(6)
|
|
expect(output.entities?.[0].index.end).toEqual(11)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('llo w')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario B - inner)', () => {
|
|
const output = input.clone().insert(4, 'test')
|
|
expect(output.text).toEqual('helltesto world')
|
|
expect(output.entities?.[0].index.start).toEqual(2)
|
|
expect(output.entities?.[0].index.end).toEqual(11)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('lltesto w')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario C - after)', () => {
|
|
const output = input.clone().insert(8, 'test')
|
|
expect(output.text).toEqual('hello wotestrld')
|
|
expect(output.entities?.[0].index.start).toEqual(2)
|
|
expect(output.entities?.[0].index.end).toEqual(7)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('llo w')
|
|
})
|
|
})
|
|
|
|
describe('richText.delete', () => {
|
|
const input = new RichText('hello world', [
|
|
{index: {start: 2, end: 7}, type: '', value: ''},
|
|
])
|
|
|
|
it('correctly adjusts entities (scenario A - entirely outer)', () => {
|
|
const output = input.clone().delete(0, 9)
|
|
expect(output.text).toEqual('ld')
|
|
expect(output.entities?.length).toEqual(0)
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario B - entirely after)', () => {
|
|
const output = input.clone().delete(7, 11)
|
|
expect(output.text).toEqual('hello w')
|
|
expect(output.entities?.[0].index.start).toEqual(2)
|
|
expect(output.entities?.[0].index.end).toEqual(7)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('llo w')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario C - partially after)', () => {
|
|
const output = input.clone().delete(4, 11)
|
|
expect(output.text).toEqual('hell')
|
|
expect(output.entities?.[0].index.start).toEqual(2)
|
|
expect(output.entities?.[0].index.end).toEqual(4)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('ll')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario D - entirely inner)', () => {
|
|
const output = input.clone().delete(3, 5)
|
|
expect(output.text).toEqual('hel world')
|
|
expect(output.entities?.[0].index.start).toEqual(2)
|
|
expect(output.entities?.[0].index.end).toEqual(5)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('l w')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario E - partially before)', () => {
|
|
const output = input.clone().delete(1, 5)
|
|
expect(output.text).toEqual('h world')
|
|
expect(output.entities?.[0].index.start).toEqual(1)
|
|
expect(output.entities?.[0].index.end).toEqual(3)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual(' w')
|
|
})
|
|
|
|
it('correctly adjusts entities (scenario F - entirely before)', () => {
|
|
const output = input.clone().delete(0, 2)
|
|
expect(output.text).toEqual('llo world')
|
|
expect(output.entities?.[0].index.start).toEqual(0)
|
|
expect(output.entities?.[0].index.end).toEqual(5)
|
|
expect(
|
|
output.text.slice(
|
|
output.entities?.[0].index.start,
|
|
output.entities?.[0].index.end,
|
|
),
|
|
).toEqual('llo w')
|
|
})
|
|
})
|