describe('stretchH option', function () {
var $table,
$container,
$wrapper,
debug = false;
beforeEach(function () {
$wrapper = $('
').css({ overflow: 'hidden', position: 'relative' });
$wrapper.width(500).height(201);
$container = $('');
$table = $(''); // create a table that is not attached to document
$wrapper.append($container);
$container.append($table);
$wrapper.appendTo('body');
createDataArray();
});
afterEach(function () {
if (!debug) {
$('.wtHolder').remove();
}
$wrapper.remove();
});
it('should stretch all visible columns when stretchH equals \'all\'', function () {
createDataArray(20, 2);
$wrapper.width(500).height(400);
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'all',
rowHeaders: [function (row, TH) {
TH.innerHTML = row + 1;
}]
});
wt.draw();
expect($table.outerWidth()).toBeAroundValue(wt.wtTable.holder.clientWidth);
// fix differences between Mac and Linux PhantomJS
expect($table.find('col:eq(2)').width() - $table.find('col:eq(1)').width()).toBeInArray([-1, 0, 1]);
});
it('should stretch all visible columns when stretchH equals \'all\' and window is resized', function (done) {
createDataArray(20, 2);
$wrapper.width(500).height(400);
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'all',
rowHeaders: [function (row, TH) {
TH.innerHTML = row + 1;
}]
});
wt.draw();
var initialTableWidth = $table.outerWidth();
expect(initialTableWidth).toBeAroundValue($table[0].clientWidth);
$wrapper.width(600).height(500);
var evt = document.createEvent('CustomEvent'); // MUST be 'CustomEvent'
evt.initCustomEvent('resize', false, false, null);
window.dispatchEvent(evt);
setTimeout(function () {
var currentTableWidth = $table.outerWidth();
expect(currentTableWidth).toBeAroundValue($table[0].clientWidth);
expect(currentTableWidth).toBeGreaterThan(initialTableWidth);
done();
}, 10);
});
it('should stretch all visible columns when stretchH equals \'all\' (when rows are of variable height)', function () {
createDataArray(20, 2);
for (var i = 0, ilen = this.data.length; i < ilen; i++) {
if (i % 2) {
this.data[i][0] += ' this is a cell that contains a lot of text, which will make it multi-line';
}
}
$wrapper.width(300);
$wrapper.css({
overflow: 'hidden'
});
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'all'
});
wt.draw();
var expectedColWidth = (300 - getScrollbarWidth()) / 2;
expectedColWidth = Math.floor(expectedColWidth);
var wtHider = $table.parents('.wtHider');
expect(wtHider.find('col:eq(0)').width()).toBeAroundValue(expectedColWidth);
expect(wtHider.find('col:eq(1)').width() - expectedColWidth).toBeInArray([0, 1]); // fix differences between Mac and Linux PhantomJS
});
it('should stretch last visible column when stretchH equals \'last\' (vertical scroll)', function () {
createDataArray(20, 2);
$wrapper.width(300).height(201);
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'last',
rowHeaders: [function (row, TH) {
TH.innerHTML = row + 1;
}]
});
wt.draw();
var wtHider = $table.parents('.wtHider');
expect(wtHider.outerWidth()).toBe(getTableWidth($table));
expect(wtHider.find('col:eq(1)').width()).toBeLessThan(wtHider.find('col:eq(2)').width());
});
it('should stretch last column when stretchH equals \'last\' (horizontal scroll)', function () {
createDataArray(5, 20);
$wrapper.width(400).height(201);
spec().data[0][19] = 'longer text';
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'last',
columnHeaders: [function (index, TH) {
TH.innerHTML = index + 1;
}],
columnWidth: function columnWidth(index) {
return index === 19 ? 100 : 50;
}
});
wt.draw();
wt.scrollHorizontal(19);
wt.draw();
var wtHider = $table.parents('.wtHider');
expect(wtHider.find('col:eq(6)').width()).toBe(100);
});
it('should stretch last visible column when stretchH equals \'last\' (no scrolls)', function () {
createDataArray(2, 2);
$wrapper.width(300).height(201);
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'last',
rowHeaders: [function (row, TH) {
TH.innerHTML = row + 1;
}]
});
wt.draw();
var wtHider = $table.parents('.wtHider');
expect(wtHider.outerWidth()).toBe(getTableWidth($table));
expect(wtHider.find('col:eq(1)').width()).toBeLessThan(wtHider.find('col:eq(2)').width());
});
it('should not stretch when stretchH equals \'none\'', function () {
createDataArray(20, 2);
$wrapper.width(300).height(201);
var wt = new Walkontable.Core({
table: $table[0],
data: getData,
totalRows: getTotalRows,
totalColumns: getTotalColumns,
stretchH: 'none',
rowHeaders: [function (row, TH) {
TH.innerHTML = row + 1;
}]
});
wt.draw();
var wtHider = $table.parents('.wtHider');
expect($table.width()).toBeLessThan($wrapper.width());
expect($table.find('col:eq(1)').width()).toBe($table.find('col:eq(2)').width());
});
});