@quantlab/handsontable
Version:
Spreadsheet-like data grid editor that provides copy/paste functionality compatible with Excel/Google Docs
206 lines (161 loc) • 8.61 kB
JavaScript
describe('Walkontable.ViewportColumnsCalculator', () => {
function allColumns20() {
return 20;
}
it('should render first 5 columns in unscrolled container', () => {
var calc = new Walkontable.ViewportColumnsCalculator(100, 0, 1000, allColumns20);
expect(calc.startColumn).toBe(0);
expect(calc.startPosition).toBe(0);
expect(calc.endColumn).toBe(4);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(100, 0, 1000, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(0);
expect(visibleCalc.endColumn).toBe(4);
});
it('should render 6 columns, starting from 3 in container scrolled to half of fourth column', () => {
var calc = new Walkontable.ViewportColumnsCalculator(100, 70, 1000, allColumns20);
expect(calc.startColumn).toBe(3);
expect(calc.startPosition).toBe(60);
expect(calc.endColumn).toBe(8);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(100, 70, 1000, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(4);
expect(visibleCalc.endColumn).toBe(7);
});
it('should render 10 columns, starting from 1 in container scrolled to half of fourth column (with render overrides)', () => {
var overrideFn = function(calc) {
calc.startColumn -= 2;
calc.endColumn += 2;
};
var calc = new Walkontable.ViewportColumnsCalculator(100, 70, 1000, allColumns20, overrideFn);
expect(calc.startColumn).toBe(1);
expect(calc.startPosition).toBe(20);
expect(calc.endColumn).toBe(10);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(100, 70, 1000, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(4);
expect(visibleCalc.endColumn).toBe(7);
});
it('should return number of rendered columns', () => {
var calc = new Walkontable.ViewportColumnsCalculator(100, 50, 1000, allColumns20);
expect(calc.count).toBe(6);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(100, 50, 1000, allColumns20, null, true);
expect(visibleCalc.count).toBe(4);
});
it('should render all columns if their size is smaller than viewport', () => {
var calc = new Walkontable.ViewportColumnsCalculator(200, 0, 8, allColumns20);
expect(calc.startColumn).toBe(0);
expect(calc.endColumn).toBe(7);
expect(calc.count).toBe(8);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(200, 0, 8, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(0);
expect(visibleCalc.endColumn).toBe(7);
expect(visibleCalc.count).toBe(8);
});
it('should render all columns if their size is exactly the viewport', () => {
var calc = new Walkontable.ViewportColumnsCalculator(200, 0, 10, allColumns20);
expect(calc.startColumn).toBe(0);
expect(calc.endColumn).toBe(9);
expect(calc.count).toBe(10);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(200, 0, 10, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(0);
expect(visibleCalc.endColumn).toBe(9);
expect(visibleCalc.count).toBe(10);
});
it('should render all columns if their size is slightly larger than viewport', () => {
var calc = new Walkontable.ViewportColumnsCalculator(199, 0, 10, allColumns20);
expect(calc.startColumn).toBe(0);
expect(calc.endColumn).toBe(9);
expect(calc.count).toBe(10);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(199, 0, 10, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(0);
expect(visibleCalc.endColumn).toBe(8);
expect(visibleCalc.count).toBe(9);
});
it('should set null values if total columns is 0', () => {
var calc = new Walkontable.ViewportColumnsCalculator(200, 0, 0, allColumns20);
expect(calc.startColumn).toBe(null);
expect(calc.startPosition).toBe(null);
expect(calc.endColumn).toBe(null);
expect(calc.count).toBe(0);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(200, 0, 0, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(null);
expect(visibleCalc.endColumn).toBe(null);
});
it('should set null values if total columns is 0 (with overrideFn provided)', () => {
var overrideFn = function(myCalc) {
myCalc.startColumn = 0;
myCalc.endColumn = 0;
};
var calc = new Walkontable.ViewportColumnsCalculator(200, 0, 0, allColumns20, overrideFn);
expect(calc.startColumn).toBe(null);
expect(calc.startPosition).toBe(null);
expect(calc.endColumn).toBe(null);
expect(calc.count).toBe(0);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(200, 0, 0, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(null);
expect(visibleCalc.endColumn).toBe(null);
});
it('should scroll backwards if total columns is reached', () => {
var calc = new Walkontable.ViewportColumnsCalculator(190, 350, 20, allColumns20);
expect(calc.startColumn).toBe(10);
expect(calc.startPosition).toBe(200);
expect(calc.endColumn).toBe(19);
expect(calc.count).toBe(10);
var visibleCalc = new Walkontable.ViewportColumnsCalculator(190, 350, 20, allColumns20, null, true);
expect(visibleCalc.startColumn).toBe(11);
expect(visibleCalc.endColumn).toBe(19);
});
it('should update stretchAllRatio after refreshStretching call (stretch: all)', () => {
var calc = new Walkontable.ViewportColumnsCalculator(250, 0, 20, allColumns20, null, true, 'all');
expect(calc.stretchAllRatio).toBe(0);
expect(calc.stretchLastWidth).toBe(0);
calc.refreshStretching(414);
expect(calc.stretchAllRatio).toBe(1.035);
expect(calc.stretchLastWidth).toBe(0);
});
it('should update stretchAllRatio after refreshStretching call (stretch: last)', () => {
var calc = new Walkontable.ViewportColumnsCalculator(250, 0, 5, allColumns20, null, true, 'last');
expect(calc.stretchAllRatio).toBe(0);
expect(calc.stretchLastWidth).toBe(0);
calc.refreshStretching(414);
expect(calc.stretchAllRatio).toBe(0);
expect(calc.stretchLastWidth).toBe(334);
});
it('should return valid stretched column width (stretch: all)', () => {
var calc = new Walkontable.ViewportColumnsCalculator(250, 0, 5, allColumns20, null, true, 'all');
expect(calc.getStretchedColumnWidth(0, 50)).toBe(null);
expect(calc.needVerifyLastColumnWidth).toBe(true);
calc.refreshStretching(417);
expect(calc.getStretchedColumnWidth(0, allColumns20())).toBe(83);
expect(calc.getStretchedColumnWidth(1, allColumns20())).toBe(83);
expect(calc.getStretchedColumnWidth(2, allColumns20())).toBe(83);
expect(calc.getStretchedColumnWidth(3, allColumns20())).toBe(83);
expect(calc.needVerifyLastColumnWidth).toBe(true);
expect(calc.getStretchedColumnWidth(4, allColumns20())).toBe(85);
expect(calc.needVerifyLastColumnWidth).toBe(false);
});
it('should return valid stretched column width (stretch: last)', () => {
var calc = new Walkontable.ViewportColumnsCalculator(250, 0, 5, allColumns20, null, true, 'last');
expect(calc.getStretchedColumnWidth(0, 50)).toBe(null);
calc.refreshStretching(417);
expect(calc.getStretchedColumnWidth(0, allColumns20())).toBe(null);
expect(calc.getStretchedColumnWidth(1, allColumns20())).toBe(null);
expect(calc.getStretchedColumnWidth(2, allColumns20())).toBe(null);
expect(calc.getStretchedColumnWidth(3, allColumns20())).toBe(null);
expect(calc.getStretchedColumnWidth(4, allColumns20())).toBe(337);
});
it('call refreshStretching should clear stretchAllColumnsWidth and needVerifyLastColumnWidth property', () => {
var calc = new Walkontable.ViewportColumnsCalculator(250, 0, 5, allColumns20, null, true, 'all');
expect(calc.stretchAllColumnsWidth.length).toBe(0);
expect(calc.needVerifyLastColumnWidth).toBe(true);
calc.refreshStretching(417);
calc.getStretchedColumnWidth(0, allColumns20());
calc.getStretchedColumnWidth(1, allColumns20());
calc.getStretchedColumnWidth(2, allColumns20());
calc.getStretchedColumnWidth(3, allColumns20());
calc.getStretchedColumnWidth(4, allColumns20());
expect(calc.stretchAllColumnsWidth.length).toBe(5);
expect(calc.needVerifyLastColumnWidth).toBe(false);
calc.refreshStretching(201);
expect(calc.stretchAllColumnsWidth.length).toBe(0);
expect(calc.needVerifyLastColumnWidth).toBe(true);
});
});