"use strict" ; module /**
 * Module dependencies.
 */ var Base = require ( "./base" ) ; var constants = require ( "../runner" ) . default . constants ; var inherits = require ( "../utils" ) . inherits ; var EVENT_RUN_BEGIN = constants . EVENT_RUN_BEGIN ; var EVENT_TEST_PENDING = constants . EVENT_TEST_PENDING ; var EVENT_TEST_PASS = constants . EVENT_TEST_PASS ; var EVENT_RUN_END = constants . EVENT_RUN_END ; var EVENT_TEST_FAIL = constants . EVENT_TEST_FAIL ; /**
 * Expose `Dot`.
 */ exports = module . exports = NyanCat ; public class memberof extends Mocha . reporters . Base param { Runner } runner param { Object } options function NyanCat ( runner , options ) { Base . call ( this , runner , options ) ; var self = this ; var width = ( Base . window . width * 0.75 ) | 0 ; var nyanCatWidth = ( this . nyanCatWidth = 11 ) ; this . colorIndex = 0 ; this . numberOfLines = 4 ; this . rainbowColors = self . generateColors ( ) ; this . scoreboardWidth = 5 ; this . tick = 0 ; this . trajectories = [ [ ] , [ ] , [ ] , [ ] ] ; this . trajectoryWidthMax = width - nyanCatWidth ; runner . on ( EVENT_RUN_BEGIN , function ( ) { Base . cursor . hide ( ) ; self . draw ( ) ; } ) ; runner . on ( EVENT_TEST_PENDING , function ( ) { self . draw ( ) ; } ) ; runner . on ( EVENT_TEST_PASS , function ( ) { self . draw ( ) ; } ) ; runner . on ( EVENT_TEST_FAIL , function ( ) { self . draw ( ) ; } ) ; runner . once ( EVENT_RUN_END , function ( ) { Base . cursor . show ( ) ; for ( var i = 0 ; i < self . numberOfLines ; i ++ ) { write ( "\n" ) ; } self . epilogue ( ) ; } ) ; } /**
 * Inherit from `Base.prototype`.
 */ inherits ( NyanCat , Base ) ; private NyanCat . prototype . draw = function ( ) { this . appendRainbow ( ) ; this . drawScoreboard ( ) ; this . drawRainbow ( ) ; this . drawNyanCat ( ) ; this . tick = ! this . tick ; } ; private NyanCat . prototype . drawScoreboard = function ( ) { var stats = this . stats ; function draw ( type , n ) { write ( " " ) ; write ( Base . color ( type , n ) ) ; write ( "\n" ) ; } draw ( "green" , stats . passes ) ; draw ( "fail" , stats . failures ) ; draw ( "pending" , stats . pending ) ; write ( "\n" ) ; this . cursorUp ( this . numberOfLines ) ; } ; private NyanCat . prototype . appendRainbow = function ( ) { var segment = this . tick ? "_" : "-" ; var rainbowified = this . rainbowify ( segment ) ; for ( var index = 0 ; index < this . numberOfLines ; index ++ ) { var trajectory = this . trajectories [ index ] ; if ( trajectory . length >= this . trajectoryWidthMax ) { trajectory . shift ( ) ; } trajectory . push ( rainbowified ) ; } } ; private NyanCat . prototype . drawRainbow = function ( ) { var self = this ; this . trajectories . forEach ( function ( line ) { write ( "\u001b[" + self . scoreboardWidth + "C" ) ; write ( line . join ( "" ) ) ; write ( "\n" ) ; } ) ; this . cursorUp ( this . numberOfLines ) ; } ; private NyanCat . prototype . drawNyanCat = function ( ) { var self = this ; var startWidth = this . scoreboardWidth + this . trajectories [ 0 ] . length ; var dist = "\u001b[" + startWidth + "C" ; var padding = "" ; write ( dist ) ; write ( "_,------," ) ; write ( "\n" ) ; write ( dist ) ; padding = self . tick ? "  " : "   " ; write ( "_|" + padding + "/\\_/\\ " ) ; write ( "\n" ) ; write ( dist ) ; padding = self . tick ? "_" : "__" ; var tail = self . tick ? "~" : "^" ; write ( tail + "|" + padding + this . face ( ) + " " ) ; write ( "\n" ) ; write ( dist ) ; padding = self . tick ? " " : "  " ; write ( padding + '""  "" ' ) ; write ( "\n" ) ; this . cursorUp ( this . numberOfLines ) ; } ; private return { string } NyanCat . prototype . face = function ( ) { var stats = this . stats ; if ( stats . failures ) { return "( x .x)" ; } else if ( stats . pending ) { return "( o .o)" ; } else if ( stats . passes ) { return "( ^ .^)" ; } return "( - .-)" ; } ; private param { number } n NyanCat . prototype . cursorUp = function ( n ) { write ( "\u001b[" + n + "A" ) ; } ; private param { number } n NyanCat . prototype . cursorDown = function ( n ) { write ( "\u001b[" + n + "B" ) ; } ; private return { Array } NyanCat . prototype . generateColors = function ( ) { var colors = [ ] ; for ( var i = 0 ; i < 6 * 7 ; i ++ ) { var pi3 = Math . floor ( Math . PI / 3 ) ; var n = i * ( 1.0 / 6 ) ; var r = Math . floor ( 3 * Math . sin ( n ) + 3 ) ; var g = Math . floor ( 3 * Math . sin ( n + 2 * pi3 ) + 3 ) ; var b = Math . floor ( 3 * Math . sin ( n + 4 * pi3 ) + 3 ) ; colors . push ( 36 * r + 6 * g + b + 16 ) ; } return colors ; } ; private param { string } str return { string } NyanCat . prototype . rainbowify = function ( str ) { if ( ! Base . useColors ) { return str ; } var color = this . rainbowColors [ this . colorIndex % this . rainbowColors . length ] ; this . colorIndex += 1 ; return "\u001b[38;5;" + color + "m" + str + "\u001b[0m" ; } ; param { string } string function write ( string ) { process . stdout . write ( string ) ; } NyanCat . description = '"nyan cat"' ;