diff --git a/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj b/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
index 9c646cc69dda9eedb7241552b527fc7db432065f..c5c5244145ec81054c276d325bc08a79673ae6d5 100644
--- a/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
+++ b/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
@@ -158,7 +158,8 @@
-
+
+
diff --git a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e6ce4f18e686db46c4bdb3a9c189463dc276e428
--- /dev/null
+++ b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs
@@ -0,0 +1,43 @@
+// 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.Threading.Tasks;
+using Roslyn.Test.Utilities;
+using Xunit;
+
+namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeActions.MoveType
+{
+ public partial class MoveTypeTests : CSharpMoveTypeTestsBase
+ {
+ [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
+ public async Task SingleClassInFile_RenameFile()
+ {
+ var code =
+@"[||]class Class1 { }";
+
+ var expectedDocumentName = "Class1.cs";
+
+ await TestRenameFileToMatchTypeAsync(code, expectedDocumentName);
+ }
+
+ [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
+ public async Task TypeNameMatchesFileName_RenameFile()
+ {
+ // testworkspace creates files like test1.cs, test2.cs and so on..
+ // so type name matches filename here and rename file action should not be offered.
+ var code =
+@"[||]class test1 { }";
+
+ await TestRenameFileToMatchTypeAsync(code, expectedCodeAction: false);
+ }
+
+ [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
+ public async Task MoreThanOneTypeInFile_RenameFile()
+ {
+ var code =
+@"[||]class Class1 { }
+class Class2 { }";
+
+ await TestRenameFileToMatchTypeAsync(code, expectedCodeAction: false);
+ }
+ }
+}
diff --git a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.cs b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameType.cs
similarity index 74%
rename from src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.cs
rename to src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameType.cs
index f69ff0661429633dff6a9155d399637efcf45855..69852e922ed6f21cc9f8f704bf3ac724b98b5c01 100644
--- a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.cs
+++ b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameType.cs
@@ -9,41 +9,35 @@ namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeActions.MoveType
public partial class MoveTypeTests : CSharpMoveTypeTestsBase
{
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
- public async Task SingleClassInFile()
+ public async Task SingleClassInFile_RenameType()
{
var code =
@"[||]class Class1 { }";
- var expectedDocumentName = "Class1.cs";
-
- await TestRenameFileToMatchTypeAsync(code, expectedDocumentName);
-
var codeWithTypeRenamedToMatchFileName =
-@"class test1 { }";
+@"class [|test1|] { }";
await TestRenameTypeToMatchFileAsync(code, codeWithTypeRenamedToMatchFileName);
}
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
- public async Task TypeNameMatchesFileName()
+ public async Task TypeNameMatchesFileName_RenameType()
{
// testworkspace creates files like test1.cs, test2.cs and so on..
// so type name matches filename here and rename file action should not be offered.
var code =
@"[||]class test1 { }";
- await TestRenameFileToMatchTypeAsync(code, expectedCodeAction: false);
await TestRenameTypeToMatchFileAsync(code, expectedCodeAction: false);
}
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)]
- public async Task MoreThanOneTypeInFile()
+ public async Task MoreThanOneTypeInFile_RenameType()
{
var code =
@"[||]class Class1 { }
class Class2 { }";
- await TestRenameFileToMatchTypeAsync(code, expectedCodeAction: false);
await TestRenameTypeToMatchFileAsync(code, expectedCodeAction: false);
}
}
diff --git a/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs b/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs
index d5f706d629b4ff18314c634b7cf2b9672af5752f..a62a71c5478184eda3637d18e1906daa74840ba8 100644
--- a/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs
+++ b/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs
@@ -8,6 +8,7 @@
using Microsoft.CodeAnalysis.CodeRefactorings;
using Microsoft.CodeAnalysis.CodeRefactorings.MoveType;
using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions;
+using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.UnitTests;
using Roslyn.Test.Utilities;
using Xunit;
@@ -16,15 +17,8 @@ namespace Microsoft.CodeAnalysis.Editor.UnitTests.MoveType
{
public abstract class AbstractMoveTypeTest : AbstractCodeActionTest
{
- private const string SpanMarker = "[||]";
- private const string RenameFileCodeActionTitle = "Rename File";
- private const string RenameTypeCodeActionTitle = "Rename Type";
-
- private string StripSpanMarkers(string text)
- {
- var index = text.IndexOf(SpanMarker);
- return text.Remove(index, SpanMarker.Length);
- }
+ private string RenameFileCodeActionTitle = FeaturesResources.RenameFileTo_0;
+ private string RenameTypeCodeActionTitle = FeaturesResources.RenameTypeTo_0;
protected override CodeRefactoringProvider CreateCodeRefactoringProvider(Workspace workspace)
{
@@ -46,8 +40,14 @@ protected override CodeRefactoringProvider CreateCodeRefactoringProvider(Workspa
var documentId = workspace.Documents[0].Id;
var documentName = workspace.Documents[0].Name;
+ string expectedText;
+ TextSpan span;
+ MarkupTestFile.GetSpan(expectedCode, out expectedText, out span);
+
+ var codeActionTitle = string.Format(RenameTypeCodeActionTitle, expectedText.Substring(span.Start, span.Length));
+
var oldSolutionAndNewSolution = await TestOperationAsync(
- workspace, expectedCode, RenameTypeCodeActionTitle, compareTokens);
+ workspace, expectedText, codeActionTitle, compareTokens);
// the original source document does not exist in the new solution.
var newSolution = oldSolutionAndNewSolution.Item2;
@@ -82,11 +82,16 @@ protected override CodeRefactoringProvider CreateCodeRefactoringProvider(Workspa
Assert.True(expectedDocumentName != null, $"{nameof(expectedDocumentName)} should be present if {nameof(expectedCodeAction)} is true.");
var oldDocumentId = workspace.Documents[0].Id;
- var expectedText = StripSpanMarkers(originalCode);
+
+ string expectedText;
+ IList spans;
+ MarkupTestFile.GetSpans(originalCode, out expectedText, out spans);
+
+ var codeActionTitle = string.Format(RenameFileCodeActionTitle, expectedDocumentName);
// a new document with the same text as old document is added.
var oldSolutionAndNewSolution = await TestOperationAsync(
- workspace, expectedText, RenameFileCodeActionTitle, compareTokens);
+ workspace, expectedText, codeActionTitle, compareTokens);
// the original source document does not exist in the new solution.
var newSolution = oldSolutionAndNewSolution.Item2;
diff --git a/src/EditorFeatures/VisualBasicTest/BasicEditorServicesTest.vbproj b/src/EditorFeatures/VisualBasicTest/BasicEditorServicesTest.vbproj
index 98ead478d4a7eb24f4fb20bbd83766cfe591eb6f..e8db42558e6c1c996a24a81eeff9604bb8c11595 100644
--- a/src/EditorFeatures/VisualBasicTest/BasicEditorServicesTest.vbproj
+++ b/src/EditorFeatures/VisualBasicTest/BasicEditorServicesTest.vbproj
@@ -138,7 +138,8 @@
-
+
+
diff --git a/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFile.vb b/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFile.vb
new file mode 100644
index 0000000000000000000000000000000000000000..661dfbd6b6145ec5e98c1af1b2de9491e6015d82
--- /dev/null
+++ b/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFile.vb
@@ -0,0 +1,44 @@
+' 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 Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.CodeRefactorings.MoveType
+ Partial Public Class MoveTypeTests
+
+
+ Public Async Function SingleClassInFileWithNoContainerNamespace_RenameFile() As Task
+ Dim code =
+
+[||]Class Class1
+End Class
+
+ Dim expectedDocumentName = "Class1.vb"
+ Await TestRenameFileToMatchTypeAsync(code, expectedDocumentName)
+ End Function
+
+
+ Public Async Function TypeNameMatchesFileName_RenameFile() As Task
+ ' testworkspace creates files Like test1.cs, test2.cs And so on..
+ ' so type name matches filename here And rename file action should Not be offered.
+ Dim code =
+
+[||]Class test1
+End Class
+
+
+ Await TestRenameFileToMatchTypeAsync(code, expectedCodeAction:=False)
+ End Function
+
+
+ Public Async Function MoreThanOneTypeInFile_RenameFile() As Task
+ Dim code =
+
+[||]Class Class1
+End Class
+
+Class Class2
+End Class
+
+
+ Await TestRenameFileToMatchTypeAsync(code, expectedCodeAction:=False)
+ End Function
+ End Class
+End Namespace
diff --git a/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.vb b/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameType.vb
similarity index 75%
rename from src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.vb
rename to src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameType.vb
index f9115ba484a841b0616fe7e048b720c58e5a4bfd..cd48a6f12e307f5c234416dbe308e04e4800c856 100644
--- a/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameFileOrType.vb
+++ b/src/EditorFeatures/VisualBasicTest/CodeActions/MoveType/MoveTypeTests.RenameType.vb
@@ -4,19 +4,16 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.CodeRefactorings.M
Partial Public Class MoveTypeTests
- Public Async Function SingleClassInFileWithNoContainerNamespace() As Task
+ Public Async Function SingleClassInFileWithNoContainerNamespace_RenameType() As Task
Dim code =
[||]Class Class1
End Class
- Dim expectedDocumentName = "Class1.vb"
-
- Await TestRenameFileToMatchTypeAsync(code, expectedDocumentName)
Dim codeAfterRenamingType =
-Class test1
+Class [|test1|]
End Class
@@ -24,7 +21,7 @@ End Class
End Function
- Public Async Function TypeNameMatchesFileName() As Task
+ Public Async Function TypeNameMatchesFileName_RenameType() As Task
' testworkspace creates files Like test1.cs, test2.cs And so on..
' so type name matches filename here And rename file action should Not be offered.
Dim code =
@@ -33,12 +30,11 @@ End Class
End Class
- Await TestRenameFileToMatchTypeAsync(code, expectedCodeAction:=False)
Await TestRenameTypeToMatchFileAsync(code, expectedCodeAction:=False)
End Function
- Public Async Function MoreThanOneTypeInFile() As Task
+ Public Async Function MoreThanOneTypeInFile_RenameType() As Task
Dim code =
[||]Class Class1
@@ -48,7 +44,6 @@ Class Class2
End Class
- Await TestRenameFileToMatchTypeAsync(code, expectedCodeAction:=False)
Await TestRenameTypeToMatchFileAsync(code, expectedCodeAction:=False)
End Function
End Class