Beispiel #1
0
        private static IStep ParseStep(LineReader reader, IStep previousStep)
        {
            var stepTitle = reader.CurrentLineTrimmed;

            if (reader.IsGivenLine)
            {
                return(ParseStep(reader, (table, multiLineString) => new GivenStep(stepTitle, table, multiLineString)));
            }

            if (reader.IsWhenLine)
            {
                return(ParseStep(reader, (table, multiLineString) => new WhenStep(stepTitle, table, multiLineString)));
            }

            if (reader.IsThenLine)
            {
                return(ParseStep(reader, (table, multiLineString) => new ThenStep(stepTitle, table, multiLineString)));
            }

            if (!reader.IsAndLine && !reader.IsButLine)
            {
                throw new NotSupportedException(
                          $"Unrecognised step type in line '{reader.CurrentLineTrimmed}'.");
            }

            if (previousStep == null)
            {
                throw new InvalidGherkinSyntaxException(
                          $"The first step in a scenario cannot start with 'And'. Expected Given, When or Then", reader.CurrentLineNumber);
            }

            return(ParseStep(reader, (table, multiLineString) => previousStep.CreateAnother(stepTitle, table, multiLineString)));
        }