Skip to content

Commit 12a06ee

Browse files
committed
Fix MoveToFolderRefactoringAction for folders containing double quotes
1 parent a4739d3 commit 12a06ee

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

Rubberduck.Refactorings/MoveToFolder/MoveToFolderRefactoringAction.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ private void UpdateFolderAnnotation(MoveToFolderModel model, IParseTreeAnnotatio
4747

4848
private static (IAnnotation annotation, IReadOnlyList<string> annotationArguments) NewAnnotation(string targetFolder)
4949
{
50+
var targetFolderLiteral = targetFolder
51+
.Replace("\"", "\"\"")
52+
.EnQuote();
53+
5054
var annotation = new FolderAnnotation();
51-
var annotationValues = new List<string> { targetFolder.EnQuote() };
55+
var annotationValues = new List<string> { targetFolderLiteral };
5256

5357
return (annotation, annotationValues);
5458
}

RubberduckTests/Refactoring/MoveToFolderTests.cs renamed to RubberduckTests/Refactoring/MoveToFolderRefactoringActionTests.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace RubberduckTests.Refactoring
1111
{
1212
[TestFixture]
13-
public class MoveToFolderTests : BaseRefactoringTestBase<MoveToFolderModel>
13+
public class MoveToFolderRefactoringActionTests : RefactoringActionTestBase<MoveToFolderModel>
1414
{
1515
[Test]
1616
[Category("Refactorings")]
@@ -65,6 +65,32 @@ End Sub
6565
Assert.AreEqual(expectedCode, refactoredCode);
6666
}
6767

68+
[Test]
69+
[Category("Refactorings")]
70+
public void MoveToFolderBaseRefactoring_NameContainingDoubleQuotes()
71+
{
72+
const string code = @"
73+
Public Sub Foo()
74+
End Sub
75+
";
76+
const string expectedCode = @"'@Folder ""MyNew""""Folder.My""""""""""""""""SubFolder""
77+
78+
Public Sub Foo()
79+
End Sub
80+
";
81+
Func<RubberduckParserState, MoveToFolderModel> modelBuilder = (state) =>
82+
{
83+
var module = state.DeclarationFinder
84+
.UserDeclarations(DeclarationType.ProceduralModule)
85+
.Single() as ModuleDeclaration;
86+
return new MoveToFolderModel(module, "MyNew\"Folder.My\"\"\"\"SubFolder");
87+
};
88+
89+
var refactoredCode = RefactoredCode(code, modelBuilder);
90+
91+
Assert.AreEqual(expectedCode, refactoredCode);
92+
}
93+
6894
protected override IRefactoringAction<MoveToFolderModel> TestBaseRefactoring(RubberduckParserState state, IRewritingManager rewritingManager)
6995
{
7096
var annotationUpdater = new AnnotationUpdater();

RubberduckTests/Refactoring/BaseRefactoringTestBase.cs renamed to RubberduckTests/Refactoring/RefactoringActionTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace RubberduckTests.Refactoring
1313
{
14-
public abstract class BaseRefactoringTestBase<TModel>
14+
public abstract class RefactoringActionTestBase<TModel>
1515
where TModel : class, IRefactoringModel
1616
{
1717

0 commit comments

Comments
 (0)