text: /*
  *
  *
  *
  *
  *
  *
  *
  *
  *
  *
  *
  *       DO NOT EDIT THIS FILE
  *       For FCC testing purposes!
  *
  *
  *
  *
  *
  *
  *
  *
  *
  *
  *
  */
  
  
  const analyser = require('./assertion-analyser');
  const EventEmitter = require('events').EventEmitter;
  
  const Mocha = require('mocha'),
      fs = require('fs'),
      path = require('path');
  
  let mocha = new Mocha();
  let testDir = './tests'
  
  
  // Add each .js file to the mocha instance
  fs.readdirSync(testDir).filter(function(file){
      // Only keep the .js files
      return file.substr(-3) === '.js';
  
  }).forEach(function(file){
      mocha.addFile(
          path.join(testDir, file)
      );
  });
  
  let emitter = new EventEmitter();
  emitter.run = function() {
  
    let tests = [];
    let context = "";
    let separator = ' -> ';
    // Run the tests.
    try {
    let runner = mocha.ui('tdd').run()
      .on('test end', function(test) {
          // remove comments
          let body = test.body.replace(/\/\/.*\n|\/\*.*\*\//g, '');
          // collapse spaces
          body = body.replace(/\s+/g,' ');
          let obj = {
            title: test.title,
            context: context.slice(0, -separator.length),
            state: test.state,
            // body: body,
            assertions: analyser(body)
          };
          tests.push(obj);
      })
      .on('end', function() {
          emitter.report = tests;
          emitter.emit('done', tests)
      })
      .on('suite', function(s) {
        context += (s.title + separator);
  
      })
      .on('suite end', function(s) {
        context = context.slice(0, -(s.title.length + separator.length))
      })
    } catch(e) {
      throw(e);
    }
  };
  
  module.exports = emitter;
  
  
  /*
   * Mocha.runner Events:
   * can be used to build a better custom report
   *
   *   - `start`  execution started
   *   - `end`  execution complete
   *   - `suite`  (suite) test suite execution started
   *   - `suite end`  (suite) all tests (and sub-suites) have finished
   *   - `test`  (test) test execution started
   *   - `test end`  (test) test completed
   *   - `hook`  (hook) hook execution started
   *   - `hook end`  (hook) hook complete
   *   - `pass`  (test) test passed
   *   - `fail`  (test, err) test failed
   *   - `pending`  (test) test pending
   */