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); } }
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; }
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)); } }