import { setCellDeps, CellWithDepsInState, mergeParsedResults } from './postProcess'; import { ID } from '../../index.data'; import { ParsedResult } from '../../formula-parser/data'; describe('mergeParsedResult', () => { it('case0', () => { const partialState: CellWithDepsInState = { cells: {}, cellDeps: {}, varDeps: {}, }; const parsedResults = {} as Record; expect(mergeParsedResults(partialState, parsedResults)).toEqual({ cells: {}, cellDeps: {}, varDeps: {}, }); }); it('case1: 简单', () => { const partialState: CellWithDepsInState = { cells: { 1: { id: 1, value: -1 } }, cellDeps: {}, varDeps: {}, }; const parsedResults = { 1: { result: 1, error: null, deps: { cells: ['2'], variables: ['kk'] } }, } as Record; expect(mergeParsedResults(partialState, parsedResults)).toEqual({ cells: { 1: { id: 1, value: 1, error: null } }, cellDeps: { 2: [1] }, varDeps: { kk: [1] }, }); }); it('case2: 存在合并', () => { const partialState: CellWithDepsInState = { cells: { 1: { id: 1, value: -1, error: null }, 2: { id: 2, value: -2 }, 3: { id: 3, value: -3 }, }, cellDeps: { 2: [1] }, varDeps: { kk: [1] }, }; const parsedResults = { 3: { result: 5, error: null, deps: { cells: [2], variables: ['kk'] } }, } as Record; expect(mergeParsedResults(partialState, parsedResults)).toEqual({ cells: { 1: { id: 1, value: -1, error: null }, 2: { id: 2, value: -2 }, 3: { id: 3, value: 5, error: null }, }, cellDeps: { 2: [1, 3] }, varDeps: { kk: [1, 3] }, }); }); }); describe('setDep', () => { it('case0: 2依赖于1', () => expect(setCellDeps({} as any, 2, [1])).toEqual({ 1: [2], })); const cellDeps = { // 2,3依赖于1, 亦即: 1的变动将引起2,3更新 1: [2, 3], 2: [3], 3: [4, 5], }; it('case0: 2依赖于1, 关系已存在', () => expect(setCellDeps(cellDeps, 2, [1])).toEqual({ 1: [3, 2], 2: [3], 3: [4, 5], })); it('case1: 3依赖于2, 关系不存在', () => expect(setCellDeps(cellDeps, 3, [2])).toEqual({ 1: [2], 2: [3], 3: [4, 5], })); it('case2: 复杂关系', () => expect(setCellDeps(cellDeps, 3, [2, 6])).toEqual({ 1: [2], 2: [3], 3: [4, 5], 6: [3], })); });