runPendingTests method

Future<TestSuiteReport> runPendingTests(
  1. List<PendingTest> tests,
  2. [Duration waitTimeout = _kSuiteStartTimeout]
)

Runs a series of tests. For full runs, this is more memory efficient as it will only load the tests as needed.

Implementation

Future<TestSuiteReport> runPendingTests(
  List<PendingTest> tests, [
  Duration waitTimeout = _kSuiteStartTimeout,
]) async {
  final startTime = DateTime.now();
  while (_testControllerState.runningSuite == true) {
    if (DateTime.now().millisecondsSinceEpoch -
            startTime.millisecondsSinceEpoch >=
        waitTimeout.inMilliseconds) {
      throw Exception(
        '[TIMEOUT]: Could not start tests, suite is still running.',
      );
    }
    await Future.delayed(const Duration(milliseconds: 100));
  }

  final testSuiteReport = TestSuiteReport();
  _testControllerState.runningSuite = true;
  if (tests.isNotEmpty == true) {
    try {
      for (var pendingTest in tests) {
        if (pendingTest.active == true) {
          try {
            final test = await pendingTest.loader.load(ignoreImages: true);
            await reset();

            await execute(
              name: test.name,
              reset: false,
              steps: test.steps,
              submitReport: true,
              suiteName: test.suiteName,
              testSuiteReport: testSuiteReport,
              version: test.version,
            );
          } catch (e, stack) {
            _logger.severe(e, stack);
          }
        }
      }
    } finally {
      _testControllerState.runningSuite = false;
    }
    await _navigatorKey?.currentState?.push(
      MaterialPageRoute(
        builder: _testSuiteReportBuilder ??
            ((BuildContext context) => TestSuiteReportPage()),
        settings: RouteSettings(
          arguments: testSuiteReport,
        ),
      ),
    );
  }
  return testSuiteReport;
}