| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | var Delta = require('../../lib/delta');describe('helpers', function () {  describe('concat()', function () {    it('empty delta', function () {      var delta = new Delta().insert('Test');      var concat = new Delta();      var expected = new Delta().insert('Test');      expect(delta.concat(concat)).toEqual(expected);    });    it('unmergeable', function () {      var delta = new Delta().insert('Test');      var original = new Delta(JSON.parse(JSON.stringify(delta)));      var concat = new Delta().insert('!', { bold: true });      var expected = new Delta().insert('Test').insert('!', { bold: true });      expect(delta.concat(concat)).toEqual(expected);      expect(delta).toEqual(original);    });    it('mergeable', function () {      var delta = new Delta().insert('Test', { bold: true });      var original = new Delta(JSON.parse(JSON.stringify(delta)));      var concat = new Delta().insert('!', { bold: true }).insert('\n');      var expected = new Delta().insert('Test!', { bold: true }).insert('\n');      expect(delta.concat(concat)).toEqual(expected);      expect(delta).toEqual(original);    });  });  describe('chop()', function () {    it('retain', function () {      var delta = new Delta().insert('Test').retain(4);      var expected = new Delta().insert('Test');      expect(delta.chop()).toEqual(expected);    });    it('insert', function () {      var delta = new Delta().insert('Test');      var expected = new Delta().insert('Test');      expect(delta.chop()).toEqual(expected);    });    it('formatted retain', function () {      var delta = new Delta().insert('Test').retain(4, { bold: true });      var expected = new Delta().insert('Test').retain(4, { bold: true });      expect(delta.chop()).toEqual(expected);    })  });  describe('eachLine()', function () {    var spy = { predicate: function () {} };    beforeEach(function () {      spyOn(spy, 'predicate').and.callThrough();    });    it('expected', function () {      var delta = new Delta().insert('Hello\n\n')                             .insert('World', { bold: true })                             .insert({ image: 'octocat.png' })                             .insert('\n', { align: 'right' })                             .insert('!');      delta.eachLine(spy.predicate);      expect(spy.predicate.calls.count()).toEqual(4);      expect(spy.predicate.calls.argsFor(0)).toEqual([ new Delta().insert('Hello'), {}, 0 ]);      expect(spy.predicate.calls.argsFor(1)).toEqual([ new Delta(), {}, 1 ]);      expect(spy.predicate.calls.argsFor(2)).toEqual([        new Delta().insert('World', { bold: true }).insert({ image: 'octocat.png' }),        { align: 'right' },        2      ]);      expect(spy.predicate.calls.argsFor(3)).toEqual([ new Delta().insert('!'), {}, 3 ]);    });    it('trailing newline', function () {      var delta = new Delta().insert('Hello\nWorld!\n');      delta.eachLine(spy.predicate);      expect(spy.predicate.calls.count()).toEqual(2);      expect(spy.predicate.calls.argsFor(0)).toEqual([ new Delta().insert('Hello'), {}, 0 ]);      expect(spy.predicate.calls.argsFor(1)).toEqual([ new Delta().insert('World!'), {}, 1 ]);    });    it('non-document', function () {      var delta = new Delta().retain(1).delete(2);      delta.eachLine(spy.predicate);      expect(spy.predicate.calls.count()).toEqual(0);    });    it('early return', function () {      var delta = new Delta().insert('Hello\nNew\nWorld!');      var count = 0;      var spy = {        predicate: function() {          if (count === 1) return false;          count += 1;        }      };      spyOn(spy, 'predicate').and.callThrough();      delta.eachLine(spy.predicate);      expect(spy.predicate.calls.count()).toEqual(2);    });  });  describe('iteration', function () {    beforeEach(function() {      this.delta = new Delta().insert('Hello').insert({ image: true }).insert('World!');    });    it('filter()', function () {      var arr = this.delta.filter(function (op) {        return typeof op.insert === 'string';      });      expect(arr.length).toEqual(2);    })    it('forEach()', function () {      var spy = { predicate: function () {} };      spyOn(spy, 'predicate').and.callThrough();      this.delta.forEach(spy.predicate);      expect(spy.predicate.calls.count()).toEqual(3);    });    it('map()', function () {      var arr = this.delta.map(function (op) {        return typeof op.insert === 'string' ? op.insert : '';      });      expect(arr).toEqual(['Hello', '', 'World!']);    });    it('partition()', function () {      var arr = this.delta.partition(function (op) {        return typeof op.insert === 'string';      });      var passed = arr[0], failed = arr[1];      expect(passed).toEqual([this.delta.ops[0], this.delta.ops[2]]);      expect(failed).toEqual([this.delta.ops[1]]);    });  });  describe('length()', function () {    it('document', function () {      var delta = new Delta().insert('AB', { bold: true }).insert(1);      expect(delta.length()).toEqual(3);    });    it('mixed', function () {      var delta = new Delta().insert('AB', { bold: true }).insert(1).retain(2, { bold: null }).delete(1);      expect(delta.length()).toEqual(6);    });  });  describe('changeLength()', function () {    it('mixed', function () {      var delta = new Delta().insert('AB', { bold: true }).retain(2, { bold: null }).delete(1);      expect(delta.changeLength()).toEqual(1);    });  });  describe('slice()', function () {    it('start', function () {      var slice = new Delta().retain(2).insert('A').slice(2);      var expected = new Delta().insert('A');      expect(slice).toEqual(expected);    });    it('start and end chop', function () {      var slice = new Delta().insert('0123456789').slice(2, 7);      var expected = new Delta().insert('23456');      expect(slice).toEqual(expected);    });    it('start and end multiple chop', function () {      var slice = new Delta().insert('0123', { bold: true }).insert('4567').slice(3, 5);      var expected = new Delta().insert('3', { bold: true }).insert('4');      expect(slice).toEqual(expected);    });    it('start and end', function () {      var slice = new Delta().retain(2).insert('A', { bold: true }).insert('B').slice(2, 3);      var expected = new Delta().insert('A', { bold: true });      expect(slice).toEqual(expected);    });    it('no params', function () {      var delta = new Delta().retain(2).insert('A', { bold: true }).insert('B');      var slice = delta.slice();      expect(slice).toEqual(delta);    });    it('split ops', function () {      var slice = new Delta().insert('AB', { bold: true }).insert('C').slice(1, 2);      var expected = new Delta().insert('B', { bold: true });      expect(slice).toEqual(expected);    });    it('split ops multiple times', function () {      var slice = new Delta().insert('ABC', { bold: true }).insert('D').slice(1, 2);      var expected = new Delta().insert('B', { bold: true });      expect(slice).toEqual(expected);    });  });});
 |