/
Grid-perf.spec.js
95 lines (77 loc) · 2.78 KB
/
Grid-perf.spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import ReactPerf from 'react-addons-perf';
import GridRunner from './GridRunner';
const { Component: ImmutableGrid } = require('../scripts/example11-immutable-data');
const { Utils: { performance: { SummaryParser } } } = require('react-data-grid-addons');
const ScrollType = {
VERTICAL: 0,
HORIZONTAL: 1
};
const NAVIGATION_BY_SCROLLTYPE = {
[ScrollType.VERTICAL]: {
key: 'ArrowDown',
getNext: (x, y) => { return { y: y + 1, x }; },
shouldStop: (x, y, expected) => y === expected
},
[ScrollType.HORIZONTAL]: {
key: 'ArrowRight',
getNext: (x, y) => { return { y, x: x + 1 }; },
shouldStop: (x, y, expected) => x === expected
}
};
const doScroll = (xx, yy, total, gridRunner, onComplete, scrollType) => {
const { key, getNext, shouldStop } = NAVIGATION_BY_SCROLLTYPE[scrollType];
if (shouldStop(xx, yy, total)) {
onComplete();
return;
}
let cell = gridRunner.getCell({ cellIdx: xx, rowIdx: yy });
gridRunner.keyDown({ key }, cell);
const { x, y } = getNext(xx, yy);
setTimeout(() => {
doScroll(x, y, total, gridRunner, onComplete, scrollType);
}, 1);
};
const doHorizontalScroll = (x, y, total, gridRunner, onComplete) => {
doScroll(x, y, total, gridRunner, onComplete, ScrollType.HORIZONTAL);
};
const doVerticalScroll = (x, y, total, gridRunner, onComplete) => {
doScroll(x, y, total, gridRunner, onComplete, ScrollType.VERTICAL);
};
const onScrollComplete = (done) => {
ReactPerf.stop();
let measurements = ReactPerf.getLastMeasurements();
let summary = ReactPerf.getMeasurementsSummaryMap(measurements);
ReactPerf.printWasted(measurements);
let summaryParser = new SummaryParser(summary);
expect(summaryParser.getByComponent('Cell').wastedInstances <= 1000).toBeTruthy();
done();
};
xdescribe('Grid peformance tests', () => {
let originalTimeout;
let grid = {};
beforeEach(() => {
grid = new GridRunner({renderIntoBody: true, GridUnderTest: ImmutableGrid});
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 90000;
});
afterEach(() => {
grid.dispose();
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
describe('Vertical Scroll', () => {
it('should not waste instances on scroll', (done) => {
const ROWS_TO_SCROLL = 1200;
grid.selectCell({cellIdx: 0, rowIdx: 0});
ReactPerf.start();
doVerticalScroll(0, 0, ROWS_TO_SCROLL, grid, onScrollComplete.bind(null, done), ScrollType.VERTICAL);
});
});
describe('Horizontal scroll', () => {
it('should not waste instances on scroll', (done) => {
const COLUMNS_TO_SCROLL = 20;
grid.selectCell({cellIdx: 0, rowIdx: 0});
ReactPerf.start();
doHorizontalScroll(0, 0, COLUMNS_TO_SCROLL, grid, onScrollComplete.bind(null, done), ScrollType.HORIZONTAL);
});
});
});