@quantlab/handsontable
Version:
Spreadsheet-like data grid editor that provides copy/paste functionality compatible with Excel/Google Docs
754 lines (588 loc) • 160 kB
JavaScript
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
describe('UndoRedo', function () {
var id = 'testContainer';
beforeEach(function () {
this.$container = $('<div id="' + id + '"></div>').appendTo('body');
});
afterEach(function () {
if (this.$container) {
destroy();
this.$container.remove();
}
});
describe('core features', function () {
describe('Array data', function () {
describe('undo', function () {
it('should undo single change', function () {
handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
var HOT = getInstance();
setDataAtCell(0, 0, 'X1');
expect(getDataAtCell(0, 0)).toBe('X1');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('A1');
});
it('should undo single change on cell with validator', function (done) {
handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
var HOT = getInstance();
setDataAtCell(0, 0, 'X1');
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('X1');
HOT.undo();
}, 200);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('A1');
done();
}, 400);
});
it('should undo creation of a single row', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
expect(countRows()).toEqual(2);
alter('insert_row');
expect(countRows()).toEqual(3);
HOT.undo();
expect(countRows()).toEqual(2);
});
it('should undo creation of multiple rows', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
expect(countRows()).toEqual(2);
alter('insert_row', 0, 5);
expect(countRows()).toEqual(7);
HOT.undo();
expect(countRows()).toEqual(2);
});
it('should undo creation of multiple rows with minSpareRows', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 1),
minSpareRows: 2
});
expect(getData()).toEqual([['A1'], ['A2'], [null], [null]]);
setDataAtCell(2, 0, 'A3');
setDataAtCell(4, 0, 'A4');
expect(getData()).toEqual([['A1'], ['A2'], ['A3'], [null], ['A4'], [null], [null]]);
HOT.undo();
HOT.undo();
expect(getData()).toEqual([['A1'], ['A2'], [null], [null]]);
});
it('should undo removal of single row', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(3, 2)
});
expect(countRows()).toEqual(3);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
alter('remove_row', 1);
expect(countRows()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A3');
expect(getDataAtCell(1, 1)).toEqual('B3');
HOT.undo();
expect(countRows()).toEqual(3);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
});
it('should undo removal of multiple rows', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(4, 2)
});
expect(countRows()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
expect(getDataAtCell(3, 0)).toEqual('A4');
expect(getDataAtCell(3, 1)).toEqual('B4');
alter('remove_row', 1, 2);
expect(countRows()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A4');
expect(getDataAtCell(1, 1)).toEqual('B4');
HOT.undo();
expect(countRows()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
expect(getDataAtCell(3, 0)).toEqual('A4');
expect(getDataAtCell(3, 1)).toEqual('B4');
});
it('should undo creation of a single column (colHeaders: undefined)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 3)
});
expect(countCols()).toEqual(3);
alter('insert_col');
expect(countCols()).toEqual(4);
HOT.undo();
expect(countCols()).toEqual(3);
});
it('should undo creation of a single column (colHeaders: true)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 3),
colHeaders: true
});
expect(countCols()).toEqual(3);
expect(getColHeader()).toEqual(['A', 'B', 'C']);
alter('insert_col');
expect(countCols()).toEqual(4);
expect(getColHeader()).toEqual(['A', 'B', 'C', 'D']);
HOT.undo();
expect(countCols()).toEqual(3);
expect(getColHeader()).toEqual(['A', 'B', 'C']);
});
it('should undo creation of a single column (colHeaders: Array)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 3),
colHeaders: ['Header1', 'Header2', 'Header3']
});
expect(countCols()).toEqual(3);
expect(getColHeader()).toEqual(['Header1', 'Header2', 'Header3']);
alter('insert_col', 1);
expect(countCols()).toEqual(4);
expect(getColHeader()).toEqual(['Header1', 'B', 'Header2', 'Header3']);
HOT.undo();
expect(countCols()).toEqual(3);
expect(getColHeader()).toEqual(['Header1', 'Header2', 'Header3']);
});
it('should undo creation of multiple columns (colHeaders: undefined)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
expect(countCols()).toEqual(2);
alter('insert_col', 1, 5);
expect(countCols()).toEqual(7);
HOT.undo();
expect(countCols()).toEqual(2);
});
it('should undo creation of multiple columns (colHeaders: true)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2),
colHeaders: true
});
expect(countCols()).toEqual(2);
expect(getColHeader()).toEqual(['A', 'B']);
alter('insert_col', 1, 5);
expect(countCols()).toEqual(7);
expect(getColHeader()).toEqual(['A', 'B', 'C', 'D', 'E', 'F', 'G']);
HOT.undo();
expect(countCols()).toEqual(2);
expect(getColHeader()).toEqual(['A', 'B']);
});
it('should undo creation of multiple columns (colHeaders: Array)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2),
colHeaders: ['Header1', 'Header2']
});
expect(countCols()).toEqual(2);
expect(getColHeader()).toEqual(['Header1', 'Header2']);
alter('insert_col', 1, 5);
expect(countCols()).toEqual(7);
expect(getColHeader()).toEqual(['Header1', 'B', 'C', 'D', 'E', 'F', 'Header2']);
HOT.undo();
expect(countCols()).toEqual(2);
expect(getColHeader()).toEqual(['Header1', 'Header2']);
});
it('should undo creation of multiple columns with minSpareCols', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(1, 1),
minSpareCols: 2
});
expect(getData()).toEqual([['A1', null, null]]);
setDataAtCell(0, 1, 'B1');
setDataAtCell(0, 3, 'C1');
expect(getData()).toEqual([['A1', 'B1', null, 'C1', null, null]]);
HOT.undo();
HOT.undo();
expect(getData()).toEqual([['A1', null, null]]);
});
it('should undo removal of single column (colHeaders: undefined)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 3)
});
expect(countCols()).toEqual(3);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
alter('remove_col', 1);
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('C1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('C2');
HOT.undo();
expect(countCols()).toEqual(3);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
});
it('should undo removal of single column (colHeaders: true)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2),
colHeaders: true
});
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getColHeader()).toEqual(['A', 'B']);
alter('remove_col');
expect(countCols()).toEqual(1);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toBeNull();
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toBeNull();
expect(getColHeader()).toEqual(['A']);
HOT.undo();
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getColHeader()).toEqual(['A', 'B']);
});
it('should undo removal of single column (colHeaders: Array)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2),
colHeaders: ['Header1', 'Header2']
});
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getColHeader()).toEqual(['Header1', 'Header2']);
alter('remove_col');
expect(countCols()).toEqual(1);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toBeNull();
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toBeNull();
expect(getColHeader()).toEqual(['Header1']);
HOT.undo();
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getColHeader()).toEqual(['Header1', 'Header2']);
});
it('should undo removal of multiple columns (colHeaders: undefined)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 4)
});
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
alter('remove_col', 1, 2);
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('D1');
expect(getDataAtCell(0, 2)).toBeNull();
expect(getDataAtCell(0, 3)).toBeNull();
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('D2');
expect(getDataAtCell(1, 2)).toBeNull();
expect(getDataAtCell(1, 3)).toBeNull();
HOT.undo();
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
});
it('should undo removal of multiple columns (colHeaders: true)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 4),
colHeaders: true
});
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
expect(getColHeader()).toEqual(['A', 'B', 'C', 'D']);
alter('remove_col', 1, 3);
expect(countCols()).toEqual(1);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toBeNull();
expect(getDataAtCell(0, 2)).toBeNull();
expect(getDataAtCell(0, 3)).toBeNull();
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toBeNull();
expect(getDataAtCell(1, 2)).toBeNull();
expect(getDataAtCell(1, 3)).toBeNull();
expect(getColHeader()).toEqual(['A']);
HOT.undo();
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
expect(getColHeader()).toEqual(['A', 'B', 'C', 'D']);
});
it('should undo removal of multiple columns (colHeaders: Array)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 4),
colHeaders: ['Header1', 'Header2', 'Header3', 'Header4']
});
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
expect(getColHeader()).toEqual(['Header1', 'Header2', 'Header3', 'Header4']);
alter('remove_col', 1, 2);
expect(countCols()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('D1');
expect(getDataAtCell(0, 2)).toBeNull();
expect(getDataAtCell(0, 3)).toBeNull();
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('D2');
expect(getDataAtCell(1, 2)).toBeNull();
expect(getDataAtCell(1, 3)).toBeNull();
expect(getColHeader()).toEqual(['Header1', 'Header4']);
HOT.undo();
expect(countCols()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(0, 2)).toEqual('C1');
expect(getDataAtCell(0, 3)).toEqual('D1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(1, 2)).toEqual('C2');
expect(getDataAtCell(1, 3)).toEqual('D2');
expect(getColHeader()).toEqual(['Header1', 'Header2', 'Header3', 'Header4']);
});
it('should undo removal of multiple columns (with a used manualColumnMove)', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 7),
manualColumnMove: [3, 2, 0, 6, 1, 5, 4]
});
expect(countCols()).toEqual(7);
expect(getDataAtRow(0)).toEqual(['D1', 'C1', 'A1', 'G1', 'B1', 'F1', 'E1']);
alter('remove_col', 1, 3);
expect(countCols()).toEqual(4);
expect(getDataAtRow(0)).toEqual(['D1', 'B1', 'F1', 'E1']);
// HOT.undo();
//
// expect(countCols()).toEqual(7);
// expect(getDataAtRow(0)).toEqual(['D1', 'C1', 'A1', 'G1', 'B1', 'F1', 'E1']);
});
it('should undo multiple changes', function () {
handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
var HOT = getInstance();
setDataAtCell(0, 0, 'X1');
setDataAtCell(1, 0, 'X2');
setDataAtCell(0, 1, 'Y1');
setDataAtCell(1, 1, 'Y2');
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('Y1');
expect(getDataAtCell(1, 1)).toBe('Y2');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('Y1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('A1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
expect(getDataAtCell(0, 0)).toBe('A1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
});
it('should undo multiple changes in cells with validators', function (done) {
handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
var HOT = getInstance();
setDataAtCell(0, 0, 'X1');
setDataAtCell(1, 0, 'X2');
setDataAtCell(0, 1, 'Y1');
setDataAtCell(1, 1, 'Y2');
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('Y1');
expect(getDataAtCell(1, 1)).toBe('Y2');
HOT.undo();
}, 200);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('Y1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
}, 400);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('X2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
}, 600);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('X1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
}, 800);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('A1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
HOT.undo();
}, 1000);
setTimeout(function () {
expect(getDataAtCell(0, 0)).toBe('A1');
expect(getDataAtCell(1, 0)).toBe('A2');
expect(getDataAtCell(0, 1)).toBe('B1');
expect(getDataAtCell(1, 1)).toBe('B2');
done();
}, 1200);
});
it('should undo multiple row creations', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(2, 2)
});
expect(countRows()).toEqual(2);
alter('insert_row');
alter('insert_row');
alter('insert_row');
alter('insert_row');
expect(countRows()).toEqual(6);
HOT.undo();
expect(countRows()).toEqual(5);
HOT.undo();
expect(countRows()).toEqual(4);
HOT.undo();
expect(countRows()).toEqual(3);
HOT.undo();
expect(countRows()).toEqual(2);
HOT.undo();
expect(countRows()).toEqual(2);
});
it('should undo multiple row removals', function () {
var HOT = handsontable({
data: Handsontable.helper.createSpreadsheetData(4, 2)
});
expect(countRows()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
expect(getDataAtCell(3, 0)).toEqual('A4');
expect(getDataAtCell(3, 1)).toEqual('B4');
alter('remove_row');
alter('remove_row');
alter('remove_row');
expect(countRows()).toEqual(1);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
HOT.undo();
expect(countRows()).toEqual(2);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
HOT.undo();
expect(countRows()).toEqual(3);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
HOT.undo();
expect(countRows()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
expect(getDataAtCell(3, 0)).toEqual('A4');
expect(getDataAtCell(3, 1)).toEqual('B4');
HOT.undo();
expect(countRows()).toEqual(4);
expect(getDataAtCell(0, 0)).toEqual('A1');
expect(getDataAtCell(0, 1)).toEqual('B1');
expect(getDataAtCell(1, 0)).toEqual('A2');
expect(getDataAtCell(1, 1)).toEqual('B2');
expect(getDataAtCell(2, 0)).toEqual('A3');
expect(getDataAtCell(2, 1)).toEqual('B3');
expect(getDataAtCell(3, 0)).toEqual('A4');
expect(getDataAtCell(3, 1)).toEqual('B4');
});
it('should undo changes only for table where the change actually took place', function () {