docs: function Mocha(options) {
    options = utils.assign({}, mocharc, options || {});
    this.files = [];
    this.options = options;
    // root suite
    this.suite = new exports.Suite('', new exports.Context(), true);
  
    if ('useColors' in options) {
      utils.deprecate(
        'useColors is DEPRECATED and will be removed from a future version of Mocha. Instead, use the "color" option'
      );
      options.color = 'color' in options ? options.color : options.useColors;
    }
  
    this.grep(options.grep)
      .fgrep(options.fgrep)
      .ui(options.ui)
      .bail(options.bail)
      .reporter(options.reporter, options.reporterOptions)
      .useColors(options.color)
      .slow(options.slow)
      .useInlineDiffs(options.inlineDiffs)
      .globals(options.globals);
  
    if ('enableTimeouts' in options) {
      utils.deprecate(
        'enableTimeouts is DEPRECATED and will be removed from a future version of Mocha. Instead, use "timeout: false" to disable timeouts.'
      );
      if (options.enableTimeouts === false) {
        this.timeout(0);
      }
    }
  
    // this guard exists because Suite#timeout does not consider `undefined` to be valid input
    if (typeof options.timeout !== 'undefined') {
      this.timeout(options.timeout === false ? 0 : options.timeout);
    }
  
    if ('retries' in options) {
      this.retries(options.retries);
    }
  
    if ('diff' in options) {
      this.hideDiff(!options.diff);
    }
  
    [
      'allowUncaught',
      'asyncOnly',
      'checkLeaks',
      'delay',
      'forbidOnly',
      'forbidPending',
      'fullTrace',
      'growl',
      'invert'
    ].forEach(function(opt) {
      if (options[opt]) {
        this[opt]();
      }
    }, this);
  }