visit method

Future<void> visit(
  1. String featureFileContents,
  2. String path,
  3. LanguageService languageService,
  4. Reporter reporter,
)

Implementation

Future<void> visit(
  String featureFileContents,
  String path,
  LanguageService languageService,
  Reporter reporter,
) async {
  final featureFile = await GherkinParser().parseFeatureFile(
    featureFileContents,
    path,
    reporter,
    languageService,
  );

  for (final feature in featureFile.features) {
    await visitFeature(
      feature.name,
      feature.description,
      _tagsToList(feature.tags),
      feature.scenarios.length,
    );

    for (var i = 0; i < feature.scenarios.length; i += 1) {
      final scenario = feature.scenarios.elementAt(i);
      final isFirst = i == 0;
      final isLast = i == (feature.scenarios.length - 1);
      final allScenarios = scenario is ScenarioOutlineRunnable
          ? scenario.expandOutlinesIntoScenarios()
          : [scenario];
      var acknowledgedScenarioPosition = false;

      for (var childScenario in allScenarios) {
        await visitScenario(
          feature.name,
          _tagsToList(feature.tags),
          childScenario.name,
          _tagsToList(childScenario.tags),
          acknowledgedScenarioPosition ? false : isFirst,
          acknowledgedScenarioPosition ? false : isLast,
        );

        acknowledgedScenarioPosition = true;

        if (feature.background != null) {
          final bg = feature.background;

          for (final step in bg!.steps) {
            await visitScenarioStep(
              step.name,
              step.multilineStrings,
              step.table,
            );
          }
        }

        for (final step in childScenario.steps) {
          await visitScenarioStep(
            step.name,
            step.multilineStrings,
            step.table,
          );
        }
      }
    }
  }

  return Future.value(null);
}