提交 80eb99eb 编写于 作者: A Andrew Casey

Merge pull request #5034 from amcasey/SupportsSuggestion

Disable refactorings in the Interactive window
...@@ -4,7 +4,11 @@ ...@@ -4,7 +4,11 @@
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Xml.Linq; using System.Xml.Linq;
using Microsoft.CodeAnalysis.Editor.CSharp.ChangeSignature;
using Microsoft.CodeAnalysis.Editor.Implementation.Interactive;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature; using Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Roslyn.Test.Utilities; using Roslyn.Test.Utilities;
using Xunit; using Xunit;
...@@ -257,5 +261,51 @@ void M() ...@@ -257,5 +261,51 @@ void M()
} }
} }
} }
[Fact]
[Trait(Traits.Feature, Traits.Features.ChangeSignature)]
[Trait(Traits.Feature, Traits.Features.Interactive)]
public void ChangeSignatureCommandDisabledInSubmission()
{
var exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(typeof(InteractiveDocumentSupportsCodeFixService)));
using (var workspace = TestWorkspaceFactory.CreateWorkspace(XElement.Parse(@"
<Workspace>
<Submission Language=""C#"" CommonReferences=""true"">
class C
{
void M$$(int x)
{
}
}
</Submission>
</Workspace> "),
workspaceKind: WorkspaceKind.Interactive,
exportProvider: exportProvider))
{
// Force initialization.
workspace.GetOpenDocumentIds().Select(id => workspace.GetTestDocument(id).GetTextView()).ToList();
var textView = workspace.Documents.Single().GetTextView();
var handler = new ChangeSignatureCommandHandler();
var delegatedToNext = false;
Func<CommandState> nextHandler = () =>
{
delegatedToNext = true;
return CommandState.Unavailable;
};
var state = handler.GetCommandState(new Commands.RemoveParametersCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
delegatedToNext = false;
state = handler.GetCommandState(new Commands.ReorderParametersCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
}
}
} }
} }
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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.Linq;
using System.Xml.Linq;
using Microsoft.CodeAnalysis.Editor.CSharp.EncapsulateField;
using Microsoft.CodeAnalysis.Editor.Implementation.Interactive;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.VisualStudio.Text.Operations;
using Roslyn.Test.Utilities; using Roslyn.Test.Utilities;
using Xunit; using Xunit;
...@@ -175,5 +183,44 @@ static void Main(string[] args) ...@@ -175,5 +183,44 @@ static void Main(string[] args)
state.AssertEncapsulateAs(expected); state.AssertEncapsulateAs(expected);
} }
} }
[Fact]
[Trait(Traits.Feature, Traits.Features.EncapsulateField)]
[Trait(Traits.Feature, Traits.Features.Interactive)]
public void EncapsulateFieldCommandDisabledInSubmission()
{
var exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(typeof(InteractiveDocumentSupportsCodeFixService)));
using (var workspace = TestWorkspaceFactory.CreateWorkspace(XElement.Parse(@"
<Workspace>
<Submission Language=""C#"" CommonReferences=""true"">
class C
{
object $$foo;
}
</Submission>
</Workspace> "),
workspaceKind: WorkspaceKind.Interactive,
exportProvider: exportProvider))
{
// Force initialization.
workspace.GetOpenDocumentIds().Select(id => workspace.GetTestDocument(id).GetTextView()).ToList();
var textView = workspace.Documents.Single().GetTextView();
var handler = new EncapsulateFieldCommandHandler(workspace.GetService<Host.IWaitIndicator>(), workspace.GetService<ITextBufferUndoManagerProvider>());
var delegatedToNext = false;
Func<CommandState> nextHandler = () =>
{
delegatedToNext = true;
return CommandState.Unavailable;
};
var state = handler.GetCommandState(new Commands.EncapsulateFieldCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
}
}
} }
} }
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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.Linq; using System.Linq;
using System.Threading; using System.Xml.Linq;
using Microsoft.CodeAnalysis.Editor.CSharp.ExtractInterface;
using Microsoft.CodeAnalysis.Editor.Implementation.Interactive;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.ExtractInterface; using Microsoft.CodeAnalysis.Editor.UnitTests.ExtractInterface;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.ExtractInterface; using Microsoft.CodeAnalysis.ExtractInterface;
using Roslyn.Test.Utilities; using Roslyn.Test.Utilities;
using Xunit; using Xunit;
...@@ -1047,5 +1052,44 @@ class $$Test<T, U> ...@@ -1047,5 +1052,44 @@ class $$Test<T, U>
var expectedTypeParameterSuffix = @"<T, U>"; var expectedTypeParameterSuffix = @"<T, U>";
TestExtractInterfaceCommandCSharp(markup, expectedSuccess: true, expectedTypeParameterSuffix: expectedTypeParameterSuffix); TestExtractInterfaceCommandCSharp(markup, expectedSuccess: true, expectedTypeParameterSuffix: expectedTypeParameterSuffix);
} }
[Fact]
[Trait(Traits.Feature, Traits.Features.ExtractInterface)]
[Trait(Traits.Feature, Traits.Features.Interactive)]
public void ExtractInterfaceCommandDisabledInSubmission()
{
var exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(typeof(InteractiveDocumentSupportsCodeFixService)));
using (var workspace = TestWorkspaceFactory.CreateWorkspace(XElement.Parse(@"
<Workspace>
<Submission Language=""C#"" CommonReferences=""true"">
public class $$C
{
public void M() { }
}
</Submission>
</Workspace> "),
workspaceKind: WorkspaceKind.Interactive,
exportProvider: exportProvider))
{
// Force initialization.
workspace.GetOpenDocumentIds().Select(id => workspace.GetTestDocument(id).GetTextView()).ToList();
var textView = workspace.Documents.Single().GetTextView();
var handler = new ExtractInterfaceCommandHandler();
var delegatedToNext = false;
Func<CommandState> nextHandler = () =>
{
delegatedToNext = true;
return CommandState.Unavailable;
};
var state = handler.GetCommandState(new Commands.ExtractInterfaceCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
}
}
} }
} }
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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.Linq;
using System.Threading; using System.Threading;
using System.Xml.Linq;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.ExtractMethod; using Microsoft.CodeAnalysis.CSharp.ExtractMethod;
using Microsoft.CodeAnalysis.Editor.CSharp.ExtractMethod;
using Microsoft.CodeAnalysis.Editor.Implementation.Interactive;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.ExtractMethod; using Microsoft.CodeAnalysis.ExtractMethod;
using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.Text.Operations;
using Roslyn.Test.Utilities; using Roslyn.Test.Utilities;
using Xunit; using Xunit;
...@@ -10221,6 +10229,46 @@ public void ExtractMethod_Argument2() ...@@ -10221,6 +10229,46 @@ public void ExtractMethod_Argument2()
service.ExtractMethodAsync(document, default(TextSpan)).Wait(); service.ExtractMethodAsync(document, default(TextSpan)).Wait();
} }
[Fact]
[Trait(Traits.Feature, Traits.Features.ExtractMethod)]
[Trait(Traits.Feature, Traits.Features.Interactive)]
public void ExtractMethodCommandDisabledInSubmission()
{
var exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(typeof(InteractiveDocumentSupportsCodeFixService)));
using (var workspace = TestWorkspaceFactory.CreateWorkspace(XElement.Parse(@"
<Workspace>
<Submission Language=""C#"" CommonReferences=""true"">
typeof(string).$$Name
</Submission>
</Workspace> "),
workspaceKind: WorkspaceKind.Interactive,
exportProvider: exportProvider))
{
// Force initialization.
workspace.GetOpenDocumentIds().Select(id => workspace.GetTestDocument(id).GetTextView()).ToList();
var textView = workspace.Documents.Single().GetTextView();
var handler = new ExtractMethodCommandHandler(
workspace.GetService<ITextBufferUndoManagerProvider>(),
workspace.GetService<IEditorOperationsFactoryService>(),
workspace.GetService<IInlineRenameService>(),
workspace.GetService<Host.IWaitIndicator>());
var delegatedToNext = false;
Func<CommandState> nextHandler = () =>
{
delegatedToNext = true;
return CommandState.Unavailable;
};
var state = handler.GetCommandState(new Commands.ExtractMethodCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
}
}
private CSharpParseOptions Interactive private CSharpParseOptions Interactive
{ {
get get
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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.Linq;
using System.Xml.Linq;
using Microsoft.CodeAnalysis.Editor.Implementation.Interactive;
using Microsoft.CodeAnalysis.Editor.Implementation.Organizing;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.Text.Operations;
using Roslyn.Test.Utilities; using Roslyn.Test.Utilities;
using Xunit; using Xunit;
...@@ -1062,5 +1070,59 @@ void B() ...@@ -1062,5 +1070,59 @@ void B()
}"; }";
Check(initial, final); Check(initial, final);
} }
[Fact]
[Trait(Traits.Feature, Traits.Features.Organizing)]
[Trait(Traits.Feature, Traits.Features.Interactive)]
public void OrganizingCommandsDisabledInSubmission()
{
var exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(typeof(InteractiveDocumentSupportsCodeFixService)));
using (var workspace = TestWorkspaceFactory.CreateWorkspace(XElement.Parse(@"
<Workspace>
<Submission Language=""C#"" CommonReferences=""true"">
class C
{
object $$foo;
}
</Submission>
</Workspace> "),
workspaceKind: WorkspaceKind.Interactive,
exportProvider: exportProvider))
{
// Force initialization.
workspace.GetOpenDocumentIds().Select(id => workspace.GetTestDocument(id).GetTextView()).ToList();
var textView = workspace.Documents.Single().GetTextView();
var handler = new OrganizeDocumentCommandHandler(workspace.GetService<Host.IWaitIndicator>());
var delegatedToNext = false;
Func<CommandState> nextHandler = () =>
{
delegatedToNext = true;
return CommandState.Unavailable;
};
var state = handler.GetCommandState(new Commands.SortImportsCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
delegatedToNext = false;
state = handler.GetCommandState(new Commands.SortAndRemoveUnnecessaryImportsCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
delegatedToNext = false;
state = handler.GetCommandState(new Commands.RemoveUnnecessaryImportsCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
delegatedToNext = false;
state = handler.GetCommandState(new Commands.OrganizeDocumentCommandArgs(textView, textView.TextBuffer), nextHandler);
Assert.True(delegatedToNext);
Assert.False(state.IsAvailable);
}
}
} }
} }
...@@ -37,6 +37,10 @@ ...@@ -37,6 +37,10 @@
<Project>{2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}</Project> <Project>{2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}</Project>
<Name>BasicCodeAnalysis</Name> <Name>BasicCodeAnalysis</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\Interactive\EditorFeatures\Core\InteractiveEditorFeatures.csproj">
<Project>{92412d1a-0f23-45b5-b196-58839c524917}</Project>
<Name>InteractiveEditorFeatures</Name>
</ProjectReference>
<ProjectReference Include="..\..\Test\Utilities\Desktop\TestUtilities.Desktop.csproj"> <ProjectReference Include="..\..\Test\Utilities\Desktop\TestUtilities.Desktop.csproj">
<Project>{76C6F005-C89D-4348-BB4A-391898DBEB52}</Project> <Project>{76C6F005-C89D-4348-BB4A-391898DBEB52}</Project>
<Name>TestUtilities.Desktop</Name> <Name>TestUtilities.Desktop</Name>
......
...@@ -4,6 +4,7 @@ Imports Microsoft.CodeAnalysis ...@@ -4,6 +4,7 @@ Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Editor.Commands Imports Microsoft.CodeAnalysis.Editor.Commands
Imports Microsoft.CodeAnalysis.Editor.Host Imports Microsoft.CodeAnalysis.Editor.Host
Imports Microsoft.CodeAnalysis.Editor.Implementation.InlineRename Imports Microsoft.CodeAnalysis.Editor.Implementation.InlineRename
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.Shared.Extensions Imports Microsoft.CodeAnalysis.Editor.Shared.Extensions
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Text.Shared.Extensions Imports Microsoft.CodeAnalysis.Text.Shared.Extensions
...@@ -43,6 +44,41 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Rename ...@@ -43,6 +44,41 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Rename
End Using End Using
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.Rename)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub RenameCommandDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="C#" CommonReferences="true">
object $$foo;
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = CreateCommandHandler(workspace)
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New RenameCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
<Fact> <Fact>
<Trait(Traits.Feature, Traits.Features.Rename)> <Trait(Traits.Feature, Traits.Features.Rename)>
Public Sub RenameCommandWithSelectionDoesNotSelect() Public Sub RenameCommandWithSelectionDoesNotSelect()
......
...@@ -93,6 +93,7 @@ public static class Features ...@@ -93,6 +93,7 @@ public static class Features
public const string F1Help = "F1Help"; public const string F1Help = "F1Help";
public const string Formatting = "Formatting"; public const string Formatting = "Formatting";
public const string GoToDefinition = "GoToDefinition"; public const string GoToDefinition = "GoToDefinition";
public const string Interactive = "Interactive";
public const string InteractiveHost = "InteractiveHost"; public const string InteractiveHost = "InteractiveHost";
public const string KeywordHighlighting = "KeywordHighlighting"; public const string KeywordHighlighting = "KeywordHighlighting";
public const string KeywordRecommending = "KeywordRecommending"; public const string KeywordRecommending = "KeywordRecommending";
......
...@@ -35,6 +35,10 @@ ...@@ -35,6 +35,10 @@
<Project>{2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}</Project> <Project>{2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}</Project>
<Name>BasicCodeAnalysis</Name> <Name>BasicCodeAnalysis</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\Interactive\EditorFeatures\Core\InteractiveEditorFeatures.csproj">
<Project>{92412d1a-0f23-45b5-b196-58839c524917}</Project>
<Name>InteractiveEditorFeatures</Name>
</ProjectReference>
<ProjectReference Include="..\..\Test\Utilities\Desktop\TestUtilities.Desktop.csproj"> <ProjectReference Include="..\..\Test\Utilities\Desktop\TestUtilities.Desktop.csproj">
<Project>{76C6F005-C89D-4348-BB4A-391898DBEB52}</Project> <Project>{76C6F005-C89D-4348-BB4A-391898DBEB52}</Project>
<Name>TestUtilities.Desktop</Name> <Name>TestUtilities.Desktop</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. ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature Imports Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.ChangeSignature
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ChangeSignature Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ChangeSignature
Partial Public Class ChangeSignatureTests Partial Public Class ChangeSignatureTests
...@@ -85,5 +89,48 @@ End Module ...@@ -85,5 +89,48 @@ End Module
TestChangeSignatureViaCommand(LanguageNames.VisualBasic, markup, updatedSignature:=permutation, expectedUpdatedInvocationDocumentCode:=updatedCode) TestChangeSignatureViaCommand(LanguageNames.VisualBasic, markup, updatedSignature:=permutation, expectedUpdatedInvocationDocumentCode:=updatedCode)
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.ChangeSignature)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub ChangeSignatureCommandDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="Visual Basic" CommonReferences="true">
Class C
Sub M$$(x As Integer)
End Sub
End Class
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = New ChangeSignatureCommandHandler()
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New Commands.ReorderParametersCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
delegatedToNext = False
state = handler.GetCommandState(New Commands.RemoveParametersCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
End Class End Class
End Namespace End Namespace
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.EncapsulateField
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests
Imports Microsoft.VisualStudio.Text.Operations
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.EncapsulateField Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.EncapsulateField
Public Class EncapsulateFieldCommandHandlerTests Public Class EncapsulateFieldCommandHandlerTests
...@@ -120,5 +125,42 @@ End Class ...@@ -120,5 +125,42 @@ End Class
state.AssertEncapsulateAs(expected) state.AssertEncapsulateAs(expected)
End Using End Using
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.EncapsulateField)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub EncapsulateFieldCommandDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="Visual Basic" CommonReferences="true">
Class C
Private $foo As Object
End Class
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = New EncapsulateFieldCommandHandler(workspace.GetService(Of Host.IWaitIndicator), workspace.GetService(Of ITextBufferUndoManagerProvider))
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New Commands.EncapsulateFieldCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
End Class End Class
End Namespace End Namespace
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions
Imports Microsoft.CodeAnalysis.Editor.UnitTests.ExtractInterface Imports Microsoft.CodeAnalysis.Editor.UnitTests.ExtractInterface
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.ExtractInterface
Imports Microsoft.CodeAnalysis.ExtractInterface Imports Microsoft.CodeAnalysis.ExtractInterface
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ExtractInterface Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ExtractInterface
...@@ -1249,6 +1252,44 @@ End Namespace ...@@ -1249,6 +1252,44 @@ End Namespace
rootNamespace:="RootNamespace") rootNamespace:="RootNamespace")
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.ExtractInterface)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub ExtractInterfaceCommandDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="Visual Basic" CommonReferences="true">
Public Class C
Public Sub M()
End Sub
End Class
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = New ExtractInterfaceCommandHandler()
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New Commands.ExtractInterfaceCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
Private Shared Sub TestTypeDiscovery(markup As String, typeDiscoveryRule As TypeDiscoveryRule, expectedExtractable As Boolean) Private Shared Sub TestTypeDiscovery(markup As String, typeDiscoveryRule As TypeDiscoveryRule, expectedExtractable As Boolean)
Using testState = New ExtractInterfaceTestState(markup, LanguageNames.VisualBasic, compilationOptions:=Nothing) Using testState = New ExtractInterfaceTestState(markup, LanguageNames.VisualBasic, compilationOptions:=Nothing)
Dim result = testState.GetTypeAnalysisResult(typeDiscoveryRule) Dim result = testState.GetTypeAnalysisResult(typeDiscoveryRule)
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.ExtractMethod
Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.VisualStudio.Text.Operations
Imports Roslyn.Test.Utilities Imports Roslyn.Test.Utilities
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ExtractMethod Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.ExtractMethod
...@@ -3358,6 +3363,45 @@ End Namespace" ...@@ -3358,6 +3363,45 @@ End Namespace"
TestExtractMethod(code, expected) TestExtractMethod(code, expected)
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.ExtractMethod)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub ExtractMethodCommandDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="Visual Basic" CommonReferences="true">
GetType(String).$$Name
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = New ExtractMethodCommandHandler(
workspace.GetService(Of ITextBufferUndoManagerProvider)(),
workspace.GetService(Of IEditorOperationsFactoryService)(),
workspace.GetService(Of IInlineRenameService)(),
workspace.GetService(Of Host.IWaitIndicator)())
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New Commands.ExtractMethodCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
End Class End Class
End Class End Class
End Namespace End Namespace
\ No newline at end of file
...@@ -5,6 +5,10 @@ Imports System.Collections.Generic ...@@ -5,6 +5,10 @@ Imports System.Collections.Generic
Imports System.Linq Imports System.Linq
Imports System.Text Imports System.Text
Imports System.Threading Imports System.Threading
Imports Microsoft.CodeAnalysis.Editor.Implementation.Interactive
Imports Microsoft.CodeAnalysis.Editor.Implementation.Organizing
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax Imports Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
Imports Roslyn.Test.EditorUtilities Imports Roslyn.Test.EditorUtilities
...@@ -939,5 +943,57 @@ End Namespace</element> ...@@ -939,5 +943,57 @@ End Namespace</element>
End Namespace</element> End Namespace</element>
Check(initial, final) Check(initial, final)
End Sub End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.Organizing)>
<Trait(Traits.Feature, Traits.Features.Interactive)>
Public Sub OrganizingCommandsDisabledInSubmission()
Dim exportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(GetType(InteractiveDocumentSupportsCodeFixService)))
Using workspace = TestWorkspaceFactory.CreateWorkspace(
<Workspace>
<Submission Language="Visual Basic" CommonReferences="true">
Class C
Private $foo As Object
End Class
</Submission>
</Workspace>,
workspaceKind:=WorkspaceKind.Interactive,
exportProvider:=exportProvider)
' Force initialization.
workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
Dim textView = workspace.Documents.Single().GetTextView()
Dim handler = New OrganizeDocumentCommandHandler(workspace.GetService(Of Host.IWaitIndicator))
Dim delegatedToNext = False
Dim nextHandler =
Function()
delegatedToNext = True
Return CommandState.Unavailable
End Function
Dim state = handler.GetCommandState(New Commands.SortImportsCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
delegatedToNext = False
state = handler.GetCommandState(New Commands.SortAndRemoveUnnecessaryImportsCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
delegatedToNext = False
state = handler.GetCommandState(New Commands.RemoveUnnecessaryImportsCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
delegatedToNext = False
state = handler.GetCommandState(New Commands.OrganizeDocumentCommandArgs(textView, textView.TextBuffer), nextHandler)
Assert.True(delegatedToNext)
Assert.False(state.IsAvailable)
End Using
End Sub
End Class End Class
End Namespace End Namespace
// 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.Composition;
using Microsoft.CodeAnalysis.Editor.Shared.SuggestionSupport;
using Microsoft.CodeAnalysis.Host.Mef;
namespace Microsoft.CodeAnalysis.Editor.Implementation.Interactive
{
[ExportWorkspaceService(typeof(IDocumentSupportsSuggestionService), WorkspaceKind.Interactive), Shared]
internal sealed class InteractiveDocumentSupportsCodeFixService : IDocumentSupportsSuggestionService
{
public bool SupportsCodeFixes(Document document)
{
return false;
}
public bool SupportsRefactorings(Document document)
{
return false;
}
public bool SupportsRename(Document document)
{
return false;
}
}
}
...@@ -142,6 +142,7 @@ ...@@ -142,6 +142,7 @@
<Compile Include="Implementation\Interactive\InteractiveWorkspace.cs" /> <Compile Include="Implementation\Interactive\InteractiveWorkspace.cs" />
<Compile Include="Implementation\Interactive\LoadCommandCompletionProvider.ItemRules.cs" /> <Compile Include="Implementation\Interactive\LoadCommandCompletionProvider.ItemRules.cs" />
<Compile Include="Implementation\Interactive\LoadCommandCompletionProvider.cs" /> <Compile Include="Implementation\Interactive\LoadCommandCompletionProvider.cs" />
<Compile Include="Implementation\Interactive\InteractiveDocumentSupportsSuggestionService.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="project.json" /> <None Include="project.json" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册