UNPKG

1.96 kBJavaScriptView Raw
1'use strict';
2
3/**
4 * Module dependencies.
5 */
6
7var Base = require('./base');
8var inherits = require('../utils').inherits;
9var color = Base.color;
10var cursor = Base.cursor;
11
12/**
13 * Expose `Progress`.
14 */
15
16exports = module.exports = Progress;
17
18/**
19 * General progress bar color.
20 */
21
22Base.colors.progress = 90;
23
24/**
25 * Initialize a new `Progress` bar test reporter.
26 *
27 * @api public
28 * @param {Runner} runner
29 * @param {Object} options
30 */
31function Progress (runner, options) {
32 Base.call(this, runner);
33
34 var self = this;
35 var width = Base.window.width * 0.50 | 0;
36 var total = runner.total;
37 var complete = 0;
38 var lastN = -1;
39
40 // default chars
41 options = options || {};
42 options.open = options.open || '[';
43 options.complete = options.complete || '▬';
44 options.incomplete = options.incomplete || Base.symbols.dot;
45 options.close = options.close || ']';
46 options.verbose = false;
47
48 // tests started
49 runner.on('start', function () {
50 console.log();
51 cursor.hide();
52 });
53
54 // tests complete
55 runner.on('test end', function () {
56 complete++;
57
58 var percent = complete / total;
59 var n = width * percent | 0;
60 var i = width - n;
61
62 if (n === lastN && !options.verbose) {
63 // Don't re-render the line if it hasn't changed
64 return;
65 }
66 lastN = n;
67
68 cursor.CR();
69 process.stdout.write('\u001b[J');
70 process.stdout.write(color('progress', ' ' + options.open));
71 process.stdout.write(Array(n).join(options.complete));
72 process.stdout.write(Array(i).join(options.incomplete));
73 process.stdout.write(color('progress', options.close));
74 if (options.verbose) {
75 process.stdout.write(color('progress', ' ' + complete + ' of ' + total));
76 }
77 });
78
79 // tests are complete, output some stats
80 // and the failures if any
81 runner.on('end', function () {
82 cursor.show();
83 console.log();
84 self.epilogue();
85 });
86}
87
88/**
89 * Inherit from `Base.prototype`.
90 */
91inherits(Progress, Base);