Skip to content

Commit

Permalink
Make individual empty subfolder names illegal in move (to) folder dia…
Browse files Browse the repository at this point in the history
…logs
  • Loading branch information
MDoerner committed Jun 1, 2020
1 parent 8252f74 commit 9e68b4d
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 14 deletions.
Expand Up @@ -68,11 +68,19 @@ private void ValidateFolder()

if (string.IsNullOrEmpty(NewFolder))
{
errors.Add(RubberduckUI.MoveFolders_EmptyName);
errors.Add(RubberduckUI.MoveFolders_EmptyFolderName);
}
else if (NewFolder.Any(char.IsControl))
else
{
errors.Add(RubberduckUI.MoveFolders_ControlCharacter);
if (NewFolder.Any(char.IsControl))
{
errors.Add(RubberduckUI.MoveFolders_ControlCharacter);
}

if (NewFolder.Split(FolderExtensions.FolderDelimiter).Any(string.IsNullOrEmpty))
{
errors.Add(RubberduckUI.MoveFolders_EmptySubfolderName);
}
}

if (errors.Any())
Expand Down
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Rubberduck.JunkDrawer.Extensions;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Resources;
using Rubberduck.Refactorings.MoveToFolder;
Expand Down Expand Up @@ -52,14 +53,22 @@ public string NewFolder
private void ValidateFolder()
{
var errors = new List<string>();

if (string.IsNullOrEmpty(NewFolder))
{
errors.Add(RubberduckUI.MoveFolders_EmptyName);
errors.Add(RubberduckUI.MoveFolders_EmptyFolderName);
}
else if (NewFolder.Any(char.IsControl))
else
{
errors.Add(RubberduckUI.MoveFolders_ControlCharacter);
if (NewFolder.Any(char.IsControl))
{
errors.Add(RubberduckUI.MoveFolders_ControlCharacter);
}

if (NewFolder.Split(FolderExtensions.FolderDelimiter).Any(string.IsNullOrEmpty))
{
errors.Add(RubberduckUI.MoveFolders_EmptySubfolderName);
}
}

if (errors.Any())
Expand Down
13 changes: 11 additions & 2 deletions Rubberduck.Resources/RubberduckUI.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Rubberduck.Resources/RubberduckUI.de.resx
Expand Up @@ -1697,10 +1697,13 @@ Wollen Sie fortfahren?</value>
<value>Mehrere Ordner mit demselben Namenfolders werden verschoben. Dies verschmilzt sie.
Wollen Sie fortfahren?</value>
</data>
<data name="MoveFolders_EmptyName" xml:space="preserve">
<data name="MoveFolders_EmptyFolderName" xml:space="preserve">
<value>Ordnernamen dürfen nicht leer sein.</value>
</data>
<data name="MoveFolders_ControlCharacter" xml:space="preserve">
<value>Ordnernamen dürfen keine Kontrollzeichen wie etwa Zeilenumbrüche enthalten.</value>
</data>
<data name="MoveFolders_EmptySubfolderName" xml:space="preserve">
<value>Die Namen individueller Unterordner dürfen nicht leer sein.</value>
</data>
</root>
5 changes: 4 additions & 1 deletion Rubberduck.Resources/RubberduckUI.resx
Expand Up @@ -1914,10 +1914,13 @@ Do you want to proceed?</value>
Do you want to proceed?</value>

</data>
<data name="MoveFolders_EmptyName" xml:space="preserve">
<data name="MoveFolders_EmptyFolderName" xml:space="preserve">
<value>A folder name cannot be empty.</value>
</data>
<data name="MoveFolders_ControlCharacter" xml:space="preserve">
<value>Folder names cannot contain control characters like e.g. new lines.</value>
</data>
<data name="MoveFolders_EmptySubfolderName" xml:space="preserve">
<value>The names of individual subfolders cannot be empty.</value>
</data>
</root>
Expand Up @@ -91,14 +91,33 @@ public void TargetFolderWithControlCharacter_Error(string folderName)

[Test]
[Category("Refactorings")]
public void NonEmptyTargetFolderWithoutControlCharacter_NoError()
[TestCase(".SomeFolder.SomeOtherFolder")]
[TestCase("SomeFolder..SomeOtherFolder")]
[TestCase("SomeFolder.SomeOtherFolder.")]
public void TargetFolderWithEmptyIndividualFolder_Error(string folderName)
{
using (var state = MockParser.CreateAndParse(TestVbe()))
{
var model = TestModel(new List<string> { "FooBar.Foo.Barr" }, state.DeclarationFinder);
var viewModel = TestViewModel(model, state, null);

viewModel.NewFolder = ";oehaha .adaiafa.a@#$^%&#@$&%%$%^$.ad3.1010101. . . . rqrq";
viewModel.NewFolder = folderName;

Assert.IsTrue(viewModel.HasErrors);
Assert.IsFalse(viewModel.IsValidFolder);
}
}

[Test]
[Category("Refactorings")]
public void TargetFolderWithoutEmptyPartsOrControlCharacter_NoError()
{
using (var state = MockParser.CreateAndParse(TestVbe()))
{
var model = TestModel(new List<string> { "FooBar.Foo.Barr" }, state.DeclarationFinder);
var viewModel = TestViewModel(model, state, null);

viewModel.NewFolder = ";oehaha .adaiafa.a@#$^%&#@$&%%$%^$.ad3.1010101. ## . @.{ ]. rqrq";

Assert.IsFalse(viewModel.HasErrors);
Assert.IsTrue(viewModel.IsValidFolder);
Expand Down
Expand Up @@ -82,6 +82,25 @@ public void TargetFolderWithControlCharacter_Error(string folderName)
}
}

[Test]
[Category("Refactorings")]
[TestCase(".SomeFolder.SomeOtherFolder")]
[TestCase("SomeFolder..SomeOtherFolder")]
[TestCase("SomeFolder.SomeOtherFolder.")]
public void TargetFolderWithEmptyIndividualFolder_Error(string folderName)
{
using (var state = MockParser.CreateAndParse(TestVbe()))
{
var model = TestModel("FooBar.Foo", state.DeclarationFinder);
var viewModel = TestViewModel(model);

viewModel.NewFolder = folderName;

Assert.IsTrue(viewModel.HasErrors);
Assert.IsFalse(viewModel.IsValidFolder);
}
}

[Test]
[Category("Refactorings")]
public void NonEmptyTargetFolderWithoutControlCharacter_NoError()
Expand All @@ -91,7 +110,7 @@ public void NonEmptyTargetFolderWithoutControlCharacter_NoError()
var model = TestModel("FooBar.Foo" , state.DeclarationFinder);
var viewModel = TestViewModel(model);

viewModel.NewFolder = ";oehaha .adaiafa.a@#$^%&#@$&%%$%^$.ad3.1010101. . . . rqrq";
viewModel.NewFolder = ";oehaha .adaiafa.a@#$^%&#@$&%%$%^$.ad3.1010101. ## . @.{ ]. rqrq";

Assert.IsFalse(viewModel.HasErrors);
Assert.IsTrue(viewModel.IsValidFolder);
Expand Down

0 comments on commit 9e68b4d

Please sign in to comment.