Skip to content
Merged
1 change: 1 addition & 0 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
<FakeSignVersion>0.9.2</FakeSignVersion>
<HumanizerCoreVersion>2.14.1</HumanizerCoreVersion>
<ICSharpCodeDecompilerVersion>7.1.0.6543</ICSharpCodeDecompilerVersion>
<InputSimulatorPlusVersion>1.0.7</InputSimulatorPlusVersion>
<MicrosoftBuildLocatorVersion>1.4.1</MicrosoftBuildLocatorVersion>
<!--
SourceBuild will requires that all dependencies also be source buildable. We are referencing a
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.Extensibility.Testing;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Roslyn.Test.Utilities;
using Roslyn.VisualStudio.IntegrationTests;
using WindowsInput.Native;
using Xunit;

namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
Expand Down Expand Up @@ -492,7 +492,7 @@ static void Main(string[] args)

public class P2 { }", HangMitigatingCancellationToken);

await TestServices.Input.SendAsync(VirtualKey.Backspace, VirtualKey.Backspace, "Stream");
await TestServices.Input.SendAsync(VirtualKeyCode.BACK, VirtualKeyCode.BACK, "Stream");
await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
new[]
{
Expand Down Expand Up @@ -557,7 +557,7 @@ static void Main(string[] args)
}
}
}", HangMitigatingCancellationToken);
await TestServices.Input.SendAsync(VirtualKey.Backspace, VirtualKey.Backspace,
await TestServices.Input.SendAsync(VirtualKeyCode.BACK, VirtualKeyCode.BACK,
"Foober");
await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
new[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Roslyn.Test.Utilities;
using Roslyn.VisualStudio.IntegrationTests;
using WindowsInput.Native;
using Xunit;

namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
Expand Down Expand Up @@ -123,7 +123,7 @@ static void Main(string[] args)

await TestServices.Editor.ActivateAsync(HangMitigatingCancellationToken);
await TestServices.Editor.PlaceCaretAsync("aa = aa", charsOffset: -1, HangMitigatingCancellationToken);
await TestServices.Input.SendAsync(VirtualKey.Delete);
await TestServices.Input.SendAsync(VirtualKeyCode.DELETE);
await TestServices.ErrorList.ShowErrorListAsync(HangMitigatingCancellationToken);
expectedContents = new string[] { };
await TestServices.Workspace.WaitForAllAsyncOperationsAsync(new[] { FeatureAttribute.Workspace, FeatureAttribute.SolutionCrawler, FeatureAttribute.DiagnosticService, FeatureAttribute.ErrorSquiggles, FeatureAttribute.ErrorList }, HangMitigatingCancellationToken);
Expand Down Expand Up @@ -174,7 +174,7 @@ static void Main(string[] args)
// Assert the window title is Class1.cs, which also means the file has no unsaved changes
Assert.Equal("Class1.cs", await TestServices.Shell.GetActiveWindowCaptionAsync(HangMitigatingCancellationToken));

await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F4, ShiftState.Ctrl));
await TestServices.Input.SendAsync((VirtualKeyCode.F4, VirtualKeyCode.CONTROL));
await TestServices.ErrorList.ShowErrorListAsync(HangMitigatingCancellationToken);
await TestServices.Workspace.WaitForAllAsyncOperationsAsync(new[] { FeatureAttribute.Workspace, FeatureAttribute.SolutionCrawler, FeatureAttribute.DiagnosticService, FeatureAttribute.ErrorSquiggles, FeatureAttribute.ErrorList }, HangMitigatingCancellationToken);
actualContents = await TestServices.ErrorList.GetErrorsAsync(HangMitigatingCancellationToken);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Storage;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Microsoft.VisualStudio.LanguageServices;
using Microsoft.VisualStudio.Shell.TableControl;
using Microsoft.VisualStudio.Shell.TableManager;
using Roslyn.VisualStudio.IntegrationTests;
using WindowsInput.Native;
using Xunit;

namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
Expand Down Expand Up @@ -50,7 +50,7 @@ void M()
}
", HangMitigatingCancellationToken);

await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F12, ShiftState.Shift));
await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT));

var results = await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken);

Expand Down Expand Up @@ -96,7 +96,7 @@ static void Main()
}
", HangMitigatingCancellationToken);

await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F12, ShiftState.Shift));
await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT));

var results = await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken);

Expand Down Expand Up @@ -134,7 +134,7 @@ static void Main()
}
", HangMitigatingCancellationToken);

await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F12, ShiftState.Shift));
await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT));

var results = await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.VisualStudio.Extensibility.Testing;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Utilities;
using Roslyn.VisualStudio.IntegrationTests;
using WindowsInput.Native;
using Xunit;

namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
{
public class CSharpInheritanceMarginTests : AbstractEditorTest
{
protected override string LanguageName => LanguageNames.CSharp;

public CSharpInheritanceMarginTests()
: base(nameof(CSharpInheritanceMarginTests))
{
}

[IdeFact]
public async Task TestNavigateInSource()
{
var project = ProjectName;
await TestServices.InheritanceMargin.EnableOptionsAsync(LanguageName, cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.AddFileAsync(project, "Test.cs", cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.OpenFileAsync(project, "Test.cs", HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.SetTextAndEnsureGlyphsAppearAsync(
@"
interface IBar
{
}

class Implementation : IBar
{
}", expectedGlyphsNumberInMargin: 2, HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.ClickTheGlyphOnLine(2, HangMitigatingCancellationToken);

// Move focus to menu item of 'IBar', the destination is targeting 'class Implementation'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB);
// Navigate to the destination
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN);
await TestServices.EditorVerifier.TextContainsAsync(@"class Implementation$$", assertCaretPosition: true);
}

[IdeFact]
public async Task TestMultipleItemsOnSameLine()
{
var project = ProjectName;
await TestServices.InheritanceMargin.EnableOptionsAsync(LanguageName, cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.AddFileAsync(project, "Test.cs", cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.OpenFileAsync(project, "Test.cs", HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.SetTextAndEnsureGlyphsAppearAsync(
@"
using System;
interface IBar
{
event EventHandler e1, e2;
}

class Implementation : IBar
{
public event EventHandler e1, e2;
}", expectedGlyphsNumberInMargin: 4, HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.ClickTheGlyphOnLine(5, HangMitigatingCancellationToken);

// The context menu contains two members, e1 and e2.
// Move focus to menu item of 'event e1'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB);
// Expand the submenu
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN);
// Navigate to the implemention
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN);
await TestServices.EditorVerifier.TextContainsAsync(@"public event EventHandler e1$$, e2;", assertCaretPosition: true);
}

[IdeFact]
public async Task TestNavigateToMetadata()
{
var project = ProjectName;
await TestServices.InheritanceMargin.EnableOptionsAsync(LanguageName, cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.AddFileAsync(project, "Test.cs", cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.OpenFileAsync(project, "Test.cs", HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.SetTextAndEnsureGlyphsAppearAsync(
@"
using System.Collections;

class Implementation : IEnumerable
{
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}", expectedGlyphsNumberInMargin: 2, HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.ClickTheGlyphOnLine(4, HangMitigatingCancellationToken);

// Move focus to menu item of 'class Implementation'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB);
// Navigate to 'IEnumerable'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN);
await TestServices.EditorVerifier.TextContainsAsync(@"public interface IEnumerable$$", assertCaretPosition: true);

var document = await TestServices.Editor.GetActiveDocumentAsync(HangMitigatingCancellationToken);
RoslynDebug.AssertNotNull(document);
Assert.Equal(WorkspaceKind.MetadataAsSource, document.Project.Solution.Workspace.Kind);
}

[IdeFact]
public async Task TestNavigateToDifferentProjects()
{
await TestServices.InheritanceMargin.EnableOptionsAsync(LanguageNames.CSharp, cancellationToken: HangMitigatingCancellationToken);
await TestServices.InheritanceMargin.EnableOptionsAsync(LanguageNames.VisualBasic, cancellationToken: HangMitigatingCancellationToken);

var csharpProjectName = ProjectName;
var vbProjectName = "TestVBProject";
await TestServices.SolutionExplorer.AddProjectAsync(
vbProjectName, WellKnownProjectTemplates.VisualBasicNetStandardClassLibrary, LanguageNames.VisualBasic, cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.AddFileAsync(vbProjectName, "Test.vb", @"
Namespace MyNs
Public Interface IBar
End Interface
End Namespace");

await TestServices.SolutionExplorer.AddFileAsync(csharpProjectName, "Test.cs", cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.AddProjectReferenceAsync(csharpProjectName, vbProjectName, cancellationToken: HangMitigatingCancellationToken);
await TestServices.SolutionExplorer.OpenFileAsync(csharpProjectName, "Test.cs", HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.SetTextAndEnsureGlyphsAppearAsync(
@"
using TestVBProject.MyNs;

class Implementation : IBar
{
}", expectedGlyphsNumberInMargin: 1, HangMitigatingCancellationToken);

await TestServices.InheritanceMargin.ClickTheGlyphOnLine(4, HangMitigatingCancellationToken);

// Move focus to menu item of 'class Implementation'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB);
// Navigate to 'IBar'
await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN);
await TestServices.EditorVerifier.TextContainsAsync(@"Public Interface IBar$$", assertCaretPosition: true);

var document = await TestServices.Editor.GetActiveDocumentAsync(HangMitigatingCancellationToken);
RoslynDebug.AssertNotNull(document);
Assert.NotEqual(WorkspaceKind.MetadataAsSource, document.Project.Solution.Workspace.Kind);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Roslyn.VisualStudio.IntegrationTests;
using WindowsInput.Native;
using Xunit;

namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
Expand Down Expand Up @@ -39,7 +39,7 @@ await TestServices.SolutionExplorer.AddFileAsync(project, "test2.cs", open: true
", cancellationToken: HangMitigatingCancellationToken);

await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd12CmdID.NavigateTo, HangMitigatingCancellationToken);
await TestServices.Input.SendToNavigateToAsync("FirstMethod", VirtualKey.Enter);
await TestServices.Input.SendToNavigateToAsync("FirstMethod", VirtualKeyCode.RETURN);
await TestServices.Workarounds.WaitForNavigationAsync(HangMitigatingCancellationToken);
Assert.Equal($"test1.cs", await TestServices.Shell.GetActiveWindowCaptionAsync(HangMitigatingCancellationToken));
Assert.Equal("FirstMethod", await TestServices.Editor.GetSelectedTextAsync(HangMitigatingCancellationToken));
Expand All @@ -50,7 +50,7 @@ await TestServices.SolutionExplorer.AddFileAsync(project, "test2.cs", open: true
await TestServices.SolutionExplorer.AddFileAsync(vbProject, "vbfile.vb", open: true, cancellationToken: HangMitigatingCancellationToken);

await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd12CmdID.NavigateTo, HangMitigatingCancellationToken);
await TestServices.Input.SendToNavigateToAsync("FirstClass", VirtualKey.Enter);
await TestServices.Input.SendToNavigateToAsync("FirstClass", VirtualKeyCode.RETURN);
await TestServices.Workarounds.WaitForNavigationAsync(HangMitigatingCancellationToken);
Assert.Equal($"test1.cs", await TestServices.Shell.GetActiveWindowCaptionAsync(HangMitigatingCancellationToken));
Assert.Equal("FirstClass", await TestServices.Editor.GetSelectedTextAsync(HangMitigatingCancellationToken));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@
using Microsoft.CodeAnalysis.TestSourceGenerator;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Microsoft.VisualStudio.LanguageServices;
using Microsoft.VisualStudio.LanguageServices.Implementation;
using Microsoft.VisualStudio.LanguageServices.Telemetry;
using Microsoft.VisualStudio.Shell.TableControl;
using Roslyn.VisualStudio.IntegrationTests;
using Roslyn.VisualStudio.IntegrationTests.InProcess;
using WindowsInput.Native;
using Xunit;
using Xunit.Abstractions;

Expand Down Expand Up @@ -93,7 +91,7 @@ public static void Main()
Assert.Equal($"{HelloWorldGenerator.GeneratedEnglishClassName}.cs {ServicesVSResources.generated_suffix}", await TestServices.Shell.GetActiveWindowCaptionAsync(HangMitigatingCancellationToken));
}

await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F12, ShiftState.Shift));
await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT));

var results = (await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken)).OrderBy(r => r.GetLine()).ToArray();

Expand Down Expand Up @@ -135,7 +133,7 @@ public static void Main()
}", HangMitigatingCancellationToken);

await TestServices.Editor.PlaceCaretAsync(HelloWorldGenerator.GeneratedEnglishClassName, charsOffset: 0, HangMitigatingCancellationToken);
await TestServices.Input.SendAsync(new KeyPress(VirtualKey.F12, ShiftState.Shift));
await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT));

var results = await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken);
var referenceInGeneratedFile = results.Single(r => r.GetText()?.Contains("<summary>") ?? false);
Expand All @@ -151,7 +149,7 @@ public async Task InvokeNavigateToForGeneratedFile()
{
await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd12CmdID.NavigateTo, HangMitigatingCancellationToken);

await TestServices.Input.SendToNavigateToAsync(HelloWorldGenerator.GeneratedEnglishClassName, VirtualKey.Enter);
await TestServices.Input.SendToNavigateToAsync(HelloWorldGenerator.GeneratedEnglishClassName, VirtualKeyCode.RETURN);
await TestServices.Workarounds.WaitForNavigationAsync(HangMitigatingCancellationToken);

Assert.Equal($"{HelloWorldGenerator.GeneratedEnglishClassName}.cs [generated]", await TestServices.Shell.GetActiveWindowCaptionAsync(HangMitigatingCancellationToken));
Expand Down
Loading