85 lines
3.1 KiB
TypeScript
85 lines
3.1 KiB
TypeScript
|
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)
|
||
|
},
|
||
|
)
|
||
|
})
|