describe('AutoRowSize', () => { var id = 'testContainer'; beforeEach(function() { this.$container = $(`
`).appendTo('body'); }); afterEach(function() { if (this.$container) { destroy(); this.$container.remove(); } }); function arrayOfObjects() { return [ {id: 'Short'}, {id: 'Somewhat\nlong'}, {id: 'The\nvery\nvery\nvery\nlongest one'} ]; } function arrayOfObjects2() { return [ {id: 'Short', name: 'Somewhat long'}, {id: 'Somewhat long', name: 'The very very longest one'}, {id: 'The very very very longest one', name: 'Short'} ]; } it('should apply auto size by default', function() { handsontable({ data: arrayOfObjects() }); var height0 = rowHeight(this.$container, 0); var height1 = rowHeight(this.$container, 1); var height2 = rowHeight(this.$container, 2); expect(height0).toBeLessThan(height1); expect(height1).toBeLessThan(height2); }); it('should draw scrollbar correctly (proper height) after calculation when autoRowSize option is set (long text in row) #4000', (done) => { var row = ['This is very long text which will break this cell text into two lines']; var data = []; var nrOfRows = 200; var columnWidth = 100; for (var i = 0; i < nrOfRows; i += 1) { data.push(row); } handsontable({ data, colWidths() { return columnWidth; }, autoRowSize: true }); var oldHeight = spec().$container[0].scrollHeight; setTimeout(() => { var newHeight = spec().$container[0].scrollHeight; expect(oldHeight).toBeLessThan(newHeight); done(); }, 200); }); describe('should draw scrollbar correctly (proper height) after calculation when autoRowSize option is set (`table td` element height set by CSS) #4000', () => { var cellHeightInPx = 100; var nrOfRows = null; var nrOfColumns = 200, style; var SYNC_CALCULATION_LIMIT = Handsontable.plugins.AutoRowSize.SYNC_CALCULATION_LIMIT; var CALCULATION_STEP = Handsontable.plugins.AutoRowSize.CALCULATION_STEP; beforeEach(function() { if (!this.$container) { this.$container = $(``).appendTo('body'); } var css = `.handsontable table td { height: ${cellHeightInPx}px !important }`, head = document.head; style = document.createElement('style'); style.type = 'text/css'; if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } $(head).append(style); }); afterEach(function() { if (this.$container) { destroy(); this.$container.remove(); } if (style) { $(style).remove(); } }); it('(SYNC_CALCULATION_LIMIT - 1 rows)', (done) => { nrOfRows = SYNC_CALCULATION_LIMIT - 1; handsontable({ data: Handsontable.helper.createSpreadsheetData(nrOfRows, nrOfColumns), autoRowSize: true }); setTimeout(() => { var newHeight = spec().$container[0].scrollHeight; expect(newHeight).toEqual((((cellHeightInPx + 1) * nrOfRows) + 1)); done(); }, 200); }); it('(SYNC_CALCULATION_LIMIT + 1 rows)', (done) => { nrOfRows = SYNC_CALCULATION_LIMIT + 1; handsontable({ data: Handsontable.helper.createSpreadsheetData(nrOfRows, nrOfColumns), autoRowSize: true }); setTimeout(() => { var newHeight = spec().$container[0].scrollHeight; expect(newHeight).toEqual((((cellHeightInPx + 1) * nrOfRows) + 1)); done(); }, 200); }); it('(SYNC_CALCULATION_LIMIT + CALCULATION_STEP - 1 rows)', (done) => { nrOfRows = SYNC_CALCULATION_LIMIT + CALCULATION_STEP - 1; handsontable({ data: Handsontable.helper.createSpreadsheetData(nrOfRows, nrOfColumns), autoRowSize: true }); setTimeout(() => { var newHeight = spec().$container[0].scrollHeight; expect(newHeight).toEqual((((cellHeightInPx + 1) * nrOfRows) + 1)); done(); }, 200); }); it('(SYNC_CALCULATION_LIMIT + CALCULATION_STEP + 1 rows)', (done) => { nrOfRows = SYNC_CALCULATION_LIMIT + CALCULATION_STEP + 1; handsontable({ data: Handsontable.helper.createSpreadsheetData(nrOfRows, nrOfColumns), autoRowSize: true }); setTimeout(() => { var newHeight = spec().$container[0].scrollHeight; expect(newHeight).toEqual((((cellHeightInPx + 1) * nrOfRows) + 1)); done(); }, 200); }); }); it('should correctly detect row height when table is hidden on init (display: none)', function(done) { this.$container.css('display', 'none'); var hot = handsontable({ data: arrayOfObjects(), rowHeaders: true, autoRowSize: true }); setTimeout(() => { spec().$container.css('display', 'block'); hot.render(); expect(rowHeight(spec().$container, 0)).toBe(24); expect(rowHeight(spec().$container, 1)).toBe(43); expect([106, 127]).toEqual(jasmine.arrayContaining([rowHeight(spec().$container, 2)])); done(); }, 200); }); it('should be possible to disable plugin using updateSettings', function() { var hot = handsontable({ data: arrayOfObjects() }); var height0 = rowHeight(this.$container, 0); var height1 = rowHeight(this.$container, 1); var height2 = rowHeight(this.$container, 2); expect(height0).toBeLessThan(height1); expect(height1).toBeLessThan(height2); updateSettings({ autoRowSize: false }); hot.setDataAtCell(0, 0, 'A\nB\nC'); var height4 = rowHeight(this.$container, 0); expect(height4).toBeGreaterThan(height0); }); it('should be possible to enable plugin using updateSettings', () => { handsontable({ data: arrayOfObjects(), autoRowSize: false }); var height0 = parseInt(getCell(0, 0).style.height, 10); var height1 = parseInt(getCell(1, 0).style.height, 10); var height2 = parseInt(getCell(2, 0).style.height, 10); expect(height0).toEqual(height1); expect(height0).toEqual(height2); expect(height1).toEqual(height2); updateSettings({ autoRowSize: true }); height0 = parseInt(getCell(0, 0).style.height, 10); height1 = parseInt(getCell(1, 0).style.height, 10); height2 = parseInt(getCell(2, 0).style.height, 10); expect(height0).toBeLessThan(height1); expect(height1).toBeLessThan(height2); }); it('should consider CSS style of each instance separately', () => { var $style = $('').appendTo('head'); var $container1 = $('').appendTo('body').handsontable({ data: arrayOfObjects(), autoRowSize: true }); var $container2 = $('').appendTo('body').handsontable({ data: arrayOfObjects(), autoRowSize: true }); var hot1 = $container1.handsontable('getInstance'); var hot2 = $container2.handsontable('getInstance'); expect(parseInt(hot1.getCell(0, 0).style.height, 10)).toEqual(parseInt(hot2.getCell(0, 0).style.height, 10)); $container1.addClass('big'); hot1.render(); hot2.render(); expect(parseInt(hot1.getCell(2, 0).style.height, 10)).toBeGreaterThan(parseInt(hot2.getCell(2, 0).style.height, 10)); $container1.removeClass('big'); hot1.render(); $container2.addClass('big'); hot2.render(); expect(parseInt(hot1.getCell(2, 0).style.height, 10)).toBeLessThan(parseInt(hot2.getCell(2, 0).style.height, 10)); $style.remove(); $container1.handsontable('destroy'); $container1.remove(); $container2.handsontable('destroy'); $container2.remove(); }); it('should consider CSS class of the