function runAll(done) {
        /**
         * Information passed to the {@link Reporter#jasmineStarted} event.
         * @typedef JasmineStartedInfo
         * @property {Int} totalSpecsDefined - The total number of specs defined in this suite.
         * @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
         */
        reporter.jasmineStarted(
          {
            totalSpecsDefined: totalSpecsDefined,
            order: order
          },
          function() {
            currentlyExecutingSuites.push(topSuite);

            processor.execute(function() {
              clearResourcesForRunnable(topSuite.id);
              currentlyExecutingSuites.pop();
              var overallStatus, incompleteReason;

              if (
                hasFailures ||
                topSuite.result.failedExpectations.length > 0
              ) {
                overallStatus = 'failed';
              } else if (focusedRunnables.length > 0) {
                overallStatus = 'incomplete';
                incompleteReason = 'fit() or fdescribe() was found';
              } else if (totalSpecsDefined === 0) {
                overallStatus = 'incomplete';
                incompleteReason = 'No specs found';
              } else {
                overallStatus = 'passed';
              }

              /**
               * Information passed to the {@link Reporter#jasmineDone} event.
               * @typedef JasmineDoneInfo
               * @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.
               * @property {Int} totalTime - The total time (in ms) that it took to execute the suite
               * @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.
               * @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
               * @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.
               * @property {Expectation[]} deprecationWarnings - List of deprecation warnings that occurred at the global level.
               */
              reporter.jasmineDone(
                {
                  overallStatus: overallStatus,
                  totalTime: jasmineTimer.elapsed(),
                  incompleteReason: incompleteReason,
                  order: order,
                  failedExpectations: topSuite.result.failedExpectations,
                  deprecationWarnings: topSuite.result.deprecationWarnings
                },
                done
              );
            });
          }
        );
      }
Executes the specs.

If called with no parameters or with a falsy value as the first parameter,
all specs will be executed except those that are excluded by a
[spec filter]{@link Configuration#specFilter} or other mechanism. If the
first parameter is a list of spec/suite IDs, only those specs/suites will
be run.

Both parameters are optional, but a completion callback is only valid as
the second parameter. To specify a completion callback but not a list of
specs/suites to run, pass null or undefined as the first parameter.

execute should not be called more than once.

If the environment supports promises, execute will return a promise that
is resolved after the suite finishes executing. The promise will be
resolved (not rejected) as long as the suite runs to completion. Use a
{@link Reporter} to determine whether or not the suite passed.

@name Env#execute
@since 2.0.0
@function
@param {(string[])=} runnablesToRun IDs of suites and/or specs to run
@param {Function=} onComplete Function that will be called after all specs have run
@return {Promise<undefined>}