lib/suite.js
function Suite(title, parentContext, isRoot) {
  if (!utils.isString(title)) {
    throw createInvalidArgumentTypeError(
      'Suite argument "title" must be a string. Received type "' +
        typeof title +
        '"',
      'title',
      'string'
    );
  }
  this.title = title;
  function Context() {}
  Context.prototype = parentContext;
  this.ctx = new Context();
  this.suites = [];
  this.tests = [];
  this.pending = false;
  this._beforeEach = [];
  this._beforeAll = [];
  this._afterEach = [];
  this._afterAll = [];
  this.root = isRoot === true;
  this._timeout = 2000;
  this._enableTimeouts = true;
  this._slow = 75;
  this._bail = false;
  this._retries = -1;
  this._onlyTests = [];
  this._onlySuites = [];
  this.delayed = false;

  this.on('newListener', function(event) {
    if (deprecatedEvents[event]) {
      utils.deprecate(
        'Event "' +
          event +
          '" is deprecated.  Please let the Mocha team know about your use case: https://git.io/v6Lwm'
      );
    }
  });
}
function Suite(title, parentContext, isRoot) {
  if (!utils.isString(title)) {
    throw createInvalidArgumentTypeError(
      'Suite argument "title" must be a string. Received type "' +
        typeof title +
        '"',
      'title',
      'string'
    );
  }
  this.title = title;
  function Context() {}
  Context.prototype = parentContext;
  this.ctx = new Context();
  this.suites = [];
  this.tests = [];
  this.pending = false;
  this._beforeEach = [];
  this._beforeAll = [];
  this._afterEach = [];
  this._afterAll = [];
  this.root = isRoot === true;
  this._timeout = 2000;
  this._enableTimeouts = true;
  this._slow = 75;
  this._bail = false;
  this._retries = -1;
  this._onlyTests = [];
  this._onlySuites = [];
  this.delayed = false;

  this.on('newListener', function(event) {
    if (deprecatedEvents[event]) {
      utils.deprecate(
        'Event "' +
          event +
          '" is deprecated.  Please let the Mocha team know about your use case: https://git.io/v6Lwm'
      );
    }
  });
}
function Suite ( title , parentContext , isRoot ) { if ( ! utils . isString ( title ) ) { throw createInvalidArgumentTypeError ( 'Suite argument "title" must be a string. Received type "' + typeof title + '"' , 'title' , 'string' ) ; } this . title = title ; function Context ( ) { } Context . prototype = parentContext ; this . ctx = new Context ( ) ; this . suites = [ ] ; this . tests = [ ] ; this . pending = false ; this . _beforeEach = [ ] ; this . _beforeAll = [ ] ; this . _afterEach = [ ] ; this . _afterAll = [ ] ; this . root = isRoot === true ; this . _timeout = 2000 ; this . _enableTimeouts = true ; this . _slow = 75 ; this . _bail = false ; this . _retries = - 1 ; this . _onlyTests = [ ] ; this . _onlySuites = [ ] ; this . delayed = false ; this . on ( 'newListener' , function ( event ) { if ( deprecatedEvents [ event ] ) { utils . deprecate ( 'Event "' + event + '" is deprecated.  Please let the Mocha team know about your use case: https://git.io/v6Lwm' ) ; } } ) ; }
Constructs a new `Suite` instance with the given `title`, `ctx`, and `isRoot`.

@public
@class
@extends EventEmitter
@see {@link https://nodejs.org/api/events.html#events_class_eventemitter|EventEmitter}
@param {string} title - Suite title.
@param {Context} parentContext - Parent context instance.
@param {boolean} [isRoot=false] - Whether this is the root suite.
Constructs a new Suite instance with the given title ctx and isRoot .