CSharpReplIntellisense.cs 4.0 KB
Newer Older
I
Ivan Basov 已提交
1 2
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.

3
using System.Threading.Tasks;
I
Ivan Basov 已提交
4 5 6
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
7
using Roslyn.Test.Utilities;
I
Ivan Basov 已提交
8 9 10 11 12 13 14 15 16 17
using Xunit;

namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
    [Collection(nameof(SharedIntegrationHostFixture))]
    public class CSharpReplIntellisense : AbstractInteractiveWindowTest
    {
        public CSharpReplIntellisense(VisualStudioInstanceFactory instanceFactory)
            : base(instanceFactory)
        {
18 19 20 21 22
        }

        public override async Task InitializeAsync()
        {
            await base.InitializeAsync().ConfigureAwait(true);
23
            VisualStudio.Workspace.SetUseSuggestionMode(true);
I
Ivan Basov 已提交
24 25
        }

S
Sam Harwell 已提交
26
        [WpfFact]
I
Ivan Basov 已提交
27 28
        public void VerifyCompletionListOnEmptyTextAtTopLevel()
        {
29 30
            VisualStudio.InteractiveWindow.InvokeCompletionList();
            VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("var", "public", "readonly", "goto");
I
Ivan Basov 已提交
31 32
        }

S
Sam Harwell 已提交
33
        [WpfFact]
I
Ivan Basov 已提交
34 35
        public void VerifySharpRCompletionList()
        {
36 37 38
            VisualStudio.InteractiveWindow.InsertCode("#r \"");
            VisualStudio.InteractiveWindow.InvokeCompletionList();
            VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("System");
I
Ivan Basov 已提交
39 40
        }

S
Sam Harwell 已提交
41
        [WpfFact]
I
Ivan Basov 已提交
42 43
        public void VerifyCommitCompletionOnTopLevel()
        {
44 45 46 47 48 49
            VisualStudio.InteractiveWindow.InsertCode("pub");
            VisualStudio.InteractiveWindow.InvokeCompletionList();
            VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("public");
            VisualStudio.SendKeys.Send(VirtualKey.Tab);
            VisualStudio.InteractiveWindow.Verify.LastReplInput("public");
            VisualStudio.SendKeys.Send(VirtualKey.Escape);
I
Ivan Basov 已提交
50 51
        }

S
Sam Harwell 已提交
52
        [WpfFact]
I
Ivan Basov 已提交
53 54
        public void VerifyCompletionListForAmbiguousParsingCases()
        {
55
            VisualStudio.InteractiveWindow.InsertCode(@"class C { }
I
Ivan Basov 已提交
56 57
public delegate R Del<T, R>(T arg);
Del<C, System");
58 59 60
            VisualStudio.SendKeys.Send(VirtualKey.Period);
            VisualStudio.Workspace.WaitForAsyncOperations(FeatureAttribute.CompletionSet);
            VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("ArgumentException");
I
Ivan Basov 已提交
61 62
        }

S
Sam Harwell 已提交
63
        [WpfFact]
I
Ivan Basov 已提交
64 65
        public void VerifySharpLoadCompletionList()
        {
66 67 68
            VisualStudio.InteractiveWindow.InsertCode("#load \"");
            VisualStudio.InteractiveWindow.InvokeCompletionList();
            VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("C:");
I
Ivan Basov 已提交
69 70
        }

S
Sam Harwell 已提交
71
        [WpfFact]
I
Ivan Basov 已提交
72 73
        public void VerifyNoCrashOnEnter()
        {
74 75
            VisualStudio.Workspace.SetUseSuggestionMode(false);
            VisualStudio.SendKeys.Send("#help", VirtualKey.Enter, VirtualKey.Enter);
I
Ivan Basov 已提交
76 77
        }

S
Sam Harwell 已提交
78
        [WpfFact]
I
Ivan Basov 已提交
79 80
        public void VerifyCorrectIntellisenseSelectionOnEnter()
        {
81 82 83 84
            VisualStudio.Workspace.SetUseSuggestionMode(false);
            VisualStudio.SendKeys.Send("TimeSpan.FromMin");
            VisualStudio.SendKeys.Send(VirtualKey.Enter, "(0d)", VirtualKey.Enter);
            VisualStudio.InteractiveWindow.WaitForReplOutput("[00:00:00]");
I
Ivan Basov 已提交
85 86
        }

S
Sam Harwell 已提交
87
        [WpfFact]
I
Ivan Basov 已提交
88 89 90
        public void VerifyCompletionListForLoadMembers()
        {
            using (var temporaryTextFile = new TemporaryTextFile(
91
                "c.csx",
92
                "int x = 2; class Complex { public int goo() { return 4; } }"))
I
Ivan Basov 已提交
93 94
            {
                temporaryTextFile.Create();
95 96 97 98
                VisualStudio.InteractiveWindow.SubmitText(string.Format("#load \"{0}\"", temporaryTextFile.FullName));
                VisualStudio.InteractiveWindow.InvokeCompletionList();
                VisualStudio.InteractiveWindow.Verify.CompletionItemsExist("x", "Complex");
                VisualStudio.SendKeys.Send(VirtualKey.Escape);
I
Ivan Basov 已提交
99 100 101
            }
        }
    }
S
Sam Harwell 已提交
102
}