From add652cc920d9cd24852b29aac9e9fd7bfdae870 Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Tue, 27 Sep 2016 13:02:21 -0700 Subject: [PATCH] MoveFile moves existing file to root of project when renaming them. --- .../MoveType/MoveTypeTests.MoveToNewFile.cs | 2 +- .../MoveType/MoveTypeTests.RenameFile.cs | 22 +++++++++++++++++++ .../Test/MoveType/AbstractMoveTypeTest.cs | 9 +++++++- ...bstractMoveTypeService.RenameFileEditor.cs | 9 ++++---- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.MoveToNewFile.cs b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.MoveToNewFile.cs index 69a6613dd6a..6e8e647dd53 100644 --- a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.MoveToNewFile.cs +++ b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.MoveToNewFile.cs @@ -54,7 +54,7 @@ class Class2 { }"; [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)] [WorkItem(14008, "https://github.com/dotnet/roslyn/issues/14008")] - public async Task TestFolders() + public async Task TestMoveToNewFileWithFolders() { var code = @" diff --git a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs index 89eebad96df..671ce88fc3a 100644 --- a/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs +++ b/src/EditorFeatures/CSharpTest/CodeActions/MoveType/MoveTypeTests.RenameFile.cs @@ -33,6 +33,28 @@ class Inner { } await TestRenameFileToMatchTypeAsync(code, expectedDocumentName); } + [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)] + public async Task TestRenameFileWithFolders() + { + var code = +@" + + + +[||]class Class1 +{ + class Inner { } +} + + +"; + + var expectedDocumentName = "Class1.cs"; + + await TestRenameFileToMatchTypeAsync(code, expectedDocumentName, + destinationDocumentContainers: new[] { "A", "B" }); + } + [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsMoveType)] public async Task TestMissing_TypeNameMatchesFileName_RenameFile() { diff --git a/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs b/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs index 2f20d8b1538..d04d7480fe2 100644 --- a/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs +++ b/src/EditorFeatures/Test/MoveType/AbstractMoveTypeTest.cs @@ -73,7 +73,8 @@ protected override CodeRefactoringProvider CreateCodeRefactoringProvider(Workspa string originalCode, string expectedDocumentName = null, bool expectedCodeAction = true, - bool compareTokens = true) + bool compareTokens = true, + IList destinationDocumentContainers = null) { using (var workspace = await CreateWorkspaceFromFileAsync(originalCode, parseOptions: null, compilationOptions: null)) { @@ -96,6 +97,12 @@ protected override CodeRefactoringProvider CreateCodeRefactoringProvider(Workspa // the original source document does not exist in the new solution. var newSolution = oldSolutionAndNewSolution.Item2; Assert.Null(newSolution.GetDocument(oldDocumentId)); + + if (destinationDocumentContainers != null) + { + var newDocument = newSolution.Projects.First().Documents.First(); + Assert.Equal(destinationDocumentContainers, newDocument.Folders); + } } else { diff --git a/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs b/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs index 40ed8cb6f3d..55ec00c0d0b 100644 --- a/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs +++ b/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs @@ -26,16 +26,17 @@ internal override Task> GetOperationsAsync() /// private IEnumerable RenameFileToMatchTypeName() { - var solution = SemanticDocument.Document.Project.Solution; + var oldDocument = SemanticDocument.Document; + var solution = oldDocument.Project.Solution; var text = SemanticDocument.Text; - var oldDocumentId = SemanticDocument.Document.Id; - var newDocumentId = DocumentId.CreateNewId(SemanticDocument.Document.Project.Id, FileName); + var oldDocumentId = oldDocument.Id; + var newDocumentId = DocumentId.CreateNewId(oldDocument.Project.Id, FileName); // currently, document rename is accomplished by a remove followed by an add. // the workspace takes care of resolving conflicts if the document name is not unique in the project // by adding numeric suffixes to the new document being added. var newSolution = solution.RemoveDocument(oldDocumentId); - newSolution = newSolution.AddDocument(newDocumentId, FileName, text); + newSolution = newSolution.AddDocument(newDocumentId, FileName, text, oldDocument.Folders); return new CodeActionOperation[] { -- GitLab