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)); }
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); }
public override SyntaxTreeNode Parse(string text) { if (InternalParser == null) { throw new NoNullAllowedException($"It must call {nameof(InitGrammar)} before parsing"); } return(InternalParser.Parse(text)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public override SyntaxTreeNode Parse(string text) { var pResult = FirstParser.Parse(text) ?? SecondParser.Parse(text); return(pResult); }