node/deps/npm/node_modules/cli-table2/examples/col-and-row-span-examples.js
Myles Borins ace4fe566f
deps: update npm to 5.5.1
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>
2017-10-29 21:32:15 -04:00

358 lines
10 KiB
JavaScript

var Table = require('../src/table');
var colors = require('colors/safe');
module.exports = function(runTest) {
function it(name,fn) {
var result = fn();
runTest(name,result[0],result[1],result[2]);
}
it('use colSpan to span columns - (colSpan above normal cell)',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{colSpan:2,content:'greetings'}],
[{colSpan:2,content:'greetings'}],
['hello','howdy']
);
return table;
}
var expected = [
'┌───────────────┐'
, '│ greetings │'
, '├───────────────┤'
, '│ greetings │'
, '├───────┬───────┤'
, '│ hello │ howdy │'
, '└───────┴───────┘'
];
return [makeTable,expected];
});
it('use colSpan to span columns - (colSpan below normal cell)',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
['hello','howdy'],
[{colSpan:2,content:'greetings'}],
[{colSpan:2,content:'greetings'}]
);
return table;
}
var expected = [
'┌───────┬───────┐'
, '│ hello │ howdy │'
, '├───────┴───────┤'
, '│ greetings │'
, '├───────────────┤'
, '│ greetings │'
, '└───────────────┘'
];
return [makeTable,expected];
});
it('use rowSpan to span rows - (rowSpan on the left side)',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{rowSpan:2,content:'greetings'},{rowSpan:2,content:'greetings',vAlign:'center'},'hello'],
['howdy']
);
return table;
}
var expected = [
'┌───────────┬───────────┬───────┐'
, '│ greetings │ │ hello │'
, '│ │ greetings ├───────┤'
, '│ │ │ howdy │'
, '└───────────┴───────────┴───────┘'
];
return [makeTable,expected];
});
it('use rowSpan to span rows - (rowSpan on the right side)',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
['hello',{rowSpan:2,content:'greetings'},{rowSpan:2,content:'greetings',vAlign:'bottom'}],
['howdy']
);
return table;
}
var expected = [
'┌───────┬───────────┬───────────┐'
, '│ hello │ greetings │ │'
, '├───────┤ │ │'
, '│ howdy │ │ greetings │'
, '└───────┴───────────┴───────────┘'
];
return[makeTable,expected];
});
it('mix rowSpan and colSpan together for complex table layouts',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{content:'hello',colSpan:2},{rowSpan:2, colSpan:2,content:'sup'},{rowSpan:3,content:'hi'}],
[{content:'howdy',colSpan:2}],
['o','k','','']
);
return table;
}
var expected = [
'┌───────┬─────┬────┐'
, '│ hello │ sup │ hi │'
, '├───────┤ │ │'
, '│ howdy │ │ │'
, '├───┬───┼──┬──┤ │'
, '│ o │ k │ │ │ │'
, '└───┴───┴──┴──┴────┘'
];
return [makeTable,expected];
});
it('multi-line content will flow across rows in rowSpan cells',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
['hello',{rowSpan:2,content:'greetings\nfriends'},{rowSpan:2,content:'greetings\nfriends'}],
['howdy']
);
return table;
}
var expected = [
'┌───────┬───────────┬───────────┐'
, '│ hello │ greetings │ greetings │'
, '├───────┤ friends │ friends │'
, '│ howdy │ │ │'
, '└───────┴───────────┴───────────┘'
];
return [makeTable, expected];
});
it('multi-line content will flow across rows in rowSpan cells - (complex layout)',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{content:'hello',colSpan:2},{rowSpan:2, colSpan:2,content:'sup\nman\nhey'},{rowSpan:3,content:'hi\nyo'}],
[{content:'howdy',colSpan:2}],
['o','k','','']
);
return table;
}
var expected = [
'┌───────┬─────┬────┐'
, '│ hello │ sup │ hi │'
, '├───────┤ man │ yo │'
, '│ howdy │ hey │ │'
, '├───┬───┼──┬──┤ │'
, '│ o │ k │ │ │ │'
, '└───┴───┴──┴──┴────┘'
];
return [makeTable,expected];
});
it('rowSpan cells can have a staggered layout',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{content:'a',rowSpan:2},'b'],
[{content:'c',rowSpan:2}],
['d']
);
return table;
}
var expected = [
'┌───┬───┐'
, '│ a │ b │'
, '│ ├───┤'
, '│ │ c │'
, '├───┤ │'
, '│ d │ │'
, '└───┴───┘'
];
return [makeTable,expected];
});
it('the layout manager automatically create empty cells to fill in the table',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
//notice we only create 3 cells here, but the table ends up having 6.
table.push(
[{content:'a',rowSpan:3,colSpan:2},'b'],
[],
[{content:'c',rowSpan:2,colSpan:2}],
[]
);
return table;
}
var expected = [
'┌───┬───┬──┐'
, '│ a │ b │ │' // top-right and bottom-left cells are automatically created to fill the empty space
, '│ ├───┤ │'
, '│ │ │ │'
, '│ ├───┴──┤'
, '│ │ c │'
, '├───┤ │'
, '│ │ │'
, '└───┴──────┘'
];
return [makeTable,expected];
});
it('use table `rowHeights` option to fix row height. The truncation symbol will be shown on the last line.',function(){
function makeTable(){
var table = new Table({rowHeights:[2],style:{head:[],border:[]}});
table.push(['hello\nhi\nsup']);
return table;
}
var expected = [
'┌───────┐'
, '│ hello │'
, '│ hi… │'
, '└───────┘'
];
return [makeTable,expected];
});
it('if `colWidths` is not specified, the layout manager will automatically widen rows to fit the content',function(){
function makeTable(){
var table = new Table({style:{head:[],border:[]}});
table.push(
[{colSpan:2,content:'hello there'}],
['hi', 'hi']
);
return table;
}
var expected = [
'┌─────────────┐'
, '│ hello there │'
, '├──────┬──────┤'
, '│ hi │ hi │'
, '└──────┴──────┘'
];
return [makeTable,expected];
});
it('you can specify a column width for only the first row, other rows will be automatically widened to fit content',function(){
function makeTable(){
var table = new Table({colWidths:[4],style:{head:[],border:[]}});
table.push(
[{colSpan:2,content:'hello there'}],
['hi',{hAlign:'center',content:'hi'}]
);
return table;
}
var expected = [
'┌─────────────┐'
, '│ hello there │'
, '├────┬────────┤'
, '│ hi │ hi │'
, '└────┴────────┘'
];
return [makeTable, expected];
});
it('a column with a null column width will be automatically widened to fit content',function(){
function makeTable(){
var table = new Table({colWidths:[null, 4],style:{head:[],border:[]}});
table.push(
[{colSpan:2,content:'hello there'}],
[{hAlign:'right',content:'hi'}, 'hi']
);
return table;
}
var expected = [
'┌─────────────┐'
, '│ hello there │'
, '├────────┬────┤'
, '│ hi │ hi │'
, '└────────┴────┘'
];
return [makeTable,expected];
});
it('feel free to use colors in your content strings, column widths will be calculated correctly',function(){
function makeTable(){
var table = new Table({colWidths:[5],style:{head:[],border:[]}});
table.push([colors.red('hello')]);
return table;
}
var expected = [
'┌─────┐'
, '│ ' + colors.red('he') + '… │'
, '└─────┘'
];
return [makeTable,expected,'truncation-with-colors'];
});
};
/*
var expected = [
'┌──┬───┬──┬──┐'
, '│ │ │ │ │'
, '├──┼───┼──┼──┤'
, '│ │ … │ │ │'
, '├──┼───┼──┼──┤'
, '│ │ … │ │ │'
, '└──┴───┴──┴──┘'
];
*/