import { TNode } from 'react-native-render-html'; import fillTableDisplay, { createEmptyDisplay } from '../fillTableDisplay'; import TCellConstraintsComputer from '../TCellConstraintsComputer'; import { createTableTNode } from './utils'; function createDisplay(tnode: TNode) { const display = createEmptyDisplay({ contentWidth: 1000 }); fillTableDisplay(tnode, display, new TCellConstraintsComputer({})); return display; } describe('fillTableDisplay', () => { it('should parse cells', () => { const table = `
A B
C C
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.maxX).toBe(1); expect(display.maxY).toBe(1); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 1, x: 0, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 0 }, { lenX: 1, lenY: 1, x: 0, y: 1 }, { lenX: 1, lenY: 1, x: 1, y: 1 } ]); }); it('should take colspan into account to compute cell coordinates', () => { const table = `
A B C
D
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.offsetX).toBe(0); expect(display.maxX).toBe(3); expect(display.maxY).toBe(1); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 1, x: 0, y: 0 }, { lenX: 2, lenY: 1, x: 1, y: 0 }, { lenX: 1, lenY: 1, x: 3, y: 0 }, { lenX: 1, lenY: 1, x: 0, y: 1 } ]); }); it('should take rowspan into account to compute cell coordinates (x=0)', () => { const table = `
A B C
D F
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.maxX).toBe(2); expect(display.maxY).toBe(1); expect(display.offsetX).toBe(0); expect(display.occupiedCoordinates).toMatchObject([{ x: 0, y: 1 }]); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 2, x: 0, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 0 }, { lenX: 1, lenY: 1, x: 2, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 1 }, { lenX: 1, lenY: 1, x: 2, y: 1 } ]); }); it('should take rowspan into account to compute cell coordinates (x=1)', () => { const table = `
A B C
D F
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.maxX).toBe(2); expect(display.maxY).toBe(1); expect(display.offsetX).toBe(0); expect(display.occupiedCoordinates).toMatchObject([{ x: 1, y: 1 }]); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 1, x: 0, y: 0 }, { lenX: 1, lenY: 2, x: 1, y: 0 }, { lenX: 1, lenY: 1, x: 2, y: 0 }, { lenX: 1, lenY: 1, x: 0, y: 1 }, { lenX: 1, lenY: 1, x: 2, y: 1 } ]); }); it('should take rowspan into account to compute cell coordinates (2x rowspan) ', () => { const table = `
January $100 $50
$80
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.maxX).toBe(2); expect(display.maxY).toBe(1); // expect(display.offsetX).toBe(2); expect(display.occupiedCoordinates).toMatchObject([ { x: 0, y: 1 }, { x: 2, y: 1 } ]); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 2, x: 0, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 0 }, { lenX: 1, lenY: 2, x: 2, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 1 } ]); }); it('should handle cells with both colspan and rowspan set', () => { const table = `
0 1 2
A B
C
`; const tnode = createTableTNode(table); const display = createDisplay(tnode); expect(display.maxX).toBe(2); expect(display.maxY).toBe(2); expect(display.offsetX).toBe(0); expect(display.cells).toMatchObject([ { lenX: 1, lenY: 1, x: 0, y: 0 }, { lenX: 1, lenY: 1, x: 1, y: 0 }, { lenX: 1, lenY: 1, x: 2, y: 0 }, { lenX: 1, lenY: 1, x: 0, y: 1 }, { lenX: 2, lenY: 2, x: 1, y: 1 }, { lenX: 1, lenY: 1, x: 0, y: 2 } ]); }); });