mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 18:57:28 +00:00

Closes: https://github.com/nodejs/node/pull/16280 PR-URL: https://github.com/nodejs/node/pull/16509 Fixes: https://github.com/nodejs/node/issues/14161 Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaël Zasso <targos@protonmail.com>
936 lines
30 KiB
JavaScript
936 lines
30 KiB
JavaScript
describe('Cell',function(){
|
|
var chai = require('chai');
|
|
var expect = chai.expect;
|
|
var sinon = require('sinon');
|
|
var sinonChai = require("sinon-chai");
|
|
chai.use(sinonChai);
|
|
|
|
var colors = require('colors');
|
|
var Cell = require('../src/cell');
|
|
var RowSpanCell = Cell.RowSpanCell;
|
|
var ColSpanCell = Cell.ColSpanCell;
|
|
var mergeOptions = require('../src/utils').mergeOptions;
|
|
|
|
function defaultOptions(){
|
|
//overwrite coloring of head and border by default for easier testing.
|
|
return mergeOptions({style:{head:[],border:[]}});
|
|
}
|
|
|
|
function defaultChars(){
|
|
return {
|
|
'top': '─'
|
|
, 'topMid': '┬'
|
|
, 'topLeft': '┌'
|
|
, 'topRight': '┐'
|
|
, 'bottom': '─'
|
|
, 'bottomMid': '┴'
|
|
, 'bottomLeft': '└'
|
|
, 'bottomRight': '┘'
|
|
, 'left': '│'
|
|
, 'leftMid': '├'
|
|
, 'mid': '─'
|
|
, 'midMid': '┼'
|
|
, 'right': '│'
|
|
, 'rightMid': '┤'
|
|
, 'middle': '│'
|
|
};
|
|
}
|
|
|
|
describe('constructor',function(){
|
|
it('colSpan and rowSpan default to 1',function(){
|
|
var cell = new Cell();
|
|
expect(cell.colSpan).to.equal(1);
|
|
expect(cell.rowSpan).to.equal(1);
|
|
});
|
|
|
|
it('colSpan and rowSpan can be set via constructor',function(){
|
|
var cell = new Cell({rowSpan:2,colSpan:3});
|
|
expect(cell.rowSpan).to.equal(2);
|
|
expect(cell.colSpan).to.equal(3);
|
|
});
|
|
|
|
it('content can be set as a string',function(){
|
|
var cell = new Cell('hello\nworld');
|
|
expect(cell.content).to.equal('hello\nworld');
|
|
});
|
|
|
|
it('content can be set as a options property',function(){
|
|
var cell = new Cell({content:'hello\nworld'});
|
|
expect(cell.content).to.equal('hello\nworld');
|
|
});
|
|
|
|
it('default content is an empty string',function(){
|
|
var cell = new Cell();
|
|
expect(cell.content).to.equal('');
|
|
});
|
|
|
|
it('new Cell(null) will have empty string content',function(){
|
|
var cell = new Cell(null);
|
|
expect(cell.content).to.equal('');
|
|
});
|
|
|
|
it('new Cell({content: null}) will have empty string content',function(){
|
|
var cell = new Cell({content: null});
|
|
expect(cell.content).to.equal('');
|
|
});
|
|
|
|
it('new Cell(0) will have "0" as content',function(){
|
|
var cell = new Cell(0);
|
|
expect(cell.content).to.equal('0');
|
|
});
|
|
|
|
it('new Cell({content: 0}) will have "0" as content',function(){
|
|
var cell = new Cell({content: 0});
|
|
expect(cell.content).to.equal('0');
|
|
});
|
|
|
|
it('new Cell(false) will have "false" as content',function(){
|
|
var cell = new Cell(false);
|
|
expect(cell.content).to.equal('false');
|
|
});
|
|
|
|
it('new Cell({content: false}) will have "false" as content',function(){
|
|
var cell = new Cell({content: false});
|
|
expect(cell.content).to.equal('false');
|
|
});
|
|
});
|
|
|
|
describe('mergeTableOptions',function(){
|
|
describe('chars',function(){
|
|
it('unset chars take on value of table',function(){
|
|
var cell = new Cell();
|
|
var tableOptions = defaultOptions();
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.chars).to.eql(defaultChars());
|
|
});
|
|
|
|
it('set chars override the value of table',function(){
|
|
var cell = new Cell({chars:{bottomRight:'='}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
var chars = defaultChars();
|
|
chars.bottomRight = '=';
|
|
expect(cell.chars).to.eql(chars);
|
|
});
|
|
|
|
it('hyphenated names will be converted to camel-case',function(){
|
|
var cell = new Cell({chars:{'bottom-left':'='}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
var chars = defaultChars();
|
|
chars.bottomLeft = '=';
|
|
expect(cell.chars).to.eql(chars);
|
|
});
|
|
});
|
|
|
|
describe('truncate',function(){
|
|
it('if unset takes on value of table',function(){
|
|
var cell = new Cell();
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.truncate).to.equal('…');
|
|
});
|
|
|
|
it('if set overrides value of table',function(){
|
|
var cell = new Cell({truncate:'...'});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.truncate).to.equal('...');
|
|
});
|
|
});
|
|
|
|
describe('style.padding-left', function () {
|
|
it('if unset will be copied from tableOptions.style', function () {
|
|
var cell = new Cell();
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingLeft).to.equal(1);
|
|
|
|
cell = new Cell();
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.style['padding-left'] = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.paddingLeft).to.equal(2);
|
|
|
|
cell = new Cell();
|
|
tableOptions = defaultOptions();
|
|
tableOptions.style.paddingLeft = 3;
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.paddingLeft).to.equal(3);
|
|
});
|
|
|
|
it('if set will override tableOptions.style', function () {
|
|
var cell = new Cell({style:{'padding-left':2}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingLeft).to.equal(2);
|
|
|
|
cell = new Cell({style:{paddingLeft:3}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingLeft).to.equal(3);
|
|
});
|
|
});
|
|
|
|
describe('style.padding-right', function () {
|
|
it('if unset will be copied from tableOptions.style', function () {
|
|
var cell = new Cell();
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingRight).to.equal(1);
|
|
|
|
cell = new Cell();
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.style['padding-right'] = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.paddingRight).to.equal(2);
|
|
|
|
cell = new Cell();
|
|
tableOptions = defaultOptions();
|
|
tableOptions.style.paddingRight = 3;
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.paddingRight).to.equal(3);
|
|
});
|
|
|
|
it('if set will override tableOptions.style', function () {
|
|
var cell = new Cell({style:{'padding-right':2}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingRight).to.equal(2);
|
|
|
|
cell = new Cell({style:{paddingRight:3}});
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.paddingRight).to.equal(3);
|
|
});
|
|
});
|
|
|
|
describe('desiredWidth',function(){
|
|
it('content(hello) padding(1,1) == 7',function(){
|
|
var cell = new Cell('hello');
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.desiredWidth).to.equal(7);
|
|
});
|
|
|
|
it('content(hi) padding(1,2) == 5',function(){
|
|
var cell = new Cell({content:'hi',style:{paddingRight:2}});
|
|
var tableOptions = defaultOptions();
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.desiredWidth).to.equal(5);
|
|
});
|
|
|
|
it('content(hi) padding(3,2) == 7',function(){
|
|
var cell = new Cell({content:'hi',style:{paddingLeft:3,paddingRight:2}});
|
|
var tableOptions = defaultOptions();
|
|
cell.mergeTableOptions(tableOptions);
|
|
expect(cell.desiredWidth).to.equal(7);
|
|
});
|
|
});
|
|
|
|
describe('desiredHeight',function(){
|
|
it('1 lines of text',function(){
|
|
var cell = new Cell('hi');
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.desiredHeight).to.equal(1);
|
|
});
|
|
|
|
it('2 lines of text',function(){
|
|
var cell = new Cell('hi\nbye');
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.desiredHeight).to.equal(2);
|
|
});
|
|
|
|
it('2 lines of text',function(){
|
|
var cell = new Cell('hi\nbye\nyo');
|
|
cell.mergeTableOptions(defaultOptions());
|
|
expect(cell.desiredHeight).to.equal(3);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('init',function(){
|
|
describe('hAlign',function(){
|
|
it('if unset takes colAlign value from tableOptions',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.colAligns = ['left','right','both'];
|
|
var cell = new Cell();
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('left');
|
|
cell = new Cell();
|
|
cell.x = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('right');
|
|
cell = new Cell();
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.x=2;
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('both');
|
|
});
|
|
|
|
it('if set overrides tableOptions',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.colAligns = ['left','right','both'];
|
|
var cell = new Cell({hAlign:'right'});
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('right');
|
|
cell = new Cell({hAlign:'left'});
|
|
cell.x = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('left');
|
|
cell = new Cell({hAlign:'right'});
|
|
cell.x = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.hAlign).to.equal('right');
|
|
});
|
|
});
|
|
|
|
describe('vAlign',function(){
|
|
it('if unset takes rowAlign value from tableOptions',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.rowAligns = ['top','bottom','center'];
|
|
var cell = new Cell();
|
|
cell.y=0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('top');
|
|
cell = new Cell();
|
|
cell.y = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('bottom');
|
|
cell = new Cell();
|
|
cell.y = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('center');
|
|
});
|
|
|
|
it('if set overrides tableOptions',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.rowAligns = ['top','bottom','center'];
|
|
|
|
var cell = new Cell({vAlign:'bottom'});
|
|
cell.y = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('bottom');
|
|
|
|
cell = new Cell({vAlign:'top'});
|
|
cell.y = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('top');
|
|
|
|
cell = new Cell({vAlign:'center'});
|
|
cell.y = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.vAlign).to.equal('center');
|
|
});
|
|
});
|
|
|
|
describe('width', function(){
|
|
it('will match colWidth of x',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.colWidths = [5,10,15];
|
|
|
|
var cell = new Cell();
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(5);
|
|
|
|
cell = new Cell();
|
|
cell.x = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(10);
|
|
|
|
cell = new Cell();
|
|
cell.x = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(15);
|
|
});
|
|
|
|
it('will add colWidths if colSpan > 1',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.colWidths = [5,10,15];
|
|
|
|
var cell = new Cell({colSpan:2});
|
|
cell.x=0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(16);
|
|
|
|
cell = new Cell({colSpan:2});
|
|
cell.x=1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(26);
|
|
|
|
cell = new Cell({colSpan:3});
|
|
cell.x=0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.width).to.equal(32);
|
|
});
|
|
});
|
|
|
|
describe('height', function(){
|
|
it('will match rowHeight of x',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.rowHeights = [5,10,15];
|
|
|
|
var cell = new Cell();
|
|
cell.y=0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(5);
|
|
|
|
cell = new Cell();
|
|
cell.y=1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(10);
|
|
|
|
cell = new Cell();
|
|
cell.y=2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(15);
|
|
});
|
|
|
|
it('will add rowHeights if rowSpan > 1',function(){
|
|
var tableOptions = defaultOptions();
|
|
tableOptions.rowHeights = [5,10,15];
|
|
|
|
var cell = new Cell({rowSpan:2});
|
|
cell.y = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(16);
|
|
|
|
cell = new Cell({rowSpan:2});
|
|
cell.y = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(26);
|
|
|
|
cell = new Cell({rowSpan:3});
|
|
cell.y = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.height).to.equal(32);
|
|
});
|
|
});
|
|
|
|
describe('drawRight', function(){
|
|
var tableOptions;
|
|
|
|
beforeEach(function(){
|
|
tableOptions = defaultOptions();
|
|
tableOptions.colWidths = [20,20,20];
|
|
});
|
|
|
|
it('col 1 of 3, with default colspan',function(){
|
|
var cell = new Cell();
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(false);
|
|
});
|
|
|
|
it('col 2 of 3, with default colspan',function(){
|
|
var cell = new Cell();
|
|
cell.x = 1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(false);
|
|
});
|
|
|
|
it('col 3 of 3, with default colspan',function(){
|
|
var cell = new Cell();
|
|
cell.x = 2;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(true);
|
|
});
|
|
|
|
it('col 3 of 4, with default colspan',function(){
|
|
var cell = new Cell();
|
|
cell.x = 2;
|
|
tableOptions.colWidths = [20,20,20,20];
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(false);
|
|
});
|
|
|
|
it('col 2 of 3, with colspan of 2',function(){
|
|
var cell = new Cell({colSpan:2});
|
|
cell.x=1;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(true);
|
|
});
|
|
|
|
it('col 1 of 3, with colspan of 3',function(){
|
|
var cell = new Cell({colSpan:3});
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(true);
|
|
});
|
|
|
|
it('col 1 of 3, with colspan of 2',function(){
|
|
var cell = new Cell({colSpan:2});
|
|
cell.x = 0;
|
|
cell.mergeTableOptions(tableOptions);
|
|
cell.init(tableOptions);
|
|
expect(cell.drawRight).to.equal(false);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('drawLine', function(){
|
|
var cell;
|
|
|
|
beforeEach(function () {
|
|
cell = new Cell();
|
|
|
|
//manually init
|
|
cell.chars = defaultChars();
|
|
cell.paddingLeft = cell.paddingRight = 1;
|
|
cell.width = 7;
|
|
cell.height = 3;
|
|
cell.hAlign = 'center';
|
|
cell.vAlign = 'center';
|
|
cell.chars.left = 'L';
|
|
cell.chars.right = 'R';
|
|
cell.chars.middle = 'M';
|
|
cell.content = 'hello\nhowdy\ngoodnight';
|
|
cell.lines = cell.content.split('\n');
|
|
cell.x = cell.y = 0;
|
|
});
|
|
|
|
describe('top line',function(){
|
|
it('will draw the top left corner when x=0,y=0',function(){
|
|
cell.x = cell.y = 0;
|
|
expect(cell.draw('top')).to.equal('┌───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('top')).to.equal('┌───────┐');
|
|
});
|
|
|
|
it('will draw the top mid corner when x=1,y=0',function(){
|
|
cell.x = 1;
|
|
cell.y = 0;
|
|
expect(cell.draw('top')).to.equal('┬───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('top')).to.equal('┬───────┐');
|
|
});
|
|
|
|
it('will draw the left mid corner when x=0,y=1',function(){
|
|
cell.x = 0;
|
|
cell.y = 1;
|
|
expect(cell.draw('top')).to.equal('├───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('top')).to.equal('├───────┤');
|
|
});
|
|
|
|
it('will draw the mid mid corner when x=1,y=1',function(){
|
|
cell.x = 1;
|
|
cell.y = 1;
|
|
expect(cell.draw('top')).to.equal('┼───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('top')).to.equal('┼───────┤');
|
|
});
|
|
|
|
it('will draw in the color specified by border style',function(){
|
|
cell.border = ['gray'];
|
|
expect(cell.draw('top')).to.equal(colors.gray('┌───────'))
|
|
});
|
|
});
|
|
|
|
describe('bottom line',function(){
|
|
it('will draw the bottom left corner if x=0',function(){
|
|
cell.x = 0;
|
|
cell.y = 1;
|
|
expect(cell.draw('bottom')).to.equal('└───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('bottom')).to.equal('└───────┘');
|
|
});
|
|
|
|
it('will draw the bottom left corner if x=1',function(){
|
|
cell.x = 1;
|
|
cell.y = 1;
|
|
expect(cell.draw('bottom')).to.equal('┴───────');
|
|
cell.drawRight = true;
|
|
expect(cell.draw('bottom')).to.equal('┴───────┘');
|
|
});
|
|
|
|
it('will draw in the color specified by border style',function(){
|
|
cell.border = ['gray'];
|
|
expect(cell.draw('bottom')).to.equal(colors.gray('└───────'))
|
|
});
|
|
});
|
|
|
|
describe('drawBottom',function(){
|
|
it('draws an empty line',function(){
|
|
expect(cell.drawEmpty()).to.equal('L ');
|
|
expect(cell.drawEmpty(true)).to.equal('L R');
|
|
});
|
|
|
|
it('draws an empty line',function(){
|
|
cell.border = ['gray'];
|
|
cell.head = ['red'];
|
|
expect(cell.drawEmpty()).to.equal(colors.gray('L') + colors.red(' '));
|
|
expect(cell.drawEmpty(true)).to.equal(colors.gray('L') + colors.red(' ') + colors.gray('R'));
|
|
});
|
|
});
|
|
|
|
describe('first line of text',function(){
|
|
beforeEach(function () {
|
|
cell.width = 9;
|
|
});
|
|
|
|
it('will draw left side if x=0',function(){
|
|
cell.x = 0;
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('L hello R');
|
|
});
|
|
|
|
it('will draw mid side if x=1',function(){
|
|
cell.x = 1;
|
|
expect(cell.draw(0)).to.equal('M hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('M hello R');
|
|
});
|
|
|
|
it('will align left',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'left';
|
|
expect(cell.draw(0)).to.equal('M hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('M hello R');
|
|
});
|
|
|
|
it('will align right',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'right';
|
|
expect(cell.draw(0)).to.equal('M hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('M hello R');
|
|
});
|
|
|
|
it('left and right will be drawn in color of border style',function(){
|
|
cell.border = ['gray'];
|
|
cell.x = 0;
|
|
expect(cell.draw(0)).to.equal(colors.gray('L') + ' hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal(colors.gray('L') + ' hello ' + colors.gray('R'));
|
|
});
|
|
|
|
it('text will be drawn in color of head style if y == 0',function(){
|
|
cell.head = ['red'];
|
|
cell.x = cell.y = 0;
|
|
expect(cell.draw(0)).to.equal('L' + colors.red(' hello '));
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('L' + colors.red(' hello ') + 'R');
|
|
});
|
|
|
|
it('text will NOT be drawn in color of head style if y == 1',function(){
|
|
cell.head = ['red'];
|
|
cell.x = cell.y = 1;
|
|
expect(cell.draw(0)).to.equal('M hello ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('M hello R');
|
|
});
|
|
|
|
it('head and border colors together',function(){
|
|
cell.border = ['gray'];
|
|
cell.head = ['red'];
|
|
cell.x = cell.y = 0;
|
|
expect(cell.draw(0)).to.equal(colors.gray('L') + colors.red(' hello '));
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal(colors.gray('L') + colors.red(' hello ') + colors.gray('R'));
|
|
});
|
|
});
|
|
|
|
describe('second line of text',function(){
|
|
beforeEach(function () {
|
|
cell.width = 9;
|
|
});
|
|
|
|
it('will draw left side if x=0',function(){
|
|
cell.x = 0;
|
|
expect(cell.draw(1)).to.equal('L howdy ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(1)).to.equal('L howdy R');
|
|
});
|
|
|
|
it('will draw mid side if x=1',function(){
|
|
cell.x = 1;
|
|
expect(cell.draw(1)).to.equal('M howdy ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(1)).to.equal('M howdy R');
|
|
});
|
|
|
|
it('will align left',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'left';
|
|
expect(cell.draw(1)).to.equal('M howdy ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(1)).to.equal('M howdy R');
|
|
});
|
|
|
|
it('will align right',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'right';
|
|
expect(cell.draw(1)).to.equal('M howdy ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(1)).to.equal('M howdy R');
|
|
});
|
|
});
|
|
|
|
describe('truncated line of text',function(){
|
|
beforeEach(function () {
|
|
cell.width = 9;
|
|
});
|
|
|
|
it('will draw left side if x=0',function(){
|
|
cell.x = 0;
|
|
expect(cell.draw(2)).to.equal('L goodni… ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(2)).to.equal('L goodni… R');
|
|
});
|
|
|
|
it('will draw mid side if x=1',function(){
|
|
cell.x = 1;
|
|
expect(cell.draw(2)).to.equal('M goodni… ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(2)).to.equal('M goodni… R');
|
|
});
|
|
|
|
it('will not change when aligned left',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'left';
|
|
expect(cell.draw(2)).to.equal('M goodni… ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(2)).to.equal('M goodni… R');
|
|
});
|
|
|
|
it('will not change when aligned right',function(){
|
|
cell.x = 1;
|
|
cell.hAlign = 'right';
|
|
expect(cell.draw(2)).to.equal('M goodni… ');
|
|
cell.drawRight = true;
|
|
expect(cell.draw(2)).to.equal('M goodni… R');
|
|
});
|
|
});
|
|
|
|
describe('vAlign',function(){
|
|
beforeEach(function () {
|
|
cell.height = '5';
|
|
});
|
|
|
|
it('center',function(){
|
|
cell.vAlign = 'center';
|
|
expect(cell.draw(0)).to.equal('L ');
|
|
expect(cell.draw(1)).to.equal('L hello ');
|
|
expect(cell.draw(2)).to.equal('L howdy ');
|
|
expect(cell.draw(3)).to.equal('L good… ');
|
|
expect(cell.draw(4)).to.equal('L ');
|
|
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('L R');
|
|
expect(cell.draw(1)).to.equal('L hello R');
|
|
expect(cell.draw(2)).to.equal('L howdy R');
|
|
expect(cell.draw(3)).to.equal('L good… R');
|
|
expect(cell.draw(4)).to.equal('L R');
|
|
|
|
cell.x = 1;
|
|
cell.drawRight = false;
|
|
expect(cell.draw(0)).to.equal('M ');
|
|
expect(cell.draw(1)).to.equal('M hello ');
|
|
expect(cell.draw(2)).to.equal('M howdy ');
|
|
expect(cell.draw(3)).to.equal('M good… ');
|
|
expect(cell.draw(4)).to.equal('M ');
|
|
});
|
|
|
|
it('top',function(){
|
|
cell.vAlign = 'top';
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L howdy ');
|
|
expect(cell.draw(2)).to.equal('L good… ');
|
|
expect(cell.draw(3)).to.equal('L ');
|
|
expect(cell.draw(4)).to.equal('L ');
|
|
|
|
cell.vAlign = null; //top is the default
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('L hello R');
|
|
expect(cell.draw(1)).to.equal('L howdy R');
|
|
expect(cell.draw(2)).to.equal('L good… R');
|
|
expect(cell.draw(3)).to.equal('L R');
|
|
expect(cell.draw(4)).to.equal('L R');
|
|
|
|
cell.x = 1;
|
|
cell.drawRight = false;
|
|
expect(cell.draw(0)).to.equal('M hello ');
|
|
expect(cell.draw(1)).to.equal('M howdy ');
|
|
expect(cell.draw(2)).to.equal('M good… ');
|
|
expect(cell.draw(3)).to.equal('M ');
|
|
expect(cell.draw(4)).to.equal('M ');
|
|
});
|
|
|
|
it('center',function(){
|
|
cell.vAlign = 'bottom';
|
|
expect(cell.draw(0)).to.equal('L ');
|
|
expect(cell.draw(1)).to.equal('L ');
|
|
expect(cell.draw(2)).to.equal('L hello ');
|
|
expect(cell.draw(3)).to.equal('L howdy ');
|
|
expect(cell.draw(4)).to.equal('L good… ');
|
|
|
|
cell.drawRight = true;
|
|
expect(cell.draw(0)).to.equal('L R');
|
|
expect(cell.draw(1)).to.equal('L R');
|
|
expect(cell.draw(2)).to.equal('L hello R');
|
|
expect(cell.draw(3)).to.equal('L howdy R');
|
|
expect(cell.draw(4)).to.equal('L good… R');
|
|
|
|
cell.x = 1;
|
|
cell.drawRight = false;
|
|
expect(cell.draw(0)).to.equal('M ');
|
|
expect(cell.draw(1)).to.equal('M ');
|
|
expect(cell.draw(2)).to.equal('M hello ');
|
|
expect(cell.draw(3)).to.equal('M howdy ');
|
|
expect(cell.draw(4)).to.equal('M good… ');
|
|
});
|
|
});
|
|
|
|
it('vertically truncated will show truncation on last visible line',function(){
|
|
cell.height = 2;
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L howd… ');
|
|
});
|
|
|
|
it("won't vertically truncate if the lines just fit",function(){
|
|
cell.height = 2;
|
|
cell.content = "hello\nhowdy";
|
|
cell.lines = cell.content.split("\n");
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L howdy ');
|
|
});
|
|
|
|
it("will vertically truncate even if last line is short",function(){
|
|
cell.height = 2;
|
|
cell.content = "hello\nhi\nhowdy";
|
|
cell.lines = cell.content.split("\n");
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L hi… ');
|
|
});
|
|
|
|
it("allows custom truncation",function(){
|
|
cell.height = 2;
|
|
cell.truncate = '...';
|
|
cell.content = "hello\nhi\nhowdy";
|
|
cell.lines = cell.content.split("\n");
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L hi... ');
|
|
|
|
cell.content = "hello\nhowdy\nhi";
|
|
cell.lines = cell.content.split("\n");
|
|
expect(cell.draw(0)).to.equal('L hello ');
|
|
expect(cell.draw(1)).to.equal('L ho... ');
|
|
});
|
|
});
|
|
|
|
describe("ColSpanCell",function(){
|
|
it('has an init function',function(){
|
|
expect(new ColSpanCell()).to.respondTo('init');
|
|
new ColSpanCell().init(); // nothing happens.
|
|
});
|
|
|
|
it('draw returns an empty string',function(){
|
|
expect(new ColSpanCell().draw('top')).to.equal('');
|
|
expect(new ColSpanCell().draw('bottom')).to.equal('');
|
|
expect(new ColSpanCell().draw(1)).to.equal('');
|
|
});
|
|
});
|
|
|
|
describe("RowSpanCell",function(){
|
|
var original, tableOptions;
|
|
|
|
beforeEach(function () {
|
|
original = {
|
|
rowSpan:3,
|
|
y:0,
|
|
draw:sinon.spy()
|
|
};
|
|
tableOptions = {
|
|
rowHeights:[2,3,4,5]
|
|
}
|
|
});
|
|
|
|
it('drawing top of the next row',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 1;
|
|
spanner.init(tableOptions);
|
|
spanner.draw('top');
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(2);
|
|
});
|
|
|
|
it('drawing line 0 of the next row',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 1;
|
|
spanner.init(tableOptions);
|
|
spanner.draw(0);
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(3);
|
|
});
|
|
|
|
it('drawing line 1 of the next row',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 1;
|
|
spanner.init(tableOptions);
|
|
spanner.draw(1);
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(4);
|
|
});
|
|
|
|
it('drawing top of two rows below',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 2;
|
|
spanner.init(tableOptions);
|
|
spanner.draw('top');
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(6);
|
|
});
|
|
|
|
it('drawing line 0 of two rows below',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 2;
|
|
spanner.init(tableOptions);
|
|
spanner.draw(0);
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(7);
|
|
});
|
|
|
|
it('drawing line 1 of two rows below',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 2;
|
|
spanner.init(tableOptions);
|
|
spanner.draw(1);
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith(8);
|
|
});
|
|
|
|
it('drawing bottom',function(){
|
|
var spanner = new RowSpanCell(original);
|
|
spanner.x = 0;
|
|
spanner.y = 1;
|
|
spanner.init(tableOptions);
|
|
spanner.draw('bottom');
|
|
expect(original.draw).to.have.been.calledOnce.and.calledWith('bottom');
|
|
});
|
|
});
|
|
});
|