mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 00:11:20 +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>
295 lines
10 KiB
JavaScript
295 lines
10 KiB
JavaScript
describe('@api original-cli-table index tests',function(){
|
|
var Table = require('../src/table');
|
|
var chai = require('chai');
|
|
var expect = chai.expect;
|
|
|
|
it('test complete table', function (){
|
|
var table = new Table({
|
|
head: ['Rel', 'Change', 'By', 'When']
|
|
, style: {
|
|
'padding-left': 1
|
|
, 'padding-right': 1
|
|
, head: []
|
|
, border: []
|
|
}
|
|
, colWidths: [6, 21, 25, 17]
|
|
});
|
|
|
|
table.push(
|
|
['v0.1', 'Testing something cool', 'rauchg@gmail.com', '7 minutes ago']
|
|
, ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '8 minutes ago']
|
|
);
|
|
|
|
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 │'
|
|
, '└──────┴─────────────────────┴─────────────────────────┴─────────────────┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
//expect(table.render()).should.eql(expected.join("\n"));
|
|
});
|
|
|
|
it('test width property', function (){
|
|
var table = new Table({
|
|
head: ['Cool'],
|
|
style: {
|
|
head: [],
|
|
border: []
|
|
}
|
|
});
|
|
|
|
expect(table.width).to.equal(8);
|
|
});
|
|
|
|
it('test vertical table output', function() {
|
|
var table = new Table({ style: {'padding-left':0, 'padding-right':0, head:[], border:[]} }); // clear styles to prevent color output
|
|
|
|
table.push(
|
|
{'v0.1': 'Testing something cool'}
|
|
, {'v0.1': 'Testing something cool'}
|
|
);
|
|
|
|
var expected = [
|
|
'┌────┬──────────────────────┐'
|
|
, '│v0.1│Testing something cool│'
|
|
, '├────┼──────────────────────┤'
|
|
, '│v0.1│Testing something cool│'
|
|
, '└────┴──────────────────────┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test cross table output', function() {
|
|
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'] }
|
|
);
|
|
|
|
var expected = [
|
|
'┌────────┬────────┬──────────────────────┐'
|
|
, '│ │Header 1│Header 2 │'
|
|
, '├────────┼────────┼──────────────────────┤'
|
|
, '│Header 3│v0.1 │Testing something cool│'
|
|
, '├────────┼────────┼──────────────────────┤'
|
|
, '│Header 4│v0.1 │Testing something cool│'
|
|
, '└────────┴────────┴──────────────────────┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test table colors', function(){
|
|
var table = new Table({
|
|
head: ['Rel', 'By'],
|
|
style: {head: ['red'], border: ['grey']}
|
|
});
|
|
|
|
/*var off = ''
|
|
, red = ''
|
|
, orange = ''
|
|
, grey = ''*/
|
|
var off = '\u001b[39m'
|
|
, red = '\u001b[31m'
|
|
, orange = '\u001b[38;5;221m'
|
|
, grey = '\u001b[90m'
|
|
|
|
, c256s = orange + 'v0.1' + off;
|
|
|
|
table.push(
|
|
[c256s, 'rauchg@gmail.com']
|
|
);
|
|
|
|
// The expectation from the original cli-table is commented out below.
|
|
// The output from cli-table2 will still look the same, but the border color is
|
|
// toggled off and back on at the border of each cell.
|
|
|
|
/*var expected = [
|
|
grey + '┌──────┬──────────────────┐' + off
|
|
, grey + '│' + off + red + ' Rel ' + off + grey + '│' + off + red + ' By ' + off + grey + '│' + off
|
|
, grey + '├──────┼──────────────────┤' + off
|
|
, grey + '│' + off + ' ' + c256s + ' ' + grey + '│' + off + ' rauchg@gmail.com ' + grey + '│' + off
|
|
, grey + '└──────┴──────────────────┘' + off
|
|
];*/
|
|
|
|
var expected = [
|
|
grey + '┌──────'+off+grey+'┬──────────────────┐' + off
|
|
, grey + '│' + off + red + ' Rel ' + off + grey + '│' + off + red + ' By ' + off + grey + '│' + off
|
|
, grey + '├──────'+off+grey+'┼──────────────────┤' + off
|
|
, grey + '│' + off + ' ' + c256s + ' ' + grey + '│' + off + ' rauchg@gmail.com ' + grey + '│' + off
|
|
, grey + '└──────'+off+grey+'┴──────────────────┘' + off
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test custom chars', function (){
|
|
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']
|
|
);
|
|
|
|
var expected = [
|
|
'╔══════╤═════╤══════╗'
|
|
, '║ foo │ bar │ baz ║'
|
|
, '╟──────┼─────┼──────╢'
|
|
, '║ frob │ bar │ quuz ║'
|
|
, '╚══════╧═════╧══════╝'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test compact shortand', function (){
|
|
var table = new Table({
|
|
style: {
|
|
head: []
|
|
, border: []
|
|
, compact : true
|
|
}
|
|
});
|
|
|
|
table.push(
|
|
['foo', 'bar', 'baz']
|
|
, ['frob', 'bar', 'quuz']
|
|
);
|
|
|
|
var expected = [
|
|
'┌──────┬─────┬──────┐'
|
|
, '│ foo │ bar │ baz │'
|
|
, '│ frob │ bar │ quuz │'
|
|
, '└──────┴─────┴──────┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test compact empty mid line', function (){
|
|
var table = new Table({
|
|
chars: {
|
|
'mid': ''
|
|
, 'left-mid': ''
|
|
, 'mid-mid': ''
|
|
, 'right-mid': ''
|
|
},
|
|
style: {
|
|
head: []
|
|
, border: []
|
|
}
|
|
});
|
|
|
|
table.push(
|
|
['foo', 'bar', 'baz']
|
|
, ['frob', 'bar', 'quuz']
|
|
);
|
|
|
|
var expected = [
|
|
'┌──────┬─────┬──────┐'
|
|
, '│ foo │ bar │ baz │'
|
|
, '│ frob │ bar │ quuz │'
|
|
, '└──────┴─────┴──────┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test decoration lines disabled', function (){
|
|
var table = new Table({
|
|
chars: {
|
|
'top': ''
|
|
, 'top-mid': ''
|
|
, 'top-left': ''
|
|
, 'top-right': ''
|
|
, 'bottom': ''
|
|
, 'bottom-mid': ''
|
|
, 'bottom-left': ''
|
|
, 'bottom-right': ''
|
|
, 'left': ''
|
|
, 'left-mid': ''
|
|
, 'mid': ''
|
|
, 'mid-mid': ''
|
|
, 'right': ''
|
|
, 'right-mid': ''
|
|
, 'middle': ' ' // a single space
|
|
},
|
|
style: {
|
|
head: []
|
|
, border: []
|
|
, 'padding-left': 0
|
|
, 'padding-right': 0
|
|
}
|
|
});
|
|
|
|
table.push(
|
|
['foo', 'bar', 'baz']
|
|
, ['frobnicate', 'bar', 'quuz']
|
|
);
|
|
|
|
var expected = [
|
|
'foo bar baz '
|
|
, 'frobnicate bar quuz'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
|
|
it('test with null/undefined as values or column names', function (){
|
|
var table = new Table({
|
|
style: {
|
|
head: []
|
|
, border: []
|
|
}
|
|
});
|
|
|
|
table.push(
|
|
[null, undefined, 0]
|
|
);
|
|
|
|
// This is the expectation from the original cli-table.
|
|
// The empty columns have widths based on the strings `null` and `undefined`
|
|
// That does not make sense to me, so I am deviating from the original behavior here.
|
|
|
|
/*var expected = [
|
|
'┌──────┬───────────┬───┐'
|
|
, '│ │ │ 0 │'
|
|
, '└──────┴───────────┴───┘'
|
|
]; */
|
|
|
|
var expected = [
|
|
'┌──┬──┬───┐'
|
|
, '│ │ │ 0 │'
|
|
, '└──┴──┴───┘'
|
|
];
|
|
|
|
expect(table.toString()).to.equal(expected.join("\n"));
|
|
});
|
|
});
|