2 var test = require("tap").test
3 var ProgressBar = require("../progress-bar.js")
7 var bar = new ProgressBar({theme: ProgressBar.ascii, maxUpdateFrequency: 0}, C = {
16 up: function (lines) {
17 cursor.push(["up",lines])
20 horizontalAbsolute: function (col) {
21 cursor.push(["horizontalAbsolute", col])
24 eraseLine: function () {
25 cursor.push(["eraseLine"])
28 write: function (line) {
29 cursor.push(["write", line])
35 function isOutput(t, msg, output) {
37 for (var ii = 0; ii<output.length; ++ii) {
38 for (var jj = 0; jj<output[ii].length; ++jj) {
39 tests.push({cmd: ii, arg: jj})
42 tests.forEach(function(test) {
43 t.is(cursor[test.cmd] ? cursor[test.cmd][test.arg] : null,
44 output[test.cmd][test.arg],
45 msg + ": " + output[test.cmd] + (test.arg ? " arg #"+test.arg : ""))
49 test("hide", function (t) {
51 process.stderr.isTTY = false
53 t.is(cursor.length, 0, "We don't progress bar without a tty")
55 process.stderr.isTTY = true
57 isOutput(t, "hide while not showing",[
59 ["horizontalAbsolute",0],
64 isOutput(t, "hide while showing",[
67 ["horizontalAbsolute",0],
71 test("renderTemplate", function (t) {
73 process.stdout.columns = 11
74 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"}],{name: "NAME"})
75 t.is(result, "NAME", "name substitution")
76 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0})
77 t.is(result, "----------", "0% bar")
78 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0.5})
79 t.is(result, "#####-----", "50% bar")
80 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 1})
81 t.is(result, "##########", "100% bar")
82 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: -100})
83 t.is(result, "----------", "0% underflow bar")
84 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 100})
85 t.is(result, "##########", "100% overflow bar")
86 var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"},{type: "completionbar"}],{name: "NAME", completed: 0.5})
87 t.is(result, "NAME###---", "name + 50%")
88 var result = bar.renderTemplate(ProgressBar.ascii, ["static"], {})
89 t.is(result, "static", "static text")
90 var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name"}], {name: "NAME"})
91 t.is(result, "staticNAME", "static text + var")
92 var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name", separated: true}], {name: "NAME"})
93 t.is(result, "static NAME ", "pre-separated")
94 var result = bar.renderTemplate(ProgressBar.ascii, [{type: "name", separated: true}, "static"], {name: "NAME"})
95 t.is(result, "NAME static", "post-separated")
96 var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: ""})
97 t.is(result, "12", "separated no value")
98 var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: "NAME"})
99 t.is(result, "1 NAME 2", "separated value")
100 var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 0})
101 t.is(result, "", "No spinner")
102 var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 1})
103 t.is(result, "\\", "Spinner 1")
104 var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 10})
105 t.is(result, "|", "Spinner 10")
108 test("show & pulse", function (t) {
111 process.stdout.columns = 16
113 process.stderr.isTTY = false
114 bar.template[0].length = 6
115 bar.last = new Date(0)
117 t.is(cursor.length, 0, "no tty, no progressbar")
120 process.stderr.isTTY = true
121 bar.last = new Date(0)
122 bar.show("NAME", 0.1)
123 isOutput(t, "tty, name, completion",
125 [ 'horizontalAbsolute', 0 ],
126 [ 'write', 'NAME |#-----|\n' ],
131 bar.last = new Date(0)
133 isOutput(t, "pulsed spinner",
136 [ 'horizontalAbsolute', 0 ],
137 [ 'write', 'S \\ |----|\n' ],
140 bar.last = new Date(0)
142 isOutput(t, "pulsed spinner with subsection",
145 [ 'horizontalAbsolute', 0 ],
146 [ 'write', 'S -> P | |----|\n' ],
150 test("window resizing", function (t) {
152 process.stderr.isTTY = true
153 process.stdout.columns = 32
154 bar.show("NAME", 0.1)
156 bar.last = new Date(0)
158 isOutput(t, "32 columns",
161 [ 'horizontalAbsolute', 0 ],
162 [ 'write', 'NAME / |##------------------|\n' ],
165 process.stdout.columns = 16
166 bar.show("NAME", 0.5)
168 bar.last = new Date(0)
170 isOutput(t, "16 columns",
173 [ 'horizontalAbsolute', 0 ],
174 [ 'write', 'NAME - |##--|\n' ],