예제 #1
0
        public async Task CanDoTagging(string testFile)
        {
            // Arrange.
            var sourceCode         = File.ReadAllText(testFile);
            var textBuffer         = TextBufferUtility.CreateTextBuffer(Container, sourceCode);
            var backgroundParser   = new BackgroundParser(textBuffer);
            var snapshot           = textBuffer.CurrentSnapshot;
            var syntaxTree         = snapshot.GetSyntaxTree(CancellationToken.None);
            var snapshotSyntaxTree = new SnapshotSyntaxTree(snapshot, syntaxTree);
            var tagger             = CreateTagger(backgroundParser, snapshot);

            // Act.
            await tagger.InvalidateTags(snapshotSyntaxTree, CancellationToken.None);

            var tagSpans = tagger.GetTags(new NormalizedSnapshotSpanCollection(new[]
            {
                new SnapshotSpan(snapshot, 0, snapshot.Length)
            })).ToList();

            // Assert.
            if (MustCreateTagSpans)
            {
                Assert.That(tagSpans.Any());
            }

            backgroundParser.Dispose();
        }
예제 #2
0
        public void TestUnCommentIndented()
        {
            var view = TextViewUtility.CreateTextView(Container,
                                                      TextBufferUtility.CreateTextBuffer(Container, @"void f(){
    //int i;
    //half h;
    float f;
}"));

            view.Selection.Select(
                new SnapshotSpan(
                    view.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(1).Start,
                    view.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(2).End
                    ),
                false
                );
            view.Selection.IsActive = true;

            view.CommentOrUncommentBlock(false);

            Assert.Equal(@"void f(){
    int i;
    half h;
    float f;
}",
                         view.TextBuffer.CurrentSnapshot.GetText());
        }
예제 #3
0
        public void TestCommentBlankLine()
        {
            var view = TextViewUtility.CreateTextView(Container,
                                                      TextBufferUtility.CreateTextBuffer(Container, @"int i;

float f;"));

            view.Caret.MoveTo(view.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(1).Start);

            view.CommentOrUncommentBlock(true);

            Assert.Equal(@"int i;

float f;",
                         view.TextBuffer.CurrentSnapshot.GetText());
        }
예제 #4
0
        public void TestComment()
        {
            var view = TextViewUtility.CreateTextView(Container,
                                                      TextBufferUtility.CreateTextBuffer(Container, @"int i;
float f;"));

            view.Selection.Select(
                new SnapshotSpan(view.TextBuffer.CurrentSnapshot, new Span(0, view.TextBuffer.CurrentSnapshot.Length)),
                false
                );
            view.Selection.IsActive = true;

            view.CommentOrUncommentBlock(true);

            Assert.Equal(@"//int i;
//float f;",
                         view.TextBuffer.CurrentSnapshot.GetText());
        }
예제 #5
0
        public async Task ParameterTest_ComputeCurrentParameter01()
        {
            var textBuffer   = new TextBufferMock("aov(", RContentTypeDefinition.ContentType);
            var editorBuffer = textBuffer.ToEditorBuffer();
            var source       = new RSignatureHelpSource(textBuffer, Services);
            var session      = new SignatureHelpSessionMock(Services, textBuffer, 0);
            var textView     = session.TextView as TextViewMock;
            var signatures   = new List <ISignature>();

            using (var tree = new EditorTree(editorBuffer, Services)) {
                tree.Build();
                using (var document = new EditorDocumentMock(tree)) {
                    session.TrackingPoint = new TrackingPointMock(textBuffer, 4, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
                    await FunctionIndex.GetPackageNameAsync("aov");

                    tree.TakeThreadOwnerShip();
                    await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot);

                    signatures.Should().ContainSingle();

                    var index = GetCurrentParameterIndex(signatures[0], signatures[0].CurrentParameter);
                    index.Should().Be(0);

                    textView.Caret = new TextCaretMock(textView, 5);
                    TextBufferUtility.ApplyTextChange(textBuffer, 4, 0, 1, "a");
                    index = GetCurrentParameterIndex(signatures[0], signatures[0].CurrentParameter);
                    index.Should().Be(0);

                    textView.Caret = new TextCaretMock(textView, 6);
                    TextBufferUtility.ApplyTextChange(textBuffer, 5, 0, 1, ",");
                    tree.EnsureTreeReady();
                    index = GetCurrentParameterIndex(signatures[0], signatures[0].CurrentParameter);
                    index.Should().Be(1);

                    textView.Caret = new TextCaretMock(textView, 7);
                    TextBufferUtility.ApplyTextChange(textBuffer, 6, 0, 1, ",");
                    tree.EnsureTreeReady();
                    index = GetCurrentParameterIndex(signatures[0], signatures[0].CurrentParameter);
                    index.Should().Be(2);
                }
            }
        }
예제 #6
0
        public void TestCommentAfterCodeIsNotUncommented()
        {
            var view = TextViewUtility.CreateTextView(Container,
                                                      TextBufferUtility.CreateTextBuffer(Container, @"int i;//comment that should stay a comment;
//half h;//another comment that should stay a comment;
float f;"));

            view.Selection.Select(
                new SnapshotSpan(view.TextBuffer.CurrentSnapshot, new Span(0, view.TextBuffer.CurrentSnapshot.GetText().IndexOf("float f;"))),
                false
                );
            view.Selection.IsActive = true;

            view.CommentOrUncommentBlock(false);

            Assert.Equal(@"int i;//comment that should stay a comment;
half h;//another comment that should stay a comment;
float f;",
                         view.TextBuffer.CurrentSnapshot.GetText());
        }
        internal async Task <List <ITagSpan <TTag> > > GetTagSpans <TTagger, TTag>(string sourceCode, CreateTagger <TTagger, TTag> createTagger)
            where TTagger : AsyncTagger <TTag>
            where TTag : ITag
        {
            var textBuffer       = TextBufferUtility.CreateTextBuffer(Container, sourceCode);
            var backgroundParser = new BackgroundParser(textBuffer);
            var snapshot         = textBuffer.CurrentSnapshot;
            var tagger           = createTagger(backgroundParser, textBuffer);

            await tagger.InvalidateTags(snapshot, CancellationToken.None);

            var tags = tagger.GetTags(new NormalizedSnapshotSpanCollection(new[]
            {
                new SnapshotSpan(snapshot, 0, snapshot.Length)
            })).ToList();

            backgroundParser.Dispose();

            return(tags);
        }
예제 #8
0
            public async Task ParameterTest_ComputeCurrentParameter01()
            {
                ITextBuffer              textBuffer = new TextBufferMock("aov(", RContentTypeDefinition.ContentType);
                SignatureHelpSource      source     = new SignatureHelpSource(textBuffer);
                SignatureHelpSessionMock session    = new SignatureHelpSessionMock(textBuffer, 0);
                TextViewMock             textView   = session.TextView as TextViewMock;
                List <ISignature>        signatures = new List <ISignature>();

                EditorTree tree = new EditorTree(textBuffer);

                tree.Build();
                var document = new EditorDocumentMock(tree);

                session.TrackingPoint = new TrackingPointMock(textBuffer, 4, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
                await FunctionIndexUtility.GetFunctionInfoAsync("aov");

                tree.TakeThreadOwnerShip();
                await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot);

                signatures.Should().ContainSingle();

                int index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);

                index.Should().Be(0);

                textView.Caret = new TextCaretMock(textView, 5);
                TextBufferUtility.ApplyTextChange(textBuffer, 4, 0, 1, "a");
                index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
                index.Should().Be(0);

                textView.Caret = new TextCaretMock(textView, 6);
                TextBufferUtility.ApplyTextChange(textBuffer, 5, 0, 1, ",");
                index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
                index.Should().Be(1);

                textView.Caret = new TextCaretMock(textView, 7);
                TextBufferUtility.ApplyTextChange(textBuffer, 6, 0, 1, ",");
                index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
                index.Should().Be(2);
            }