123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 'use strict';
- /**
- * @module Landing
- */
- /**
- * Module dependencies.
- */
- var Base = require('./base');
- var inherits = require('../utils').inherits;
- var constants = require('../runner').constants;
- var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;
- var EVENT_RUN_END = constants.EVENT_RUN_END;
- var EVENT_TEST_END = constants.EVENT_TEST_END;
- var STATE_FAILED = require('../runnable').constants.STATE_FAILED;
- var cursor = Base.cursor;
- var 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.
- *
- * @public
- * @class
- * @memberof Mocha.reporters
- * @extends Mocha.reporters.Base
- * @param {Runner} runner
- */
- function Landing(runner) {
- Base.call(this, runner);
- var self = this;
- var width = (Base.window.width * 0.75) | 0;
- var total = runner.total;
- var stream = process.stdout;
- var plane = color('plane', '✈');
- var crashed = -1;
- var n = 0;
- function runway() {
- var buf = Array(width).join('-');
- return ' ' + color('runway', buf);
- }
- runner.on(EVENT_RUN_BEGIN, function() {
- stream.write('\n\n\n ');
- cursor.hide();
- });
- runner.on(EVENT_TEST_END, function(test) {
- // check if the plane crashed
- var col = crashed === -1 ? ((width * ++n) / total) | 0 : crashed;
- // show the crash
- if (test.state === STATE_FAILED) {
- 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.once(EVENT_RUN_END, function() {
- cursor.show();
- console.log();
- self.epilogue();
- });
- }
- /**
- * Inherit from `Base.prototype`.
- */
- inherits(Landing, Base);
- Landing.description = 'Unicode landing strip';
|