You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
1.7 KiB
97 lines
1.7 KiB
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var Base = require('./base') |
|
, cursor = Base.cursor |
|
, color = Base.color; |
|
|
|
/** |
|
* Expose `Landing`. |
|
*/ |
|
|
|
exports = module.exports = Landing; |
|
|
|
/** |
|
* Airplane color. |
|
*/ |
|
|
|
Base.colors.plane = 0; |
|
|
|
/** |
|
* Airplane crash color. |
|
*/ |
|
|
|
Base.colors['plane crash'] = 31; |
|
|
|
/** |
|
* Runway color. |
|
*/ |
|
|
|
Base.colors.runway = 90; |
|
|
|
/** |
|
* Initialize a new `Landing` reporter. |
|
* |
|
* @param {Runner} runner |
|
* @api public |
|
*/ |
|
|
|
function Landing(runner) { |
|
Base.call(this, runner); |
|
|
|
var self = this |
|
, stats = this.stats |
|
, width = Base.window.width * .75 | 0 |
|
, total = runner.total |
|
, stream = process.stdout |
|
, plane = color('plane', '✈') |
|
, crashed = -1 |
|
, n = 0; |
|
|
|
function runway() { |
|
var buf = Array(width).join('-'); |
|
return ' ' + color('runway', buf); |
|
} |
|
|
|
runner.on('start', function(){ |
|
stream.write('\n '); |
|
cursor.hide(); |
|
}); |
|
|
|
runner.on('test end', function(test){ |
|
// check if the plane crashed |
|
var col = -1 == crashed |
|
? width * ++n / total | 0 |
|
: crashed; |
|
|
|
// show the crash |
|
if (test.failed) { |
|
plane = color('plane crash', '✈'); |
|
crashed = col; |
|
} |
|
|
|
// render landing strip |
|
stream.write('\033[4F\n\n'); |
|
stream.write(runway()); |
|
stream.write('\n '); |
|
stream.write(color('runway', Array(col).join('⋅'))); |
|
stream.write(plane) |
|
stream.write(color('runway', Array(width - col).join('⋅') + '\n')); |
|
stream.write(runway()); |
|
stream.write('\033[0m'); |
|
}); |
|
|
|
runner.on('end', function(){ |
|
cursor.show(); |
|
console.log(); |
|
self.epilogue(); |
|
}); |
|
} |
|
|
|
/** |
|
* Inherit from `Base.prototype`. |
|
*/ |
|
|
|
Landing.prototype.__proto__ = Base.prototype; |