| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- import {
- arrayAvg,
- arrayEach,
- arrayFilter,
- arrayFlatten,
- arrayMap,
- arrayMax,
- arrayMin,
- arrayReduce,
- arraySum,
- } from 'handsontable/helpers/array';
- describe('Array helper', () => {
- const iterableObject = {
- _myArray: [2, 6, 3, 1],
- [Symbol.iterator]() {
- return this._myArray[Symbol.iterator]();
- }
- };
- //
- // Handsontable.helper.arrayAvg
- //
- describe('arrayAvg', () => {
- it('should returns the average value', () => {
- expect(arrayAvg([1])).toBe(1);
- expect(arrayAvg([1, 1, 2, 3, 4])).toBe(2.2);
- });
- });
- //
- // Handsontable.helper.arrayEach
- //
- describe('arrayEach', () => {
- it('should call callback with proper arguments for input data passed as an array', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(() => true);
- arrayEach([4, 5, 2, 15], cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([4, 0, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(1)).toEqual([5, 1, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(2)).toEqual([2, 2, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(3)).toEqual([15, 3, [4, 5, 2, 15]]);
- });
- it('should call callback with proper arguments for input data passed as an object with implemented iterator protocol', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(() => true);
- arrayEach(iterableObject, cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([2, 0, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(1)).toEqual([6, 1, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(2)).toEqual([3, 2, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(3)).toEqual([1, 3, [2, 6, 3, 1]]);
- });
- it('should break the loop on first invocation when the callback returns `false`', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(() => false);
- arrayEach([4, 5, 2, 15], cb);
- expect(cb.calls.count()).toBe(1);
- expect(cb.calls.argsFor(0)).toEqual([4, 0, [4, 5, 2, 15]]);
- });
- it('should break the loop on when callback returns `false`', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(value => value !== 2);
- arrayEach([4, 5, 2, 15], cb);
- expect(cb.calls.count()).toBe(3);
- expect(cb.calls.argsFor(0)).toEqual([4, 0, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(1)).toEqual([5, 1, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(2)).toEqual([2, 2, [4, 5, 2, 15]]);
- });
- });
- //
- // Handsontable.helper.arrayFilter
- //
- describe('arrayFilter', () => {
- it('should call callback with proper arguments for input data passed as an array', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(() => true);
- arrayFilter([4, 5, 2, 15], cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([4, 0, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(1)).toEqual([5, 1, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(2)).toEqual([2, 2, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(3)).toEqual([15, 3, [4, 5, 2, 15]]);
- });
- it('should call callback with proper arguments for input data passed as an object with implemented iterator protocol', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(() => true);
- arrayFilter(iterableObject, cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([2, 0, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(1)).toEqual([6, 1, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(2)).toEqual([3, 2, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(3)).toEqual([1, 3, [2, 6, 3, 1]]);
- });
- it('should return new an array with filtered values', () => {
- const cb = jasmine.createSpy('cb');
- const data = [4, 5, 2, 15];
- cb.and.callFake(value => value % 2);
- arrayFilter(data, cb);
- expect(arrayFilter(data, cb)).not.toBe(data);
- expect(data).toEqual([4, 5, 2, 15]);
- expect(arrayFilter(data, cb)).toEqual([5, 15]);
- });
- });
- //
- // Handsontable.helper.arrayFlatten
- //
- describe('arrayFlatten', () => {
- it('should returns the flattened array', () => {
- expect(arrayFlatten([1])).toEqual([1]);
- expect(arrayFlatten([1, 2, 3, [4, 5, 6]])).toEqual([1, 2, 3, 4, 5, 6]);
- expect(arrayFlatten([1, [[[2]]], 3, [[4], [5], [6]]])).toEqual([1, 2, 3, 4, 5, 6]);
- });
- });
- //
- // Handsontable.helper.arrayMap
- //
- describe('arrayMap', () => {
- it('should returns the mapped array', () => {
- expect(arrayMap([1], a => a + 1)).toEqual([2]);
- expect(arrayMap([1, 2, 3], () => '')).toEqual(['', '', '']);
- });
- it('should call callback with proper arguments for input data passed as an array', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(value => value);
- arrayMap([4, 5, 2, 15], cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([4, 0, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(1)).toEqual([5, 1, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(2)).toEqual([2, 2, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(3)).toEqual([15, 3, [4, 5, 2, 15]]);
- });
- it('should call callback with proper arguments for input data passed as an object with implemented iterator protocol', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake(value => value);
- arrayMap(iterableObject, cb);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([2, 0, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(1)).toEqual([6, 1, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(2)).toEqual([3, 2, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(3)).toEqual([1, 3, [2, 6, 3, 1]]);
- });
- });
- //
- // Handsontable.helper.arrayMax
- //
- describe('arrayMax', () => {
- it('should returns the highest number from an array (array of numbers)', () => {
- expect(arrayMax([])).toBeUndefined();
- expect(arrayMax([0])).toBe(0);
- expect(arrayMax([0, 0, 0, -1, 3, 2])).toBe(3);
- expect(arrayMax(iterableObject)).toBe(6);
- });
- it('should returns the highest string from an array (array of strings)', () => {
- expect(arrayMax(['b', 'a', 'A', 'z', 'Z', '1'])).toBe('z');
- expect(arrayMax(['b', 'a', 'A', 'Z', '1'])).toBe('b');
- expect(arrayMax(['a', 'A', 'Z', '1'])).toBe('a');
- });
- });
- //
- // Handsontable.helper.arrayMin
- //
- describe('arrayMin', () => {
- it('should returns the lowest number from an array (array of numbers)', () => {
- expect(arrayMin([])).toBeUndefined();
- expect(arrayMin([0])).toBe(0);
- expect(arrayMin([0, 0, 0, -1, 3, 2])).toBe(-1);
- expect(arrayMin(iterableObject)).toBe(1);
- });
- it('should returns the lowest string from an array (array of strings)', () => {
- expect(arrayMin(['b', 'a', 'A', 'z', '1'])).toBe('1');
- expect(arrayMin(['b', 'a', 'A', 'z'])).toBe('A');
- expect(arrayMin(['b', 'a', 'z'])).toBe('a');
- });
- });
- //
- // Handsontable.helper.arrayReduce
- //
- describe('arrayReduce', () => {
- it('should call callback with proper arguments for input data passed as an array', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake((acc, value) => acc + value);
- arrayReduce([4, 5, 2, 15], cb, 0);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([0, 4, 0, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(1)).toEqual([4, 5, 1, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(2)).toEqual([9, 2, 2, [4, 5, 2, 15]]);
- expect(cb.calls.argsFor(3)).toEqual([11, 15, 3, [4, 5, 2, 15]]);
- });
- it('should return sum of all values', () => {
- const data = [4, 5, 2, 15];
- expect(arrayReduce(data, (acc, value) => acc + value, 0)).toBe(26);
- });
- it('should return an array with multipled values', () => {
- const data = [4, 5, 2, 15];
- expect(arrayReduce(data, (acc, value) => {
- acc.push(value * value);
- return acc;
- }, [])).toEqual([16, 25, 4, 225]);
- });
- it('should call callback with proper arguments for input data passed as an object with implemented iterator protocol', () => {
- const cb = jasmine.createSpy('cb');
- cb.and.callFake((acc, value) => acc + value);
- arrayReduce(iterableObject, cb, 0);
- expect(cb.calls.count()).toBe(4);
- expect(cb.calls.argsFor(0)).toEqual([0, 2, 0, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(1)).toEqual([2, 6, 1, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(2)).toEqual([8, 3, 2, [2, 6, 3, 1]]);
- expect(cb.calls.argsFor(3)).toEqual([11, 1, 3, [2, 6, 3, 1]]);
- });
- });
- //
- // Handsontable.helper.arraySum
- //
- describe('arraySum', () => {
- it('should returns the cumulative value', () => {
- expect(arraySum([1])).toBe(1);
- expect(arraySum([1, 1, 2, 3, 4])).toBe(11);
- expect(arraySum([1, 1, 0, 3.1, 4.2])).toBe(9.3);
- expect(arraySum(iterableObject)).toBe(12);
- });
- });
- });
|