docs: function Base(runner) {
    var self = this
      , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }
      , failures = this.failures = [];
  
    if (!runner) return;
    this.runner = runner;
  
    runner.stats = stats;
  
    runner.on('start', function(){
      stats.start = new Date;
    });
  
    runner.on('suite', function(suite){
      stats.suites = stats.suites || 0;
      suite.root || stats.suites++;
    });
  
    runner.on('test end', function(test){
      stats.tests = stats.tests || 0;
      stats.tests++;
    });
  
    runner.on('pass', function(test){
      stats.passes = stats.passes || 0;
  
      var medium = test.slow() / 2;
      test.speed = test.duration > test.slow()
        ? 'slow'
        : test.duration > medium
          ? 'medium'
          : 'fast';
  
      stats.passes++;
    });
  
    runner.on('fail', function(test, err){
      stats.failures = stats.failures || 0;
      stats.failures++;
      test.err = err;
      failures.push(test);
    });
  
    runner.on('end', function(){
      stats.end = new Date;
      stats.duration = new Date - stats.start;
    });
  
    runner.on('pending', function(){
      stats.pending++;
    });
  }