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