import { addPositionToWords, replaceWord, splitByWhitespaceBoundary, wordAtPosition, } from '../../../../../src/services/completion/completion.js' describe('addPositiontoWords', () => { it('adds the position to a word list', () => { const words = ['hey', ' ', 'this', ' ', 'is', ' ', 'fun'] const expected = [ { word: 'hey', start: 0, end: 3, }, { word: ' ', start: 3, end: 4, }, { word: 'this', start: 4, end: 8, }, { word: ' ', start: 8, end: 9, }, { word: 'is', start: 9, end: 11, }, { word: ' ', start: 11, end: 12, }, { word: 'fun', start: 12, end: 15, }, ] const res = addPositionToWords(words) expect(res).to.eql(expected) }) }) describe('splitByWhitespaceBoundary', () => { it('splits at whitespace boundaries', () => { const str = 'This is a #nice @test for you, @idiot@idiot.com' const expected = [ 'This', ' ', 'is', ' ', 'a', ' ', '#nice', ' ', '@test', ' ', 'for', ' ', 'you,', ' ', '@idiot@idiot.com', ] const res = splitByWhitespaceBoundary(str) expect(res).to.eql(expected) }) }) describe('wordAtPosition', () => { it('returns the word for a given string and postion, plus the start and end position of that word', () => { const str = 'Hey this is fun' const { word, start, end } = wordAtPosition(str, 4) expect(word).to.eql('this') expect(start).to.eql(4) expect(end).to.eql(8) }) }) describe('replaceWord', () => { it('replaces a word (with start and end) with another word in a given string', () => { const str = 'hey @take , how are you' const wordsWithPosition = addPositionToWords(splitByWhitespaceBoundary(str)) const toReplace = wordsWithPosition[2] expect(toReplace.word).to.eql('@take') const expected = 'hey @takeshitakenji , how are you' const res = replaceWord(str, toReplace, '@takeshitakenji') expect(res).to.eql(expected) }) })