1*082815dcSEvan Baconimport { 2*082815dcSEvan Bacon insertContentsAtOffset, 3*082815dcSEvan Bacon replaceContentsWithOffset, 4*082815dcSEvan Bacon searchFromOffset, 5*082815dcSEvan Bacon} from '../commonCodeMod'; 6*082815dcSEvan Bacon 7*082815dcSEvan Bacondescribe(insertContentsAtOffset, () => { 8*082815dcSEvan Bacon it('should insert in the middle', () => { 9*082815dcSEvan Bacon expect(insertContentsAtOffset('aabbcc', 'dd', 4)).toEqual('aabbddcc'); 10*082815dcSEvan Bacon }); 11*082815dcSEvan Bacon 12*082815dcSEvan Bacon it('should insert at the head', () => { 13*082815dcSEvan Bacon expect(insertContentsAtOffset('aabbcc', 'dd', 0)).toEqual('ddaabbcc'); 14*082815dcSEvan Bacon }); 15*082815dcSEvan Bacon 16*082815dcSEvan Bacon it('should insert at the tail', () => { 17*082815dcSEvan Bacon expect(insertContentsAtOffset('aabbcc', 'dd', 6)).toEqual('aabbccdd'); 18*082815dcSEvan Bacon }); 19*082815dcSEvan Bacon 20*082815dcSEvan Bacon it('should throw for boundary errors', () => { 21*082815dcSEvan Bacon expect(() => { 22*082815dcSEvan Bacon insertContentsAtOffset('aabbcc', 'dd', -1); 23*082815dcSEvan Bacon }).toThrow(); 24*082815dcSEvan Bacon expect(() => { 25*082815dcSEvan Bacon insertContentsAtOffset('aabbcc', 'dd', 999); 26*082815dcSEvan Bacon }).toThrow(); 27*082815dcSEvan Bacon }); 28*082815dcSEvan Bacon}); 29*082815dcSEvan Bacon 30*082815dcSEvan Bacondescribe(replaceContentsWithOffset, () => { 31*082815dcSEvan Bacon it('should support replacement in the middle', () => { 32*082815dcSEvan Bacon expect(replaceContentsWithOffset('abc', 'd', 1, 1)).toEqual('adc'); 33*082815dcSEvan Bacon expect(replaceContentsWithOffset('aabbcc', '', 2, 3)).toEqual('aacc'); 34*082815dcSEvan Bacon expect(replaceContentsWithOffset('aabbcc', 'dd', 2, 3)).toEqual('aaddcc'); 35*082815dcSEvan Bacon expect(replaceContentsWithOffset('aabbcc', 'ExtendString', 2, 3)).toEqual('aaExtendStringcc'); 36*082815dcSEvan Bacon }); 37*082815dcSEvan Bacon 38*082815dcSEvan Bacon it('should throw for boundary errors', () => { 39*082815dcSEvan Bacon expect(() => { 40*082815dcSEvan Bacon replaceContentsWithOffset('aabbcc', 'dd', -1, -1); 41*082815dcSEvan Bacon }).toThrow(); 42*082815dcSEvan Bacon expect(() => { 43*082815dcSEvan Bacon replaceContentsWithOffset('aabbcc', 'dd', 0, 999); 44*082815dcSEvan Bacon }).toThrow(); 45*082815dcSEvan Bacon expect(() => { 46*082815dcSEvan Bacon replaceContentsWithOffset('aabbcc', 'dd', 2, 1); 47*082815dcSEvan Bacon }).toThrow(); 48*082815dcSEvan Bacon }); 49*082815dcSEvan Bacon}); 50*082815dcSEvan Bacon 51*082815dcSEvan Bacondescribe(searchFromOffset, () => { 52*082815dcSEvan Bacon it('should return matched index + offset', () => { 53*082815dcSEvan Bacon expect(searchFromOffset('aabbaabb', /aabb/, 0)).toBe(0); 54*082815dcSEvan Bacon expect(searchFromOffset('aabbaabb', /aabb/, 2)).toBe(4); 55*082815dcSEvan Bacon }); 56*082815dcSEvan Bacon 57*082815dcSEvan Bacon it('should return -1 if not found', () => { 58*082815dcSEvan Bacon expect(searchFromOffset('aabbaabb', /cc/, 2)).toBe(-1); 59*082815dcSEvan Bacon }); 60*082815dcSEvan Bacon 61*082815dcSEvan Bacon it('should return -1 if offset out of bound', () => { 62*082815dcSEvan Bacon expect(searchFromOffset('aabbaabb', /cc/, 100)).toBe(-1); 63*082815dcSEvan Bacon }); 64*082815dcSEvan Bacon}); 65