mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 07:06:47 +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>
222 lines
8.3 KiB
JavaScript
222 lines
8.3 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('Basic Usage',function(){
|
|
function makeTable(){
|
|
// By default, headers will be red, and borders will be grey
|
|
var table = new Table({head:['a','b']});
|
|
|
|
table.push(['c','d']);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
colors.gray('┌───') + colors.gray('┬───┐')
|
|
, colors.gray('│') + colors.red(' a ') + colors.gray('│') + colors.red(' b ') + colors.gray('│')
|
|
, colors.gray('├───') + colors.gray('┼───┤')
|
|
, colors.gray('│') + (' c ') + colors.gray('│') + (' d ') + colors.gray('│')
|
|
, colors.gray('└───') + colors.gray('┴───┘')
|
|
];
|
|
|
|
return [makeTable,expected,'basic-usage-with-colors'];
|
|
});
|
|
|
|
it('Basic Usage - disable colors - (used often in the examples and tests)', function (){
|
|
function makeTable(){
|
|
// For most of these examples, and most of the unit tests we disable colors.
|
|
// It makes unit tests easier to write/understand, and allows these pages to
|
|
// display the examples as text instead of screen shots.
|
|
var table = new Table({
|
|
head: ['Rel', 'Change', 'By', 'When']
|
|
, style: {
|
|
head: [] //disable colors in header cells
|
|
, border: [] //disable colors for the border
|
|
}
|
|
, colWidths: [6, 21, 25, 17] //set the widths of each column (optional)
|
|
});
|
|
|
|
table.push(
|
|
['v0.1', 'Testing something cool', 'rauchg@gmail.com', '7 minutes ago']
|
|
, ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '8 minutes ago']
|
|
);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'┌──────┬─────────────────────┬─────────────────────────┬─────────────────┐'
|
|
, '│ Rel │ Change │ By │ When │'
|
|
, '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤'
|
|
, '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 7 minutes ago │'
|
|
, '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤'
|
|
, '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 8 minutes ago │'
|
|
, '└──────┴─────────────────────┴─────────────────────────┴─────────────────┘'
|
|
];
|
|
|
|
return [makeTable,expected];
|
|
});
|
|
|
|
it('Create vertical tables by adding objects a that specify key-value pairs', function() {
|
|
function makeTable(){
|
|
var table = new Table({ style: {'padding-left':0, 'padding-right':0, head:[], border:[]} });
|
|
|
|
table.push(
|
|
{'v0.1': 'Testing something cool'}
|
|
, {'v0.1': 'Testing something cool'}
|
|
);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'┌────┬──────────────────────┐'
|
|
, '│v0.1│Testing something cool│'
|
|
, '├────┼──────────────────────┤'
|
|
, '│v0.1│Testing something cool│'
|
|
, '└────┴──────────────────────┘'
|
|
];
|
|
|
|
return [makeTable,expected];
|
|
});
|
|
|
|
it('Cross tables are similar to vertical tables, but include an empty string for the first header', function() {
|
|
function makeTable(){
|
|
var table = new Table({ head: ["", "Header 1", "Header 2"], style: {'padding-left':0, 'padding-right':0, head:[], border:[]} }); // clear styles to prevent color output
|
|
|
|
table.push(
|
|
{"Header 3": ['v0.1', 'Testing something cool'] }
|
|
, {"Header 4": ['v0.1', 'Testing something cool'] }
|
|
);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'┌────────┬────────┬──────────────────────┐'
|
|
, '│ │Header 1│Header 2 │'
|
|
, '├────────┼────────┼──────────────────────┤'
|
|
, '│Header 3│v0.1 │Testing something cool│'
|
|
, '├────────┼────────┼──────────────────────┤'
|
|
, '│Header 4│v0.1 │Testing something cool│'
|
|
, '└────────┴────────┴──────────────────────┘'
|
|
];
|
|
|
|
return [makeTable,expected];
|
|
});
|
|
|
|
it('Stylize the table with custom border characters', function (){
|
|
function makeTable(){
|
|
var table = new Table({
|
|
chars: {
|
|
'top': '═'
|
|
, 'top-mid': '╤'
|
|
, 'top-left': '╔'
|
|
, 'top-right': '╗'
|
|
, 'bottom': '═'
|
|
, 'bottom-mid': '╧'
|
|
, 'bottom-left': '╚'
|
|
, 'bottom-right': '╝'
|
|
, 'left': '║'
|
|
, 'left-mid': '╟'
|
|
, 'right': '║'
|
|
, 'right-mid': '╢'
|
|
},
|
|
style: {
|
|
head: []
|
|
, border: []
|
|
}
|
|
});
|
|
|
|
table.push(
|
|
['foo', 'bar', 'baz']
|
|
, ['frob', 'bar', 'quuz']
|
|
);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'╔══════╤═════╤══════╗'
|
|
, '║ foo │ bar │ baz ║'
|
|
, '╟──────┼─────┼──────╢'
|
|
, '║ frob │ bar │ quuz ║'
|
|
, '╚══════╧═════╧══════╝'
|
|
];
|
|
|
|
return [makeTable,expected];
|
|
});
|
|
|
|
it('Use ansi colors (i.e. colors.js) to style text within the cells at will, even across multiple lines',function(){
|
|
function makeTable(){
|
|
var table = new Table({style:{border:[],header:[]}});
|
|
|
|
table.push([
|
|
colors.red('Hello\nhow\nare\nyou?'),
|
|
colors.blue('I\nam\nfine\nthanks!')
|
|
]);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'┌───────┬─────────┐'
|
|
, '│ ' + colors.red('Hello') + ' │ ' + colors.blue('I') + ' │'
|
|
, '│ ' + colors.red('how') + ' │ ' + colors.blue('am') + ' │'
|
|
, '│ ' + colors.red('are') + ' │ ' + colors.blue('fine') + ' │'
|
|
, '│ ' + colors.red('you?') + ' │ ' + colors.blue('thanks!') + ' │'
|
|
, '└───────┴─────────┘'
|
|
];
|
|
|
|
return [makeTable,expected,'multi-line-colors'];
|
|
});
|
|
|
|
it('Set `wordWrap` to true to make lines of text wrap instead of being truncated',function(){
|
|
function makeTable(){
|
|
var table = new Table({
|
|
style:{border:[],header:[]},
|
|
colWidths:[7,9],
|
|
wordWrap:true
|
|
});
|
|
|
|
table.push([
|
|
'Hello how are you?',
|
|
'I am fine thanks!'
|
|
]);
|
|
|
|
return table;
|
|
}
|
|
|
|
var expected = [
|
|
'┌───────┬─────────┐'
|
|
, '│ Hello │ I am │'
|
|
, '│ how │ fine │'
|
|
, '│ are │ thanks! │'
|
|
, '│ you? │ │'
|
|
, '└───────┴─────────┘'
|
|
];
|
|
|
|
return [makeTable,expected];
|
|
});
|
|
};
|
|
|
|
/* Expectation - ready to be copy/pasted and filled in. DO NOT DELETE THIS
|
|
|
|
|
|
var expected = [
|
|
'┌──┬───┬──┬──┐'
|
|
, '│ │ │ │ │'
|
|
, '├──┼───┼──┼──┤'
|
|
, '│ │ … │ │ │'
|
|
, '├──┼───┼──┼──┤'
|
|
, '│ │ … │ │ │'
|
|
, '└──┴───┴──┴──┘'
|
|
];
|
|
*/ |