code: function XUnit(runner, options) {
    Base.call(this, runner, options);
  
    var stats = this.stats;
    var tests = [];
    var self = this;
  
    // the name of the test suite, as it will appear in the resulting XML file
    var suiteName;
  
    // the default name of the test suite if none is provided
    var DEFAULT_SUITE_NAME = 'Mocha Tests';
  
    if (options && options.reporterOptions) {
      if (options.reporterOptions.output) {
        if (!fs.createWriteStream) {
          throw createUnsupportedError('file output not supported in browser');
        }
  
        mkdirp.sync(path.dirname(options.reporterOptions.output));
        self.fileStream = fs.createWriteStream(options.reporterOptions.output);
      }
  
      // get the suite name from the reporter options (if provided)
      suiteName = options.reporterOptions.suiteName;
    }
  
    // fall back to the default suite name
    suiteName = suiteName || DEFAULT_SUITE_NAME;
  
    runner.on(EVENT_TEST_PENDING, function(test) {
      tests.push(test);
    });
  
    runner.on(EVENT_TEST_PASS, function(test) {
      tests.push(test);
    });
  
    runner.on(EVENT_TEST_FAIL, function(test) {
      tests.push(test);
    });
  
    runner.once(EVENT_RUN_END, function() {
      self.write(
        tag(
          'testsuite',
          {
            name: suiteName,
            tests: stats.tests,
            failures: 0,
            errors: stats.failures,
            skipped: stats.tests - stats.failures - stats.passes,
            timestamp: new Date().toUTCString(),
            time: stats.duration / 1000 || 0
          },
          false
        )
      );
  
      tests.forEach(function(t) {
        self.test(t);
      });
  
      self.write('</testsuite>');
    });
  }
docs: Constructs a new `XUnit` reporter instance.
  
  @public
  @class
  @memberof Mocha.reporters
  @extends Mocha.reporters.Base
  @param {Runner} runner - Instance triggers reporter actions.
  @param {Object} [options] - runner options