public void After_a_Given_element_When_or_Then_or_But_or_a_typeless_line_are_valid()
        {
            var typeBitmask = GherkinLineType.When | GherkinLineType.Then | GherkinLineType.But | GherkinLineType.None;
            var typesToTest = _allLineTypes.Where(type => typeBitmask.HasFlag(type));

            foreach (var type in typesToTest)
            {
                var gherkin = new Gherkin();
                gherkin.StartNewElement(GherkinLineType.FeatureHeader);
                gherkin.StartNewElement(GherkinLineType.ScenarioHeader);
                gherkin.StartNewElement(GherkinLineType.Given);

                TestStartingNewElement(gherkin, type, expectedValid: true);
            }
        }
示例#2
0
        public Gherkin Parse(string input)
        {
            input = input.Replace("\t", string.Empty);
            var lines = input.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Select(ca => ca.ToString()).ToList();

            var linesAndTypes = new Dictionary<string, GherkinLineType>();

            foreach (var line in lines)
            {
                var lineType = Gherkin.GetLineType(line);
                linesAndTypes.Add(line, lineType);
            }

            var gherkin = new Gherkin();
            var previousType = GherkinLineType.None;

            foreach (var lineAndType in linesAndTypes)
            {
                var currentLine = lineAndType.Key;
                var currentType = lineAndType.Value;

                if (!(currentType == previousType || currentType == GherkinLineType.None))
                {
                    gherkin.StartNewElement(currentType);
                }

                gherkin.WriteToCurrentElement(currentLine);

                previousType = lineAndType.Value;
            }

            return gherkin;
        }
示例#3
0
 public void Passing_through_states_of_a_basic_feature_file_throws_no_exception()
 {
     var gherkin = new Gherkin();
     gherkin.StartNewElement(GherkinLineType.FeatureHeader);     // Feature: Example feature
     gherkin.StartNewElement(GherkinLineType.None);              // As a role
     gherkin.StartNewElement(GherkinLineType.None);              // I want to do something
     gherkin.StartNewElement(GherkinLineType.None);              // So that I get some benefit
     gherkin.StartNewElement(GherkinLineType.ScenarioHeader);    // Scenario: Example 1
     gherkin.StartNewElement(GherkinLineType.Given);             // Given some precondition
     gherkin.StartNewElement(GherkinLineType.When);              // When I perform some action
     gherkin.StartNewElement(GherkinLineType.Then);              // Then I expect some result
 }
        public void After_a_feature_header_everything_except_a_scenario_header_or_typeless_line_is_not_valid()
        {
            var typeBitmask = GherkinLineType.ScenarioHeader | GherkinLineType.None;
            var typesToTest = _allLineTypes.Where(type => !typeBitmask.HasFlag(type));

            foreach (var type in typesToTest)
            {
                var gherkin = new Gherkin();
                gherkin.StartNewElement(GherkinLineType.FeatureHeader);

                TestStartingNewElement(gherkin, type, expectedValid: false);
            }
        }
        public void After_a_scenario_header_everything_except_Given_When_and_Then_are_not_valid()
        {
            var typeBitmask = GherkinLineType.Given | GherkinLineType.When | GherkinLineType.Then;
            var typesToTest = _allLineTypes.Where(type => !typeBitmask.HasFlag(type));

            foreach (var type in typesToTest)
            {
                var gherkin = new Gherkin();
                gherkin.StartNewElement(GherkinLineType.FeatureHeader);
                gherkin.StartNewElement(GherkinLineType.ScenarioHeader);

                TestStartingNewElement(gherkin, type, expectedValid: false);
            }
        }
        private void TestStartingNewElement(Gherkin gherkin, GherkinLineType type, bool expectedValid)
        {
            try
            {
                gherkin.StartNewElement(type);

                Assert.That(expectedValid, Is.EqualTo(true),
                    String.Format("No exceptions thrown for state transition to {0} - expected the state transition to be not valid.", type));
            }
            catch (Exception ex)
            {
                Assert.That(expectedValid, Is.EqualTo(false),
                    string.Format("Exception thrown on state transition to {0} - {1}", type, ex.StackTrace));
            }
        }