| /** |
| * 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\n\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 ('failed' == test.state) { |
| plane = color('plane crash', '✈'); |
| crashed = col; |
| } |
| |
| // render landing strip |
| stream.write('\u001b['+(width+1)+'D\u001b[2A'); |
| 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('\u001b[0m'); |
| }); |
| |
| runner.on('end', function(){ |
| cursor.show(); |
| console.log(); |
| self.epilogue(); |
| }); |
| } |
| |
| /** |
| * Inherit from `Base.prototype`. |
| */ |
| |
| Landing.prototype.__proto__ = Base.prototype; |