import { IStoreState } from '../../index.data'; import * as R from 'rambda'; import * as h from './helper'; const ROWHEIGHT = 100; function getState(overrides: Partial): IStoreState { const state0: Partial = { rows: R.range(0, 10).map(i => ({ id: i })), rowDimensions: R.range(0, 10).reduce( (acc, item) => ({ ...acc, [item]: { height: ROWHEIGHT, top: item * ROWHEIGHT }, }), {} as IStoreState['rowDimensions'], ), colDimensions: { 0: { left: 0, width: 30, offsetLeft: 0, offsetWidth: 0 } }, padding: { bottom: 0, right: 0 }, // 以下留给每个test自定义 freezeAt: { i: -1, j: -1 }, containerBox: { w: 0, h: 0 }, scrollY: 0, collapsedRowIds: [], }; const state = { ...state0, ...overrides }; return state as IStoreState; } describe('vscrollbar', () => { describe('容器高0', () => { test('scrollY=0, 无冻结', () => { const state = getState({}); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*thumbSize, thumbOffset*/ } = helpers; expect(barOffset).toEqual(0); expect(barSize).toEqual(0); // expect(thumbSize).toEqual(0); // expect(thumbOffset).toEqual(0); }); test('scrollY=0, 冻结第1行', () => { const state = getState({ freezeAt: { i: 0, j: 0 } }); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*, thumbSize, thumbOffset */ } = helpers; expect(barOffset).toEqual(0); expect(barSize).toEqual(0); // expect(thumbSize).toEqual(0); // expect(thumbOffset).toEqual(0); }); }); describe('容器高一行', () => { test('scrollY=0行, 无冻结', () => { const state = getState({ containerBox: { w: 30, h: ROWHEIGHT } }); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*, thumbSize, thumbOffset */ } = helpers; expect(barOffset).toEqual(20 /*col indicator*/); expect(barSize).toEqual(ROWHEIGHT - 20 /*留白*/ - 20); // expect(thumbSize).toEqual(8); // expect(thumbOffset).toEqual(0); }); test('scrollY=0行, 冻结1行', () => { const state = getState({ containerBox: { w: 30, h: ROWHEIGHT }, freezeAt: { i: 0, j: 0 } }); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*, thumbSize, thumbOffset */ } = helpers; expect(barOffset).toEqual(ROWHEIGHT + 20); expect(barSize).toEqual(0); // expect(thumbSize).toEqual(0); // expect(thumbOffset).toEqual(0); }); test('scrollY=接近1行, 无冻结', () => { const state = getState({ containerBox: { w: 30, h: ROWHEIGHT }, scrollY: ROWHEIGHT - 10 }); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*, thumbSize, thumbOffset*/ } = helpers; expect(barOffset).toEqual(20 /*col indicator*/); expect(barSize).toEqual(ROWHEIGHT - 20 /*留白*/ - 20); // expect(thumbSize).toEqual(8); // expect(thumbOffset).toEqual(7.2); }); test('scrollY=9行, 无冻结', () => { const state = getState({ containerBox: { w: 30, h: ROWHEIGHT }, scrollY: ROWHEIGHT * 9 }); const helpers = new h.VScrollBarHelper(state); const { barOffset, barSize /*, thumbSize, thumbOffset */ } = helpers; expect(barOffset).toEqual(20 /*col indicator*/); expect(barSize).toEqual(ROWHEIGHT - 20 /*留白*/ - 20); // expect(thumbSize).toEqual(8); // expect(thumbOffset).toEqual(80 - 8); }); }); }); describe('getAllLoadableRows', () => { // 以下容器 describe('加载区域高0', () => { const state = getState({}); test('scrollY=0, 无冻结', () => { const result = h._getAllLoadableRowFlags(state, 0, [], 0); expect(result).toEqual([true, true, true, true, true, true, true, true, true, true]); }); }); describe('加载区域高210', () => { const state = getState({}); test('scrollY=0, 无冻结', () => { const result = h._getAllLoadableRowFlags(state, 210, [], 0); expect(result).toEqual([true, true, true, true, true, true, true, true, true, true]); }); test('scrollY=0, 冻结1行(100)', () => { const state = getState({ freezeAt: { i: 0, j: 0 } }); const result = h._getAllLoadableRowFlags(state, 210, [], 0); expect(result).toEqual([true, true, true, false, false, false, false, false, false, false]); }); test('scrollY=90, 冻结1行(100)', () => { const state = getState({ freezeAt: { i: 0, j: 0 } }); const result = h._getAllLoadableRowFlags(state, 210, [], 90); expect(result).toEqual([true, true, true, false, false, false, false, false, false, false]); }); test('scrollY=110, 冻结1行(100)', () => { const state = getState({ freezeAt: { i: 0, j: 0 } }); const result = h._getAllLoadableRowFlags(state, 210, [], 110); expect(result).toEqual([true, false, true, true, false, false, false, false, false, false]); }); test('scrollY=310, 冻结1行(100)', () => { const state = getState({ freezeAt: { i: 0, j: 0 } }); const result = h._getAllLoadableRowFlags(state, 210, [], 310); expect(result).toEqual([true, false, false, false, true, true, false, false, false, false]); }); }); });