public void ParseFeatureContent()
        {
            do
            {
                var tags = TagParser.ParseTagsIfPresent(reader);

                if (reader.IsScenarioStartLine)
                {
                    Add(ScenarioParser.ParseScenario(reader, tags));
                    continue;
                }

                if (reader.IsScenarioOutlineStartLine)
                {
                    Add(ScenarioParser.ParseScenarioOutline(reader, tags));
                    continue;
                }

                if (reader.IsRuleStartLine)
                {
                    ParseNewRule(tags);
                    continue;
                }

                throw new InvalidGherkinSyntaxException(
                          $"Expected a Scenario, a Scenario Outline or a Rule, found \"{reader.CurrentLineTrimmed}\"",
                          reader.CurrentLineNumber);
            } while (!reader.IsEndOfFile);

            AddRuleIfNeeded();
        }
Beispiel #2
0
        private Feature Parse(LineReader reader)
        {
            reader.ReadNextLine();

            var featureTags = TagParser.ParseTagsIfPresent(reader);

            if (!reader.IsFeatureStartLine)
            {
                throw new InvalidGherkinSyntaxException(
                          $"Expected the first line of a feature file to start with 'Feature:' or a tag.", reader.CurrentLineNumber);
            }

            var featureTitle     = reader.CurrentLineFeatureTitle;
            var featureNarrative = new StringBuilder();

            reader.ReadNextLine();
            while (
                !reader.IsEndOfFile &&
                !reader.IsRuleStartLine &&
                !reader.IsScenarioStartLine &&
                !reader.IsScenarioOutlineStartLine &&
                !reader.IsBackgroundStartLine &&
                !reader.IsTagLine)
            {
                featureNarrative.AppendLine(reader.CurrentLineTrimmed);
                reader.ReadNextLine();
            }

            if (reader.IsEndOfFile)
            {
                return(new Feature(
                           featureTitle,
                           featureNarrative.ToString()?.Trim(),
                           Background.Empty,
                           Enumerable.Empty <Scenario>(),
                           Enumerable.Empty <ScenarioOutline>(),
                           Enumerable.Empty <Rule>(),
                           featureTags));
            }

            var featureBackground = BackgroundParser.ParseBackgroundIfPresent(reader);

            var featureScenarios        = new List <Scenario>();
            var featureScenarioOutlines = new List <ScenarioOutline>();
            var featureRules            = new List <Rule>();

            var featureContentParser = new FeatureContentParser(featureScenarios, featureScenarioOutlines, featureRules, reader);

            featureContentParser.ParseFeatureContent();

            return(new Feature(
                       featureTitle,
                       featureNarrative.ToString()?.Trim(),
                       featureBackground,
                       featureScenarios,
                       featureScenarioOutlines,
                       featureRules,
                       featureTags));
        }