about summary refs log tree commit diff
path: root/__tests__/lib/strings/mention-manip.test.ts
diff options
context:
space:
mode:
Diffstat (limited to '__tests__/lib/strings/mention-manip.test.ts')
-rw-r--r--__tests__/lib/strings/mention-manip.test.ts84
1 files changed, 84 insertions, 0 deletions
diff --git a/__tests__/lib/strings/mention-manip.test.ts b/__tests__/lib/strings/mention-manip.test.ts
new file mode 100644
index 000000000..f9075763e
--- /dev/null
+++ b/__tests__/lib/strings/mention-manip.test.ts
@@ -0,0 +1,84 @@
+import {
+  getMentionAt,
+  insertMentionAt,
+} from '../../../src/lib/strings/mention-manip'
+
+describe('getMentionAt', () => {
+  type Case = [string, number, string | undefined]
+  const cases: Case[] = [
+    ['hello @alice goodbye', 0, undefined],
+    ['hello @alice goodbye', 1, undefined],
+    ['hello @alice goodbye', 2, undefined],
+    ['hello @alice goodbye', 3, undefined],
+    ['hello @alice goodbye', 4, undefined],
+    ['hello @alice goodbye', 5, undefined],
+    ['hello @alice goodbye', 6, 'alice'],
+    ['hello @alice goodbye', 7, 'alice'],
+    ['hello @alice goodbye', 8, 'alice'],
+    ['hello @alice goodbye', 9, 'alice'],
+    ['hello @alice goodbye', 10, 'alice'],
+    ['hello @alice goodbye', 11, 'alice'],
+    ['hello @alice goodbye', 12, 'alice'],
+    ['hello @alice goodbye', 13, undefined],
+    ['hello @alice goodbye', 14, undefined],
+    ['@alice', 0, 'alice'],
+    ['@alice hello', 0, 'alice'],
+    ['@alice hello', 1, 'alice'],
+    ['@alice hello', 2, 'alice'],
+    ['@alice hello', 3, 'alice'],
+    ['@alice hello', 4, 'alice'],
+    ['@alice hello', 5, 'alice'],
+    ['@alice hello', 6, 'alice'],
+    ['@alice hello', 7, undefined],
+    ['alice@alice', 0, undefined],
+    ['alice@alice', 6, undefined],
+  ]
+
+  it.each(cases)(
+    'given input string %p and cursor position %p, returns %p',
+    (str, cursorPos, expected) => {
+      const output = getMentionAt(str, cursorPos)
+      expect(output?.value).toEqual(expected)
+    },
+  )
+})
+
+describe('insertMentionAt', () => {
+  type Case = [string, number, string]
+  const cases: Case[] = [
+    ['hello @alice goodbye', 0, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 1, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 2, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 3, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 4, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 5, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 6, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 7, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 8, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 9, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 10, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 11, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 12, 'hello @alice.com  goodbye'],
+    ['hello @alice goodbye', 13, 'hello @alice goodbye'],
+    ['hello @alice goodbye', 14, 'hello @alice goodbye'],
+    ['@alice', 0, '@alice.com '],
+    ['@alice hello', 0, '@alice.com  hello'],
+    ['@alice hello', 1, '@alice.com  hello'],
+    ['@alice hello', 2, '@alice.com  hello'],
+    ['@alice hello', 3, '@alice.com  hello'],
+    ['@alice hello', 4, '@alice.com  hello'],
+    ['@alice hello', 5, '@alice.com  hello'],
+    ['@alice hello', 6, '@alice.com  hello'],
+    ['@alice hello', 7, '@alice hello'],
+    ['alice@alice', 0, 'alice@alice'],
+    ['alice@alice', 6, 'alice@alice'],
+  ]
+
+  it.each(cases)(
+    'given input string %p and cursor position %p, returns %p',
+    (str, cursorPos, expected) => {
+      const output = insertMentionAt(str, cursorPos, 'alice.com')
+      expect(output).toEqual(expected)
+    },
+  )
+})