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

Outlining VSI tests (#18508)

Outlining VSI tests
上级 b6f7c5c5
// 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.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpOutlining : AbstractEditorTest
{
protected override string LanguageName => LanguageNames.CSharp;
public CSharpOutlining(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(CSharpOutlining))
{
}
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public void Outlining()
{
var input = @"
using [|System;
using System.Collections.Generic;
using System.Text;|]
namespace ConsoleApplication1[|
{
public class Program[|
{
public static void Main(string[] args)[|
{
Console.WriteLine(""Hello World"");
}|]
}|]
}|]";
MarkupTestFile.GetSpans(input, out var text, out ImmutableArray<TextSpan> spans);
VisualStudio.Editor.SetText(text);
Assert.Equal(spans.OrderBy(s => s.Start), VisualStudio.Editor.GetOutliningSpans());
}
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public void OutliningConfigChange()
{
var input = @"
namespace ClassLibrary1[|
{
public class Class1[|
{
#if DEBUG
{|Release: void Foo(){|Debug:
{
}|}
void Foo2(){|Debug:
{
}|}|}
#else
{|Debug: void Bar(){|Release:
{
}|}|}
#endif
}|]
}|]";
MarkupTestFile.GetSpans(input, out var text, out IDictionary<string, ImmutableArray<TextSpan>> spans);
VisualStudio.Editor.SetText(text);
VerifySpansInConfiguration(spans, "Release");
VerifySpansInConfiguration(spans, "Debug");
}
private void VerifySpansInConfiguration(IDictionary<string, ImmutableArray<TextSpan>> spans, string configuration)
{
VisualStudio.ExecuteCommand("Build.SolutionConfigurations", configuration);
var expectedSpans = spans[""].Concat(spans[configuration]).OrderBy(s => s.Start);
Assert.Equal(expectedSpans, VisualStudio.Editor.GetOutliningSpans());
}
}
}
\ 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 System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.IntegrationTests.Basic
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class BasicOutlining : AbstractEditorTest
{
protected override string LanguageName => LanguageNames.VisualBasic;
public BasicOutlining(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(BasicOutlining))
{
}
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public void Outlining()
{
var input = @"
[|Imports System
Imports System.Text|]
[|Namespace Acme
[|Module Module1
[|Sub Main()
End Sub|]
End Module|]
End Namespace|]";
MarkupTestFile.GetSpans(input, out var text, out ImmutableArray<TextSpan> spans);
VisualStudio.Editor.SetText(text);
Assert.Equal(spans.OrderBy(s => s.Start), VisualStudio.Editor.GetOutliningSpans());
}
}
}
\ No newline at end of file
......@@ -46,6 +46,7 @@
<Compile Include="CSharp\CSharpOrganizing.cs" />
<Compile Include="CSharp\CSharpNavigationBar.cs" />
<Compile Include="CSharp\CSharpKeywordHighlighting.cs" />
<Compile Include="CSharp\CSharpOutlining.cs" />
<Compile Include="CSharp\CSharpReplClassification.cs" />
<Compile Include="CSharp\CSharpReplIdeFeatures.cs" />
<Compile Include="CSharp\CSharpReplIntellisense.cs" />
......@@ -73,6 +74,7 @@
<Compile Include="VisualBasic\BasicErrorListDesktop.cs" />
<Compile Include="VisualBasic\BasicErrorListNetCore.cs" />
<Compile Include="VisualBasic\BasicOrganizing.cs" />
<Compile Include="VisualBasic\BasicOutlining.cs" />
<Compile Include="Workspace\WorkspaceBase.cs" />
<Compile Include="Workspace\WorkspacesDesktop.cs" />
<Compile Include="Workspace\WorkspacesNetCore.cs" />
......
......@@ -19,6 +19,7 @@
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Operations;
using Microsoft.VisualStudio.Text.Outlining;
using Microsoft.VisualStudio.Text.Tagging;
using Microsoft.VisualStudio.TextManager.Interop;
......@@ -150,15 +151,15 @@ public string[] GetErrorTags()
public string[] GetHighlightTags()
=> GetTags<ITextMarkerTag>(tag => tag.Type == KeywordHighlightTag.TagId);
private string PrintSpan(SnapshotSpan span)
=> $"'{span.GetText()}'[{span.Start.Position}-{span.Start.Position + span.Length}]";
private string[] GetTags<TTag>(Predicate<TTag> filter = null)
where TTag : ITag
{
bool Filter(TTag tag)
=> true;
string PrintSpan(SnapshotSpan span)
=> $"'{span.GetText()}'[{span.Start.Position}-{span.Start.Position + span.Length}]";
if (filter == null)
{
filter = Filter;
......@@ -502,6 +503,20 @@ protected override ITextBuffer GetBufferContainingCaret(IWpfTextView view)
return view.GetBufferContainingCaret();
}
public string[] GetOutliningSpans()
{
return ExecuteOnActiveView(view =>
{
var manager = GetComponentModelService<IOutliningManagerService>().GetOutliningManager(view);
var span = new SnapshotSpan(view.TextSnapshot, 0, view.TextSnapshot.Length);
var regions = manager.GetAllRegions(span);
return regions
.OrderBy(s => s.Extent.GetStartPoint(view.TextSnapshot))
.Select(r => PrintSpan(r.Extent.GetSpan(view.TextSnapshot)))
.ToArray();
});
}
public List<string> GetF1Keywords()
{
return InvokeOnUIThread(() =>
......
......@@ -296,6 +296,12 @@ public bool IsNavBarEnabled()
public TextSpan[] GetKeywordHighlightTags()
=> Deserialize(_editorInProc.GetHighlightTags());
public TextSpan[] GetOutliningSpans()
{
_instance.Workspace.WaitForAsyncOperations(FeatureAttribute.Outlining);
return Deserialize(_editorInProc.GetOutliningSpans());
}
private TextSpan[] Deserialize(string[] v)
{
// returned tag looks something like 'text'[12-13]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册