aboutsummaryrefslogtreecommitdiff
path: root/node_modules/cliui/test/cliui.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/cliui/test/cliui.js')
-rw-r--r--node_modules/cliui/test/cliui.js349
1 files changed, 349 insertions, 0 deletions
diff --git a/node_modules/cliui/test/cliui.js b/node_modules/cliui/test/cliui.js
new file mode 100644
index 000000000..1cc6127cb
--- /dev/null
+++ b/node_modules/cliui/test/cliui.js
@@ -0,0 +1,349 @@
+/* global describe, it */
+
+require('chai').should()
+
+var cliui = require('../')
+
+describe('cliui', function () {
+ describe('div', function () {
+ it("wraps text at 'width' if a single column is given", function () {
+ var ui = cliui({
+ width: 10
+ })
+
+ ui.div('i am a string that should be wrapped')
+
+ ui.toString().split('\n').forEach(function (row) {
+ row.length.should.be.lte(10)
+ })
+ })
+
+ it('evenly divides text across columns if multiple columns are given', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div(
+ {text: 'i am a string that should be wrapped', width: 15},
+ 'i am a second string that should be wrapped',
+ 'i am a third string that should be wrapped'
+ )
+
+ // total width of all columns is <=
+ // the width cliui is initialized with.
+ ui.toString().split('\n').forEach(function (row) {
+ row.length.should.be.lte(40)
+ })
+
+ // it should wrap each column appropriately.
+ var expected = [
+ 'i am a string i am a i am a third',
+ 'that should be second string that',
+ 'wrapped string that should be',
+ ' should be wrapped',
+ ' wrapped'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('allows for a blank row to be appended', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div()
+
+ // it should wrap each column appropriately.
+ var expected = ['']
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+ })
+
+ describe('_columnWidths', function () {
+ it('uses same width for each column by default', function () {
+ var ui = cliui({
+ width: 40
+ }),
+ widths = ui._columnWidths([{}, {}, {}])
+
+ widths[0].should.equal(13)
+ widths[1].should.equal(13)
+ widths[2].should.equal(13)
+ })
+
+ it('divides width over remaining columns if first column has width specified', function () {
+ var ui = cliui({
+ width: 40
+ }),
+ widths = ui._columnWidths([{width: 20}, {}, {}])
+
+ widths[0].should.equal(20)
+ widths[1].should.equal(10)
+ widths[2].should.equal(10)
+ })
+
+ it('divides width over remaining columns if middle column has width specified', function () {
+ var ui = cliui({
+ width: 40
+ }),
+ widths = ui._columnWidths([{}, {width: 10}, {}])
+
+ widths[0].should.equal(15)
+ widths[1].should.equal(10)
+ widths[2].should.equal(15)
+ })
+
+ it('keeps track of remaining width if multiple columns have width specified', function () {
+ var ui = cliui({
+ width: 40
+ }),
+ widths = ui._columnWidths([{width: 20}, {width: 12}, {}])
+
+ widths[0].should.equal(20)
+ widths[1].should.equal(12)
+ widths[2].should.equal(8)
+ })
+
+ it('uses a sane default if impossible widths are specified', function () {
+ var ui = cliui({
+ width: 40
+ }),
+ widths = ui._columnWidths([{width: 30}, {width: 30}, {padding: [0, 2, 0, 1]}])
+
+ widths[0].should.equal(30)
+ widths[1].should.equal(30)
+ widths[2].should.equal(4)
+ })
+ })
+
+ describe('alignment', function () {
+ it('allows a column to be right aligned', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div(
+ 'i am a string',
+ {text: 'i am a second string', align: 'right'},
+ 'i am a third string that should be wrapped'
+ )
+
+ // it should right-align the second column.
+ var expected = [
+ 'i am a stringi am a secondi am a third',
+ ' stringstring that',
+ ' should be',
+ ' wrapped'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('allows a column to be center aligned', function () {
+ var ui = cliui({
+ width: 60
+ })
+
+ ui.div(
+ 'i am a string',
+ {text: 'i am a second string', align: 'center', padding: [0, 2, 0, 2]},
+ 'i am a third string that should be wrapped'
+ )
+
+ // it should right-align the second column.
+ var expected = [
+ 'i am a string i am a second i am a third string',
+ ' string that should be',
+ ' wrapped'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+ })
+
+ describe('padding', function () {
+ it('handles left/right padding', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div(
+ {text: 'i have padding on my left', padding: [0, 0, 0, 4]},
+ {text: 'i have padding on my right', padding: [0, 2, 0, 0], align: 'center'},
+ {text: 'i have no padding', padding: [0, 0, 0, 0]}
+ )
+
+ // it should add left/right padding to columns.
+ var expected = [
+ ' i have i have i have no',
+ ' padding padding on padding',
+ ' on my my right',
+ ' left'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('handles top/bottom padding', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div(
+ 'i am a string',
+ {text: 'i am a second string', padding: [2, 0, 0, 0]},
+ {text: 'i am a third string that should be wrapped', padding: [0, 0, 1, 0]}
+ )
+
+ // it should add top/bottom padding to second
+ // and third columns.
+ var expected = [
+ 'i am a string i am a third',
+ ' string that',
+ ' i am a secondshould be',
+ ' string wrapped',
+ ''
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+ })
+
+ describe('wrap', function () {
+ it('allows wordwrap to be disabled', function () {
+ var ui = cliui({
+ wrap: false
+ })
+
+ ui.div(
+ {text: 'i am a string', padding: [0, 1, 0, 0]},
+ {text: 'i am a second string', padding: [0, 2, 0, 0]},
+ {text: 'i am a third string that should not be wrapped', padding: [0, 0, 0, 2]}
+ )
+
+ ui.toString().should.equal('i am a string i am a second string i am a third string that should not be wrapped')
+ })
+ })
+
+ describe('span', function () {
+ it('appends the next row to the end of the prior row if it fits', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.span(
+ {text: 'i am a string that will be wrapped', width: 30}
+ )
+
+ ui.div(
+ {text: ' [required] [default: 99]', align: 'right'}
+ )
+
+ var expected = [
+ 'i am a string that will be',
+ 'wrapped [required] [default: 99]'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('does not append the string if it does not fit on the prior row', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.span(
+ {text: 'i am a string that will be wrapped', width: 30}
+ )
+
+ ui.div(
+ {text: 'i am a second row', align: 'left'}
+ )
+
+ var expected = [
+ 'i am a string that will be',
+ 'wrapped',
+ 'i am a second row'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('always appends text to prior span if wrap is disabled', function () {
+ var ui = cliui({
+ wrap: false,
+ width: 40
+ })
+
+ ui.span(
+ {text: 'i am a string that will be wrapped', width: 30}
+ )
+
+ ui.div(
+ {text: 'i am a second row', align: 'left', padding: [0, 0, 0, 3]}
+ )
+
+ ui.div('a third line')
+
+ var expected = [
+ 'i am a string that will be wrapped i am a second row',
+ 'a third line'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+ })
+
+ describe('layoutDSL', function () {
+ it('turns tab into multiple columns', function () {
+ var ui = cliui({
+ width: 60
+ })
+
+ ui.div(
+ ' <regex> \tmy awesome regex\n <my second thing> \tanother row\t a third column'
+ )
+
+ var expected = [
+ ' <regex> my awesome regex',
+ ' <my second thing> another row a third column'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('turns newline into multiple rows', function () {
+ var ui = cliui({
+ width: 40
+ })
+
+ ui.div(
+ 'Usage: $0\n <regex>\t my awesome regex\n <glob>\t my awesome glob\t [required]'
+ )
+ var expected = [
+ 'Usage: $0',
+ ' <regex> my awesome regex',
+ ' <glob> my awesome [required]',
+ ' glob'
+ ]
+
+ ui.toString().split('\n').should.eql(expected)
+ })
+
+ it('does not apply DSL if wrap is false', function () {
+ var ui = cliui({
+ width: 40,
+ wrap: false
+ })
+
+ ui.div(
+ 'Usage: $0\ttwo\tthree'
+ )
+
+ ui.toString().should.eql('Usage: $0\ttwo\tthree')
+ })
+
+ })
+})