177 lines
5.4 KiB
JavaScript
177 lines
5.4 KiB
JavaScript
"use strict"
|
|
var test = require("tap").test
|
|
var ProgressBar = require("../progress-bar.js")
|
|
|
|
var cursor = []
|
|
var C
|
|
var bar = new ProgressBar({theme: ProgressBar.ascii, maxUpdateFrequency: 0}, C = {
|
|
show: function () {
|
|
cursor.push(["show"])
|
|
return C
|
|
},
|
|
hide: function () {
|
|
cursor.push(["hide"])
|
|
return C
|
|
},
|
|
up: function (lines) {
|
|
cursor.push(["up",lines])
|
|
return C
|
|
},
|
|
horizontalAbsolute: function (col) {
|
|
cursor.push(["horizontalAbsolute", col])
|
|
return C
|
|
},
|
|
eraseLine: function () {
|
|
cursor.push(["eraseLine"])
|
|
return C
|
|
},
|
|
write: function (line) {
|
|
cursor.push(["write", line])
|
|
return C
|
|
}
|
|
})
|
|
|
|
|
|
function isOutput(t, msg, output) {
|
|
var tests = []
|
|
for (var ii = 0; ii<output.length; ++ii) {
|
|
for (var jj = 0; jj<output[ii].length; ++jj) {
|
|
tests.push({cmd: ii, arg: jj})
|
|
}
|
|
}
|
|
tests.forEach(function(test) {
|
|
t.is(cursor[test.cmd] ? cursor[test.cmd][test.arg] : null,
|
|
output[test.cmd][test.arg],
|
|
msg + ": " + output[test.cmd] + (test.arg ? " arg #"+test.arg : ""))
|
|
})
|
|
}
|
|
|
|
test("hide", function (t) {
|
|
t.plan(11)
|
|
process.stderr.isTTY = false
|
|
bar.hide()
|
|
t.is(cursor.length, 0, "We don't progress bar without a tty")
|
|
cursor = []
|
|
process.stderr.isTTY = true
|
|
bar.hide()
|
|
isOutput(t, "hide while not showing",[
|
|
["show"], // cursor
|
|
["horizontalAbsolute",0],
|
|
["eraseLine"]])
|
|
cursor = []
|
|
bar.showing = true
|
|
bar.hide()
|
|
isOutput(t, "hide while showing",[
|
|
["show"], // cursor
|
|
["up", 1],
|
|
["horizontalAbsolute",0],
|
|
["eraseLine"]])
|
|
})
|
|
|
|
test("renderTemplate", function (t) {
|
|
t.plan(16)
|
|
process.stdout.columns = 11
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"}],{name: "NAME"})
|
|
t.is(result, "NAME", "name substitution")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0})
|
|
t.is(result, "----------", "0% bar")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0.5})
|
|
t.is(result, "#####-----", "50% bar")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 1})
|
|
t.is(result, "##########", "100% bar")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: -100})
|
|
t.is(result, "----------", "0% underflow bar")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 100})
|
|
t.is(result, "##########", "100% overflow bar")
|
|
var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"},{type: "completionbar"}],{name: "NAME", completed: 0.5})
|
|
t.is(result, "NAME###---", "name + 50%")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, ["static"], {})
|
|
t.is(result, "static", "static text")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name"}], {name: "NAME"})
|
|
t.is(result, "staticNAME", "static text + var")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name", separated: true}], {name: "NAME"})
|
|
t.is(result, "static NAME ", "pre-separated")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, [{type: "name", separated: true}, "static"], {name: "NAME"})
|
|
t.is(result, "NAME static", "post-separated")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: ""})
|
|
t.is(result, "12", "separated no value")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: "NAME"})
|
|
t.is(result, "1 NAME 2", "separated value")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 0})
|
|
t.is(result, "", "No spinner")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 1})
|
|
t.is(result, "\\", "Spinner 1")
|
|
var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 10})
|
|
t.is(result, "|", "Spinner 10")
|
|
})
|
|
|
|
test("show & pulse", function (t) {
|
|
t.plan(23)
|
|
|
|
process.stdout.columns = 16
|
|
cursor = []
|
|
process.stderr.isTTY = false
|
|
bar.template[0].length = 6
|
|
bar.last = new Date(0)
|
|
bar.show("NAME", 0)
|
|
t.is(cursor.length, 0, "no tty, no progressbar")
|
|
|
|
cursor = []
|
|
process.stderr.isTTY = true
|
|
bar.last = new Date(0)
|
|
bar.show("NAME", 0.1)
|
|
isOutput(t, "tty, name, completion",
|
|
[ [ 'hide' ],
|
|
[ 'horizontalAbsolute', 0 ],
|
|
[ 'write', 'NAME |#-----|\n' ],
|
|
[ 'show' ] ])
|
|
|
|
bar.show("S")
|
|
cursor = []
|
|
bar.last = new Date(0)
|
|
bar.pulse()
|
|
isOutput(t, "pulsed spinner",
|
|
[ [ 'up', 1 ],
|
|
[ 'hide' ],
|
|
[ 'horizontalAbsolute', 0 ],
|
|
[ 'write', 'S \\ |----|\n' ],
|
|
[ 'show' ] ])
|
|
cursor = []
|
|
bar.last = new Date(0)
|
|
bar.pulse("P")
|
|
isOutput(t, "pulsed spinner with subsection",
|
|
[ [ 'up', 1 ],
|
|
[ 'hide' ],
|
|
[ 'horizontalAbsolute', 0 ],
|
|
[ 'write', 'S -> P | |----|\n' ],
|
|
[ 'show' ] ])
|
|
})
|
|
|
|
test("window resizing", function (t) {
|
|
t.plan(16)
|
|
process.stderr.isTTY = true
|
|
process.stdout.columns = 32
|
|
bar.show("NAME", 0.1)
|
|
cursor = []
|
|
bar.last = new Date(0)
|
|
bar.pulse()
|
|
isOutput(t, "32 columns",
|
|
[ [ 'up', 1 ],
|
|
[ 'hide' ],
|
|
[ 'horizontalAbsolute', 0 ],
|
|
[ 'write', 'NAME / |##------------------|\n' ],
|
|
[ 'show' ] ])
|
|
|
|
process.stdout.columns = 16
|
|
bar.show("NAME", 0.5)
|
|
cursor = []
|
|
bar.last = new Date(0)
|
|
bar.pulse()
|
|
isOutput(t, "16 columns",
|
|
[ [ 'up', 1 ],
|
|
[ 'hide' ],
|
|
[ 'horizontalAbsolute', 0 ],
|
|
[ 'write', 'NAME - |##--|\n' ],
|
|
[ 'show' ] ]);
|
|
});
|