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 = `
`;
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 = `
`;
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 = `
`;
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 = `
`;
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 = `
`;
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 = `
`;
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
}
]);
});
});