コード例 #1
0
 private void VerifyCurrentSyntaxTree(TestParserManager manager)
 {
     BaselineTest(manager.CurrentSyntaxTree);
 }
コード例 #2
0
        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."
                    );
            }
        }
コード例 #3
0
        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()
                        )
                    );
            }
        }
コード例 #4
0
        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.");
            }
        }