Skip to content

Commit 9b2fc3b

Browse files
committed
Stop moving components into folders they are already in
The exception is moving into the project folder. This simply adds the explicit folder annotation.
1 parent 6b77f0a commit 9b2fc3b

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

Rubberduck.Refactorings/MoveToFolder/MoveToFolderRefactoringAction.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ public MoveToFolderRefactoringAction(
2222
public override void Refactor(MoveToFolderModel model, IRewriteSession rewriteSession)
2323
{
2424
var oldFolderAnnotation = model.Target.Annotations.FirstOrDefault(pta => pta.Annotation is FolderAnnotation);
25-
if (oldFolderAnnotation != null)
25+
if (oldFolderAnnotation == null)
2626
{
27-
UpdateFolderAnnotation(model, oldFolderAnnotation, rewriteSession);
27+
AddFolderAnnotation(model, rewriteSession);
2828
}
29-
else
29+
else if(!model.TargetFolder.Equals(model.Target.CustomFolder))
3030
{
31-
AddFolderAnnotation(model, rewriteSession);
31+
UpdateFolderAnnotation(model, oldFolderAnnotation, rewriteSession);
3232
}
3333
}
3434

RubberduckTests/Refactoring/MoveToFolder/MoveToFolderRefactoringActionTests.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.Refactorings;
88
using Rubberduck.Refactorings.MoveToFolder;
9+
using Rubberduck.VBEditor.SafeComWrappers;
10+
using RubberduckTests.Mocks;
911

1012
namespace RubberduckTests.Refactoring.MoveToFolder
1113
{
@@ -91,6 +93,62 @@ End Sub
9193
Assert.AreEqual(expectedCode, refactoredCode);
9294
}
9395

96+
[Test]
97+
[Category("Refactorings")]
98+
public void MoveToFolderBaseRefactoring_HasAnnotation_SameFolder_DoesNotDoAnything()
99+
{
100+
const string code = @"
101+
'@Folder(""MyOldFolder.MyOldSubfolder.SubSub"")
102+
Public Sub Foo()
103+
End Sub
104+
";
105+
const string expectedCode = code;
106+
Func<RubberduckParserState, MoveToFolderModel> modelBuilder = (state) =>
107+
{
108+
var module = state.DeclarationFinder
109+
.UserDeclarations(DeclarationType.ProceduralModule)
110+
.Single() as ModuleDeclaration;
111+
return new MoveToFolderModel(module, "MyOldFolder.MyOldSubfolder.SubSub");
112+
};
113+
114+
var refactoredCode = RefactoredCode(code, modelBuilder);
115+
116+
Assert.AreEqual(expectedCode, refactoredCode);
117+
}
118+
119+
[Test]
120+
[Category("Refactorings")]
121+
public void MoveToFolderBaseRefactoring_NoAnnotation_SameFolder_AddsAnnotation()
122+
{
123+
const string code = @"
124+
Public Sub Foo()
125+
End Sub
126+
";
127+
const string expectedCode = @"'@Folder ""TestProject""
128+
129+
Public Sub Foo()
130+
End Sub
131+
";
132+
Func<RubberduckParserState, MoveToFolderModel> modelBuilder = (state) =>
133+
{
134+
var module = state.DeclarationFinder
135+
.UserDeclarations(DeclarationType.ProceduralModule)
136+
.Single() as ModuleDeclaration;
137+
return new MoveToFolderModel(module, "TestProject");
138+
};
139+
140+
var vbe = new MockVbeBuilder()
141+
.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
142+
.AddComponent("TestModule", ComponentType.StandardModule, code)
143+
.AddProjectToVbeBuilder()
144+
.Build()
145+
.Object;
146+
147+
var refactoredCode = RefactoredCode(vbe, modelBuilder);
148+
149+
Assert.AreEqual(expectedCode, refactoredCode["TestModule"]);
150+
}
151+
94152
protected override IRefactoringAction<MoveToFolderModel> TestBaseRefactoring(RubberduckParserState state, IRewritingManager rewritingManager)
95153
{
96154
var annotationUpdater = new AnnotationUpdater();

0 commit comments

Comments
 (0)