public override SyntaxTreeNode Parse(string text)
        {
            var firstResult = FirstParser.Parse(text);

            if (firstResult is null)
            {
                return(null);
            }

            var secondResult = SecondParser.Parse(firstResult.Rest);

            if (secondResult is null)
            {
                return(null);
            }

            var children = new List <SyntaxTreeNode> {
                firstResult, secondResult
            };
            // [todo] change it on concatination
            var parsedText = secondResult.Rest != string.Empty ?
                             text.Replace(secondResult.Rest, "") :
                             text;

            return(new SyntaxTreeNode(parsedText, secondResult.Rest, this, children));
        }
Пример #2
0
        public void Parse_WithDoubleSpace_RemovesEmptySections(string commandText, int expectedSectionCount)
        {
            CoreParser       parser      = new CoreParser();
            ICoreParseResult parseResult = parser.Parse(commandText, commandText.Length + 1);

            Assert.Equal(expectedSectionCount, parseResult.Sections.Count);
        }
Пример #3
0
        public override SyntaxTreeNode Parse(string text)
        {
            if (InternalParser == null)
            {
                throw new NoNullAllowedException($"It must call {nameof(InitGrammar)} before parsing");
            }

            return(InternalParser.Parse(text));
        }
Пример #4
0
        public void Slice_WithSelectedSection_SelectedSectionMoves(string commandText, int toRemove, int caretPosition, int expectedSelectedSection)
        {
            CoreParser       parser      = new CoreParser();
            ICoreParseResult parseResult = parser.Parse(commandText, caretPosition);

            ICoreParseResult result = parseResult.Slice(toRemove);

            Assert.Equal(expectedSelectedSection, result.SelectedSection);
        }
Пример #5
0
        public void Slice_WithVariousSliceLengths_CorrectCommandTextOutput(string commandText, int toRemove, string expectedCommandText)
        {
            CoreParser       parser      = new CoreParser();
            ICoreParseResult parseResult = parser.Parse(commandText, commandText.Length);

            ICoreParseResult result = parseResult.Slice(toRemove);

            Assert.Equal(expectedCommandText, result.CommandText);
        }
Пример #6
0
        public void Slice_WithCaretInSlicedRegion_CaretIsZero()
        {
            CoreParser       parser      = new CoreParser();
            string           commandText = "set header content-type application/json";
            ICoreParseResult parseResult = parser.Parse(commandText, 5);

            ICoreParseResult result = parseResult.Slice(2);

            Assert.Equal(0, result.CaretPositionWithinCommandText);
        }
Пример #7
0
        public void Slice_WithZero_ReturnsThis()
        {
            CoreParser       parser      = new CoreParser();
            string           commandText = "set header content-type application/json";
            ICoreParseResult parseResult = parser.Parse(commandText, commandText.Length);

            ICoreParseResult result = parseResult.Slice(0);

            Assert.Same(parseResult, result);
        }
Пример #8
0
        public void ParseReturnsCorrectResultWhenSuccessful()
        {
            var builderFactories = Mock.Of <IBuilderFactories>();
            var parser           = new CoreParser <Step>(new ParsingData(), builderFactories);

            var(failedLines, remaining, result) = parser.Parse("matched", ExpectedModifier.Source, default);

            Assert.IsEmpty(failedLines);
            Assert.IsEmpty(remaining);
            Assert.AreEqual(new[] { ExpectedModifier }, result);
        }
Пример #9
0
        public static ICoreParseResult Create(string commandText)
        {
            if (commandText == null)
            {
                throw new ArgumentNullException(nameof(commandText));
            }

            CoreParser       coreParser  = new CoreParser();
            ICoreParseResult parseResult = coreParser.Parse(commandText, commandText.Length);

            return(parseResult);
        }
Пример #10
0
        public void Parse_WithQuotesButNoSpaces_DoesNotCombineSections()
        {
            // Arrange
            string     commandText   = "GET --response:headers \"file.txt\" --response:body \"file.txt\"";
            int        caretPosition = commandText.Length + 1;
            CoreParser parser        = new CoreParser();

            int expectedSectionCount = 5;

            // Act
            ICoreParseResult parseResult = parser.Parse(commandText, caretPosition);

            // Assert
            Assert.Equal(expectedSectionCount, parseResult.Sections.Count);
        }
Пример #11
0
        public void ParserTests_Basic()
        {
            string testString = "\"this is a test\" of \"Escape\\\\Sequences\\\"\"";

            CoreParser       parser = new CoreParser();
            ICoreParseResult result = parser.Parse(testString, 29);

            Assert.Equal(3, result.Sections.Count);
            Assert.Equal(2, result.SelectedSection);
            Assert.Equal(0, result.SectionStartLookup[0]);
            Assert.Equal(17, result.SectionStartLookup[1]);
            Assert.Equal(20, result.SectionStartLookup[2]);
            Assert.Equal(7, result.CaretPositionWithinSelectedSection);
            Assert.Equal(29, result.CaretPositionWithinCommandText);
            Assert.Equal(testString, result.CommandText);
        }
Пример #12
0
        public void Slice_WithTooMany_ReturnsDefaultResult()
        {
            CoreParser       parser      = new CoreParser();
            string           commandText = "set header content-type application/json";
            ICoreParseResult parseResult = parser.Parse(commandText, commandText.Length);

            ICoreParseResult result = parseResult.Slice(100);

            Assert.Equal(0, result.CaretPositionWithinCommandText);
            Assert.Equal(0, result.CaretPositionWithinSelectedSection);
            Assert.Equal(string.Empty, result.CommandText);
            Assert.Single(result.Sections);
            Assert.Contains(string.Empty, result.Sections);
            Assert.Equal(0, result.SelectedSection);
            Assert.Single(result.SectionStartLookup);
            Assert.Equal(0, result.SectionStartLookup.Single().Key);
            Assert.Equal(0, result.SectionStartLookup.Single().Value);
        }
Пример #13
0
        public override SyntaxTreeNode Parse(string text)
        {
            var pResult = FirstParser.Parse(text) ?? SecondParser.Parse(text);

            return(pResult);
        }