Changeset: Fix off-by-one bug in makeSplice

This commit is contained in:
Richard Hansen 2021-12-13 00:04:05 -05:00
parent 30d68df396
commit 748d661495
2 changed files with 8 additions and 1 deletions

View file

@ -1493,7 +1493,7 @@ exports.identity = (N) => exports.pack(N, N, '', '');
exports.makeSplice = (orig, start, ndel, ins, attribs, pool) => {
if (start < 0) throw new RangeError(`start index must be non-negative (is ${start})`);
if (ndel < 0) throw new RangeError(`characters to delete must be non-negative (is ${ndel})`);
if (start >= orig.length) start = orig.length - 1;
if (start > orig.length) start = orig.length;
if (ndel > orig.length - start) ndel = orig.length - start;
const deleted = orig.substring(start, start + ndel);
const assem = exports.smartOpAssembler();

View file

@ -70,6 +70,13 @@ describe('easysync-other', function () {
expect(t2).to.equal('a\nb\ncdef\n');
});
it('makeSplice at the end', async function () {
const orig = '123';
const ins = '456';
expect(Changeset.applyToText(Changeset.makeSplice(orig, orig.length, 0, ins), orig))
.to.equal(`${orig}${ins}`);
});
it('testToSplices', async function () {
const cs = Changeset.checkRep('Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk');
const correctSplices = [