runPlan method

Runs every test in plan and returns results keyed by test id.

Implementation

Future<Map<String, EnsembleSingleTestResult>> runPlan(
  EnsembleTestExecutionPlan plan,
  WidgetTester tester,
) async {
  final resultsById = <String, EnsembleSingleTestResult>{};
  var config = await harness.buildConfig();

  for (final def in plan.ordered) {
    final test = def.testCase;
    final prereq = test.prerequisite;
    if (prereq != null) {
      final prereqResult = resultsById[prereq];
      if (prereqResult == null) {
        throw EnsembleTestFailure(
          'Internal error: prerequisite "$prereq" for "${test.id}" was not scheduled',
        );
      }
      if (prereqResult.status == TestStatus.failed) {
        resultsById[test.id] = EnsembleSingleTestResult.failed(
          testId: test.id,
          metadata: test.metadataJson,
          error: 'Prerequisite "$prereq" failed',
          durationMs: 0,
          report: buildTestReportDetails(test),
        );
        continue;
      }
    }

    final out = await runOne(
      test,
      tester,
      existingConfig: config,
      continuation: test.hasPrerequisite,
    );
    resultsById[test.id] = out.result;
    config = out.config;
  }

  return resultsById;
}