提交 82110f44 编写于 作者: R Ravi Chande 提交者: GitHub

Add integration tests for F1 help (#18406)

Add integration tests for F1 help
上级 96167657
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpF1Help : AbstractEditorTest
{
protected override string LanguageName => LanguageNames.CSharp;
public CSharpF1Help(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(CSharpF1Help))
{
}
[Fact, Trait(Traits.Feature, Traits.Features.F1Help)]
void F1Help()
{
var text = @"
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
namespace F1TestNamespace
{
#region TaoRegion
abstract class ShapesClass { }
class Program$$
{
public static void Main()
{
}
public IEnumerable<int> Linq1()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int i = numbers.First();
int j = Array.IndexOf(numbers, 1);
var lowNums1 =
from n in numbers
orderby n ascending
where n < 5
select n;
var numberGroups =
from n in numbers
let m = 1
join p in numbers on i equals p
group n by n % 5 into g
select new { Remainder = g.Key, Numbers = g };
foreach (int element in numbers) yield return i;
}
}
#endregion TaoRegion
}";
SetUpEditor(text);
Verify("abstract", "abstract_CSharpKeyword");
Verify("ascending", "ascending_CSharpKeyword");
Verify("from", "from_CSharpKeyword");
Verify("First();", "System.Linq.Enumerable.First``1");
}
private void Verify(string word, string expectedKeyword)
{
VisualStudio.Editor.PlaceCaret(word, charsOffset: -1);
Assert.Contains(expectedKeyword, VisualStudio.Editor.GetF1Keyword());
}
}
}
\ No newline at end of file
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.IntegrationTests.Basic
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class BasicF1Help : AbstractEditorTest
{
protected override string LanguageName => LanguageNames.VisualBasic;
public BasicF1Help(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(BasicF1Help))
{
}
[Fact, Trait(Traits.Feature, Traits.Features.F1Help)]
void F1Help()
{
var text = @"
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program$$
Sub Main(args As String())
Dim query = From arg In args
Select args.Any(Function(a) a.Length > 5)
Dim x = 0
x += 1
End Sub
Public Function F() As Object
Return Nothing
End Function
End Module";
SetUpEditor(text);
Verify("Linq", "System.Linq");
Verify("String", "vb.String");
Verify("Any", "System.Linq.Enumerable.Any");
Verify("From", "vb.QueryFrom");
Verify("+=", "vb.+=");
Verify("Nothing", "vb.Nothing");
}
private void Verify(string word, string expectedKeyword)
{
VisualStudio.Editor.PlaceCaret(word, charsOffset: -1);
Assert.Contains(expectedKeyword, VisualStudio.Editor.GetF1Keyword());
}
}
}
\ No newline at end of file
......@@ -22,6 +22,7 @@
<Compile Include="AbstractIntegrationTest.cs" />
<Compile Include="AbstractInteractiveWindowTest.cs" />
<Compile Include="CSharp\CSharpEncapsulateField.cs" />
<Compile Include="CSharp\CSharpF1Help.cs" />
<Compile Include="CSharp\CSharpInteractiveBoxSelection.cs" />
<Compile Include="CSharp\CSharpChangeSignatureDialog.cs" />
<Compile Include="CSharp\CSharpClassification.cs" />
......@@ -59,6 +60,7 @@
<Compile Include="VisualBasic\BasicEncapsulateField.cs" />
<Compile Include="VisualBasic\BasicNavigationBar.cs" />
<Compile Include="VisualBasic\BasicLineCommit.cs" />
<Compile Include="VisualBasic\BasicF1Help.cs" />
<Compile Include="VisualBasic\BasicSquigglesCommon.cs" />
<Compile Include="VisualBasic\BasicSquigglesDesktop.cs" />
<Compile Include="VisualBasic\BasicSquigglesNetCore.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Linq;
......@@ -12,6 +13,7 @@
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Common;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Tagging;
......@@ -499,5 +501,38 @@ protected override ITextBuffer GetBufferContainingCaret(IWpfTextView view)
{
return view.GetBufferContainingCaret();
}
public List<string> GetF1Keywords()
{
return InvokeOnUIThread(() =>
{
var results = new List<string>();
GetActiveVsTextView().GetBuffer(out var textLines);
Marshal.ThrowExceptionForHR(textLines.GetLanguageServiceID(out var languageServiceGuid));
Marshal.ThrowExceptionForHR(Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.QueryService(languageServiceGuid, out var languageService));
var languageContextProvider = languageService as IVsLanguageContextProvider;
IVsMonitorUserContext monitorUserContext = GetGlobalService<SVsMonitorUserContext, IVsMonitorUserContext>();
Marshal.ThrowExceptionForHR(monitorUserContext.CreateEmptyContext(out var emptyUserContext));
Marshal.ThrowExceptionForHR(GetActiveVsTextView().GetCaretPos(out var line, out var column));
var span = new TextSpan()
{
iStartLine = line,
iStartIndex = column,
iEndLine = line,
iEndIndex = column
};
Marshal.ThrowExceptionForHR(languageContextProvider.UpdateLanguageContext(0, textLines, new[] { span }, emptyUserContext));
Marshal.ThrowExceptionForHR(emptyUserContext.CountAttributes("keyword", VSConstants.S_FALSE, out var count));
for (int i = 0; i < count; i++)
{
emptyUserContext.GetAttribute(i, "keyword", VSConstants.S_FALSE, out var key, out var value);
results.Add(value);
}
return results;
});
}
}
}
......@@ -3,11 +3,13 @@
using System;
using System.Linq;
using System.Windows.Automation;
using System.Collections.Generic;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Common;
using Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using System.Collections.Immutable;
namespace Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess
{
......@@ -173,6 +175,8 @@ public void WaitForActiveView(string viewName)
public string[] GetErrorTags()
=> _editorInProc.GetErrorTags();
public List<string> GetF1Keyword()
=> _editorInProc.GetF1Keywords();
public void ExpandProjectNavBar()
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册