about summary refs log tree commit diff
path: root/__tests__/lib/strings/rich-text.ts
diff options
context:
space:
mode:
Diffstat (limited to '__tests__/lib/strings/rich-text.ts')
-rw-r--r--__tests__/lib/strings/rich-text.ts123
1 files changed, 123 insertions, 0 deletions
diff --git a/__tests__/lib/strings/rich-text.ts b/__tests__/lib/strings/rich-text.ts
new file mode 100644
index 000000000..e52ac6cec
--- /dev/null
+++ b/__tests__/lib/strings/rich-text.ts
@@ -0,0 +1,123 @@
+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')
+  })
+})