예제 #1
0
        public void StartNewElement(GherkinLineType newState)
        {
            var valid = false;

            switch (this._currentParsingLineType)
            {
                case GherkinLineType.None:
                    valid = newState == GherkinLineType.FeatureHeader;
                    break;
                case GherkinLineType.FeatureHeader:
                    valid = (newState == GherkinLineType.ScenarioHeader) || (newState == GherkinLineType.None);
                    break;
                case GherkinLineType.ScenarioHeader:
                    valid = (newState == GherkinLineType.Given) || (newState == GherkinLineType.When) ||
                            (newState == GherkinLineType.Then);
                    break;
                case GherkinLineType.Given:
                    valid = (newState == GherkinLineType.When) || (newState == GherkinLineType.Then) ||
                            (newState == GherkinLineType.But) || (newState == GherkinLineType.None);
                    break;
                case GherkinLineType.When:
                    valid = (newState == GherkinLineType.Then) || (newState == GherkinLineType.But) ||
                            (newState == GherkinLineType.None);
                    break;
                case GherkinLineType.Then:
                    valid = (newState == GherkinLineType.But) || (newState == GherkinLineType.None) ||
                            (newState == GherkinLineType.ScenarioHeader);
                    break;
                default:
                    throw new Exception("Current state of Gherkin object unexpected.");
            }

            if (!valid) {throw new InvalidOperationException
                (String.Format("Cannot create {0} element after {1} element.", newState, _currentParsingLineType));}

            if (!(GherkinLineType.None | GherkinLineType.But).HasFlag(newState)) { this._currentParsingLineType = newState; }
        }
        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));
            }
        }
예제 #3
0
 public Gherkin()
 {
     _scenarios = new List<GherkinScenario>();
     _currentParsingLineType = GherkinLineType.None;
 }