1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | var Base = require('./base');
|
8 | var inherits = require('../utils').inherits;
|
9 | var color = Base.color;
|
10 | var cursor = Base.cursor;
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | exports = module.exports = Progress;
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | Base.colors.progress = 90;
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | function 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 |
|
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 |
|
49 | runner.on('start', function () {
|
50 | console.log();
|
51 | cursor.hide();
|
52 | });
|
53 |
|
54 |
|
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 |
|
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 |
|
80 |
|
81 | runner.on('end', function () {
|
82 | cursor.show();
|
83 | console.log();
|
84 | self.epilogue();
|
85 | });
|
86 | }
|
87 |
|
88 |
|
89 |
|
90 |
|
91 | inherits(Progress, Base);
|