import { ICell, IRow, IStoreState } from '../../index.data'; import { getCellByij, getCellsByijs, getRightCell, getCellByij_immediate, getCellsByijs_immediate, getCellij, } from './cell'; import { idMap } from 'valor-app-utils'; function getState() { const rows: IRow[] = [ { id: 0, i: 0, cellIds: [1, 2, null] }, { id: 1, i: 1, cellIds: [3, null, null] }, { id: 2, i: 2, cellIds: [null, null, null] }, { id: 3, i: 3, cellIds: [4, 5, 6] }, ] as any; const cells: ICell[] = [ // 第1行 { id: 1, rowId: 0, i: 0, j: 0 }, { id: 2, rowId: 0, i: 0, j: 1, colspan: 2 }, // 第2行 { id: 3, rowId: 1, i: 1, j: 0, rowspan: 2, colspan: 3 }, // 第3行为空 // 第4行 { id: 4, rowId: 3, i: 3, j: 0 }, { id: 5, rowId: 3, i: 3, j: 1 }, { id: 6, rowId: 3, i: 3, j: 2 }, ]; return { cells: idMap(cells), columns: new Array(3), rows } as IStoreState; } describe('getCellByIj', () => { const state = getState(); it('case0: 获取[0,0]', () => { expect(getCellByij(state as any, 0, 0)!.id).toEqual(1); expect(getCellByij_immediate(state as any, 0, 0)!.id).toEqual(1); }); it('case1: colspan情形', () => { expect(getCellByij(state as any, 0, 2)!.id).toEqual(2); expect(getCellByij(state as any, 1, 1)!.id).toEqual(3); expect(getCellByij(state as any, 1, 2)!.id).toEqual(3); expect(getCellByij_immediate(state as any, 0, 2)).toEqual(null); expect(getCellByij_immediate(state as any, 1, 1)).toEqual(null); expect(getCellByij_immediate(state as any, 1, 2)).toEqual(null); }); it('case2: rowspan情形', () => { expect(getCellByij(state as any, 2, 0)!.id).toEqual(3); expect(getCellByij_immediate(state as any, 2, 0)).toEqual(null); }); it('case2: rowspan+colspan情形', () => { expect(getCellByij(state as any, 2, 1)!.id).toEqual(3); expect(getCellByij(state as any, 2, 2)!.id).toEqual(3); expect(getCellByij_immediate(state as any, 2, 1)).toEqual(null); expect(getCellByij_immediate(state as any, 2, 2)).toEqual(null); }); }); describe('getCellsByijs', () => { const state = getState(); it('case0: 单元格本身', () => { expect(getCellsByijs(state as any, [{ i: 0, j: 0 }]).map(cell => cell!.id)).toEqual([1]); expect(getCellsByijs_immediate(state as any, [{ i: 0, j: 0 }]).map(cell => cell!.id)).toEqual([ 1, ]); }); it('case0: 单元格是合并单元格的一部分', () => { expect(getCellsByijs(state as any, [{ i: 0, j: 2 }]).map(cell => cell!.id)).toEqual([]); expect(getCellsByijs_immediate(state as any, [{ i: 0, j: 2 }]).map(cell => cell!.id)).toEqual( [], ); }); it('case0: 多个单元格', () => { expect( getCellsByijs(state as any, [{ i: 0, j: 2 }, { i: 3, j: 1 }]).map(cell => cell!.id), ).toEqual([5]); expect( getCellsByijs_immediate(state as any, [{ i: 0, j: 2 }, { i: 3, j: 1 }]).map(cell => cell!.id), ).toEqual([5]); }); }); describe('getRightCell', () => { const state = getState(); it('case0: 没有rightCell', () => { var result = getRightCell(state as any, 2); expect(result).toEqual(null); }); it('case1: 第一个rightCell', () => { var result = getRightCell(state as any, 1); expect(result!.id).toEqual(2); }); it('case2: 第2个rightCell', () => { var result = getRightCell(state as any, 4, 2); expect(result!.id).toEqual(6); }); }); describe('getCellij', () => { const state = getState(); it('case0', () => expect(getCellij(state, 1)).toEqual({ i: 0, j: 0 })); it('case1', () => expect(getCellij(state, 3)).toEqual({ i: 1, j: 0 })); it('case2', () => expect(getCellij(state, 6)).toEqual({ i: 3, j: 2 })); });