상속: IScanner
예제 #1
0
        public void Should_parse_an_empty_line_correctly_after_parsing_a_feature_line()
        {
            // Given
            var scanner = new LineScanner(new GherkinGrammar());
            ReadTokens(scanner, "Feature: bla");

            // When
            var tokens = ReadTokens(scanner, "");

            // Then
            Assert.That(tokens, Has.Length(0), "No tokens expected");
        }
예제 #2
0
        public void Should_return_scenario_and_identifier_tokens_for_scenario_line()
        {
            // Given
            var scanner = new LineScanner(new GherkinGrammar());

            // When
            var tokens = ReadTokens(scanner, "  Scenario: bla");

            // Then
            Assert.That(tokens, Has.Length(2), "Scenario and Identifier expected");
            Assert.That(tokens[0].Type, Is.EqualTo(TokenType.Keyword), "Scenario");
            Assert.That(tokens[1].Type, Is.EqualTo(TokenType.Identifier), "Identifier");
        }
예제 #3
0
        public void Should_return_feature_and_identifier_tokens_for_feature_line()
        {
            // Given
            var scanner = new LineScanner(new GherkinGrammar());
            scanner.SetSource("Feature: bla", 0);

            // When
            var tokens = ReadTokens(scanner);

            // Then
            Assert.That(tokens, Has.Length(2), "Feature and Identifier expected");
            Assert.That(tokens[0].Type, Is.EqualTo(TokenType.Keyword), "Feature");
            Assert.That(tokens[1].Type, Is.EqualTo(TokenType.Identifier), "Identifier");
            Assert.That(tokens[0].StartIndex, Is.EqualTo(0), "Feature");
            Assert.That(tokens[1].StartIndex, Is.EqualTo(9), "Identifier");
        }
예제 #4
0
        public void Should_return_scenario_and_identifier_tokens_for_scenario_line_after_other_lines()
        {
            // Given
            var scanner = new LineScanner(new GherkinGrammar());
            ReadTokens(scanner, "Feature: Addition");
            ReadTokens(scanner, "Feature: Addition"); // Simulate Visual Studio processing:
            ReadTokens(scanner, "Feature: Addition"); //     first line 3 times...
            ReadTokens(scanner, "  In order to avoid silly mistakes");
            ReadTokens(scanner, "  As a math idiot");
            ReadTokens(scanner, "  I want to be told the sum of two numbers");
            ReadTokens(scanner, "");

            // When
            var tokens = ReadTokens(scanner, "  Scenario: Add two numbers");

            // Then
            Assert.That(tokens, Has.Length(2), "Scenario and Identifier expected");
            Assert.That(tokens[0].Type, Is.EqualTo(TokenType.Keyword), "Scenario");
            Assert.That(tokens[1].Type, Is.EqualTo(TokenType.Identifier), "Identifier");
        }
예제 #5
0
 private TokenInfo GetTokenInfoOfFirstTokenOnLine(IVsTextView view, int line, int col)
 {
     string source;
     view.GetTextStream(line, 0, line, col, out source);
     var scanner = new LineScanner(Grammar);
     scanner.SetSource(source, 0);
     var tokenInfo = new TokenInfo(0,0,Microsoft.VisualStudio.Package.TokenType.Unknown);
     int state = 0;
     scanner.ScanTokenAndProvideInfoAboutIt(tokenInfo, ref state);
     return tokenInfo;
 }
예제 #6
0
 private void InitParser(string sourceText)
 {
     if (GherkinGrammar != null && Equals(GherkinGrammar.GetLanguageFor(sourceText).Code, GherkinGrammar.Language.Code))
         return;
     GherkinGrammar = GherkinGrammar.CreateFor(sourceText);
     parser = new Parser(GherkinGrammar);
     if (scanner != null)
     {
         scanner.SetParser(GherkinGrammar);
         scanner.StepProvider = _stepProvider;
     }
     else
         scanner = new LineScanner(GherkinGrammar) { StepProvider = _stepProvider};
 }
예제 #7
0
        public override IScanner GetScanner(IVsTextLines buffer)
        {
            if (scanner == null)
                scanner = new LineScanner(GherkinGrammar);

            return scanner;
        }
예제 #8
0
        public void Should_split_stepIdentifier_when_step_has_arguments()
        {
            // Given
            var stepProvider = new StepProviderToTest(new StepDefinition("My phone number is (\\d+) and my name is '(.*)'"));
            var scanner = new LineScanner(new GherkinGrammar()) { StepProvider = stepProvider};

            // When
            var tokens = ReadTokens(scanner, "Given My phone number is 555 and my name is 'Henri'");

            // Then
            Assert.That(tokens, Has.Length(6));
            Assert.That(tokens[0].Type, Is.EqualTo(TokenType.Keyword), "Given");
            Assert.That(tokens[1].Type, Is.EqualTo(TokenType.Identifier), tokens[1].Token.ToString());
            Assert.That(tokens[2].Type, Is.EqualTo(TokenType.String), tokens[2].Token.ToString());
            Assert.That(tokens[3].Type, Is.EqualTo(TokenType.Identifier), tokens[3].Token.ToString());
            Assert.That(tokens[4].Type, Is.EqualTo(TokenType.String), tokens[4].Token.ToString());
            Assert.That(tokens[5].Type, Is.EqualTo(TokenType.Identifier), tokens[5].Token.ToString());
        }