private void VerifyCurrentSyntaxTree(TestParserManager manager) { BaselineTest(manager.CurrentSyntaxTree); }
public void ImplicitExpressionProvisionallyAcceptsCaseInsensitiveDotlessCommitInsertions_NewRoslynIntegration() { SpanFactory factory = SpanFactory.CreateCsHtml(); StringTextBuffer old = new StringTextBuffer("foo @date baz"); StringTextBuffer changed = new StringTextBuffer("foo @date. baz"); TextChange textChange = new TextChange(9, 0, old, 1, changed); using (TestParserManager manager = CreateParserManager()) { Action <TextChange, PartialParseResult, string> applyAndVerifyPartialChange = ( changeToApply, expectedResult, expectedCode ) => { PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange); // Assert Assert.Equal(expectedResult, result); Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree( manager.Parser.CurrentParseTree, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory .Code(expectedCode) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .Accepts(AcceptedCharacters.NonWhiteSpace) ), factory.Markup(" baz") ) ); }; manager.InitializeWithDocument(textChange.OldBuffer); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. // @date => @date. applyAndVerifyPartialChange( textChange, PartialParseResult.Accepted | PartialParseResult.Provisional, "date." ); old = changed; changed = new StringTextBuffer("foo @date baz"); textChange = new TextChange(9, 1, old, 0, changed); // @date. => @date applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "date"); old = changed; changed = new StringTextBuffer("foo @DateTime baz"); textChange = new TextChange(5, 4, old, 8, changed); // @date => @DateTime applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime"); old = changed; changed = new StringTextBuffer("foo @DateTime. baz"); textChange = new TextChange(13, 0, old, 1, changed); // @DateTime => @DateTime. applyAndVerifyPartialChange( textChange, PartialParseResult.Accepted | PartialParseResult.Provisional, "DateTime." ); } }
public void ImplicitExpressionRejectsChangeWhichWouldHaveBeenAcceptedIfLastChangeWasProvisionallyAcceptedOnDifferentSpan() { var factory = SpanFactory.CreateCsHtml(); // Arrange TextChange dotTyped = new TextChange( 8, 0, new StringTextBuffer("foo @foo @bar"), 1, new StringTextBuffer("foo @foo. @bar") ); TextChange charTyped = new TextChange( 14, 0, new StringTextBuffer("foo @foo. @bar"), 1, new StringTextBuffer("foo @foo. @barb") ); using (TestParserManager manager = CreateParserManager()) { manager.InitializeWithDocument(dotTyped.OldBuffer); // Apply the dot change Assert.Equal( PartialParseResult.Provisional | PartialParseResult.Accepted, manager.CheckForStructureChangesAndWait(dotTyped) ); // Act (apply the identifier start char change) PartialParseResult result = manager.CheckForStructureChangesAndWait(charTyped); // Assert Assert.Equal(PartialParseResult.Rejected, result); Assert.False( manager.Parser.LastResultProvisional, "LastResultProvisional flag should have been cleared but it was not" ); ParserTestBase.EvaluateParseTree( manager.Parser.CurrentParseTree, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory .Code("foo") .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .Accepts(AcceptedCharacters.NonWhiteSpace) ), factory.Markup(". "), new ExpressionBlock( factory.CodeTransition(), factory .Code("barb") .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .Accepts(AcceptedCharacters.NonWhiteSpace) ), factory.EmptyHtml() ) ); } }
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlock() { SpanFactory factory = SpanFactory.CreateCsHtml(); StringTextBuffer changed = new StringTextBuffer( "@{" + Environment.NewLine + " @DateT." + Environment.NewLine + "}" ); StringTextBuffer old = new StringTextBuffer( "@{" + Environment.NewLine + " @DateT" + Environment.NewLine + "}" ); var textChange = new TextChange(14, 0, old, 1, changed); using (TestParserManager manager = CreateParserManager()) { Action <TextChange, PartialParseResult, string> applyAndVerifyPartialChange = ( changeToApply, expectedResult, expectedCode ) => { PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange); // Assert Assert.Equal(expectedResult, result); Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree( manager.Parser.CurrentParseTree, new MarkupBlock( factory.EmptyHtml(), new StatementBlock( factory.CodeTransition(), factory.MetaCode("{").Accepts(AcceptedCharacters.None), factory.Code("\r\n ").AsStatement(), new ExpressionBlock( factory.CodeTransition(), factory .Code(expectedCode) .AsImplicitExpression( CSharpCodeParser.DefaultKeywords, acceptTrailingDot: true ) .Accepts(AcceptedCharacters.NonWhiteSpace) ), factory.Code("\r\n").AsStatement(), factory.MetaCode("}").Accepts(AcceptedCharacters.None) ), factory.EmptyHtml() ) ); }; manager.InitializeWithDocument(textChange.OldBuffer); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateT."); old = changed; changed = new StringTextBuffer( "@{" + Environment.NewLine + " @DateTime." + Environment.NewLine + "}" ); textChange = new TextChange(14, 0, old, 3, changed); applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime."); } }