提交 f042fe83 编写于 作者: D Dustin Campbell

Make it possible to write VB editor tests

上级 aca6901c
// 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 Roslyn.Test.Utilities;
using Roslyn.VisualStudio.IntegrationTests;
using Roslyn.VisualStudio.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities.Input;
using Xunit;
namespace Roslyn.VisualStudio.CSharp.IntegrationTests
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpAutomaticBraceCompletion : EditorTestFixture
{
protected override string LanguageName => LanguageNames.CSharp;
public CSharpAutomaticBraceCompletion(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(CSharpAutomaticBraceCompletion))
{
......
// 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 Roslyn.VisualStudio.IntegrationTests;
using Microsoft.CodeAnalysis;
using Roslyn.VisualStudio.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.CSharp.IntegrationTests
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpBuild : IDisposable
......@@ -17,7 +17,7 @@ public CSharpBuild(VisualStudioInstanceFactory instanceFactory)
_visualStudio = instanceFactory.GetNewOrUsedInstance();
_visualStudio.Instance.SolutionExplorer.CreateSolution(nameof(CSharpBuild));
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ConsoleApplication, WellKnownLanguageNames.CSharp);
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ConsoleApplication, LanguageNames.CSharp);
}
public void Dispose()
......
// 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 Roslyn.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities.Common;
......@@ -11,6 +12,8 @@ namespace Roslyn.VisualStudio.IntegrationTests.CSharp
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpIntelliSense : EditorTestFixture
{
protected override string LanguageName => LanguageNames.CSharp;
public CSharpIntelliSense(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(CSharpIntelliSense))
{
......
......@@ -2,12 +2,11 @@
using System;
using System.Threading.Tasks;
using Roslyn.VisualStudio.IntegrationTests;
using Roslyn.VisualStudio.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities.OutOfProcess;
using Xunit;
namespace Roslyn.VisualStudio.CSharp.IntegrationTests
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class CSharpInteractiveDemo : IDisposable
......
......@@ -22,7 +22,7 @@ protected EditorTestFixture(VisualStudioInstanceFactory instanceFactory, string
_visualStudio = instanceFactory.GetNewOrUsedInstance();
_visualStudio.Instance.SolutionExplorer.CreateSolution(solutionName);
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ClassLibrary, WellKnownLanguageNames.CSharp);
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ClassLibrary, LanguageName);
_visualStudioWorkspace = _visualStudio.Instance.VisualStudioWorkspace;
_visualStudioWorkspace.UseSuggestionMode = false;
......@@ -30,16 +30,13 @@ protected EditorTestFixture(VisualStudioInstanceFactory instanceFactory, string
_editor = _visualStudio.Instance.Editor;
}
protected abstract string LanguageName { get; }
public void Dispose()
{
_visualStudio.Dispose();
}
protected void WaitForWorkspace()
{
_visualStudioWorkspace.WaitForAsyncOperations("Workspace");
}
public void WaitForAsyncOperations(string featuresToWaitFor)
{
_visualStudioWorkspace.WaitForAsyncOperations(featuresToWaitFor);
......@@ -56,8 +53,18 @@ protected void SetUpEditor(string markupCode)
int caretPosition;
MarkupTestFile.GetPosition(markupCode, out code, out caretPosition);
_editor.SetText(code);
_editor.MoveCaret(caretPosition);
var originalValue = _visualStudioWorkspace.IsPrettyListingOn(LanguageName);
_visualStudioWorkspace.SetPrettyListing(LanguageName, false);
try
{
_editor.SetText(code);
_editor.MoveCaret(caretPosition);
}
finally
{
_visualStudioWorkspace.SetPrettyListing(LanguageName, originalValue);
}
}
protected void SendKeys(params object[] keys)
......
// 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 Roslyn.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities;
using Roslyn.VisualStudio.Test.Utilities.Input;
using Xunit;
namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class BasicAutomaticBraceCompletion : EditorTestFixture
{
protected override string LanguageName => LanguageNames.VisualBasic;
public BasicAutomaticBraceCompletion(VisualStudioInstanceFactory instanceFactory)
: base(instanceFactory, nameof(BasicAutomaticBraceCompletion))
{
}
[Fact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
public void Braces_InsertionAndTabCompleting()
{
SetUpEditor(@"
Class C
Sub Foo()
$$
End Sub
End Class");
SendKeys("Dim x = {");
VerifyCurrentLineText("Dim x = {$$}");
SendKeys(
"New Object",
VirtualKey.Escape,
VirtualKey.Tab);
VerifyCurrentLineText("Dim x = {New Object}$$");
}
}
}
// 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 Roslyn.VisualStudio.IntegrationTests;
using Microsoft.CodeAnalysis;
using Roslyn.VisualStudio.Test.Utilities;
using Xunit;
namespace Roslyn.VisualStudio.Basic.IntegrationTests
namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
{
[Collection(nameof(SharedIntegrationHostFixture))]
public class BasicBuild
......@@ -16,7 +16,7 @@ public BasicBuild(VisualStudioInstanceFactory instanceFactory)
_visualStudio = instanceFactory.GetNewOrUsedInstance();
_visualStudio.Instance.SolutionExplorer.CreateSolution(nameof(BasicBuild));
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ConsoleApplication, WellKnownLanguageNames.VisualBasic);
_visualStudio.Instance.SolutionExplorer.AddProject("TestProj", WellKnownProjectTemplates.ConsoleApplication, LanguageNames.VisualBasic);
}
[Fact]
......
......@@ -21,6 +21,7 @@
<Compile Include="CSharp\CSharpInteractiveDemo.cs" />
<Compile Include="EditorTestFixture.cs" />
<Compile Include="SharedIntegrationHostFixture.cs" />
<Compile Include="VisualBasic\BasicAutomaticBraceCompletion.cs" />
<Compile Include="VisualBasic\BasicBuild.cs" />
</ItemGroup>
<ItemGroup>
......@@ -30,6 +31,10 @@
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Compilers\Core\Portable\CodeAnalysis.csproj">
<Project>{1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}</Project>
<Name>CodeAnalysis</Name>
</ProjectReference>
<ProjectReference Include="..\..\Dependencies\xUnit.net\xUnit.net.csproj">
<Project>{8635cb8f-d210-41ed-b4ff-71502cdb475c}</Project>
<Name>xUnit.net</Name>
......
// 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.IO;
using Microsoft.CodeAnalysis;
namespace Roslyn.VisualStudio.Test.Utilities.InProcess
{
......@@ -92,10 +94,27 @@ public void OpenSolution(string path, bool saveExistingSolutionIfExists = false)
_fileName = path;
}
private static string ConvertLanguageName(string languageName)
{
const string CSharp = nameof(CSharp);
const string VisualBasic = nameof(VisualBasic);
switch (languageName)
{
case LanguageNames.CSharp:
return CSharp;
case LanguageNames.VisualBasic:
return VisualBasic;
default:
throw new ArgumentException($"{languageName} is not supported.", nameof(languageName));
}
}
public void AddProject(string projectName, string projectTemplate, string languageName)
{
var projectPath = Path.Combine(DirectoryName, projectName);
var projectTemplatePath = GetProjectTemplatePath(projectTemplate, languageName);
var projectTemplatePath = GetProjectTemplatePath(projectTemplate, ConvertLanguageName(languageName));
_solution.AddFromTemplate(projectTemplatePath, projectPath, projectName, Exclusive: false);
}
......
......@@ -3,7 +3,9 @@
using System;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Editor.Options;
using Microsoft.CodeAnalysis.Editor.Shared.Options;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.VisualStudio.LanguageServices;
using Microsoft.VisualStudio.Shell.Interop;
......@@ -42,6 +44,20 @@ public bool UseSuggestionMode
}
}
public bool IsPrettyListingOn(string languageName)
{
return _visualStudioWorkspace.Options.GetOption(FeatureOnOffOptions.PrettyListing, languageName);
}
public void SetPrettyListing(string languageName, bool value)
{
InvokeOnUIThread(() =>
{
_visualStudioWorkspace.Options = _visualStudioWorkspace.Options.WithChangedOption(
FeatureOnOffOptions.PrettyListing, languageName, value);
});
}
private static TestingOnly_WaitingService GetWaitingService()
{
return GetComponentModel().DefaultExportProvider.GetExport<TestingOnly_WaitingService>().Value;
......
......@@ -24,6 +24,16 @@ public bool UseSuggestionMode
}
}
public bool IsPrettyListingOn(string languageName)
{
return InProc.IsPrettyListingOn(languageName);
}
public void SetPrettyListing(string languageName, bool value)
{
InProc.SetPrettyListing(languageName, value);
}
public void WaitForAsyncOperations(string featuresToWaitFor, bool waitForWorkspaceFirst = true)
{
InProc.WaitForAsyncOperations(featuresToWaitFor, waitForWorkspaceFirst);
......
......@@ -47,7 +47,6 @@
</Compile>
<Compile Include="VisualStudioInstanceContext.cs" />
<Compile Include="VisualStudioInstanceFactory.cs" />
<Compile Include="WellKnownLanguageNames.cs" />
<Compile Include="OutOfProcess\CSharpInteractiveWindow_OutOfProc.cs" />
<Compile Include="OutOfProcess\Editor_OutOfProc.cs" />
<Compile Include="OutOfProcess\InteractiveWindow_OutOfProc.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.
namespace Roslyn.VisualStudio.Test.Utilities
{
public static class WellKnownLanguageNames
{
public const string CSharp = nameof(CSharp);
public const string VisualBasic = nameof(VisualBasic);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册