Browse Source

Fixed SD2-679. Attempting to create a directory in the project browser containing invalid characters, such as a backslash, will display an error message.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1095 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
149af8951d
  1. 3
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  2. 12
      src/Main/Base/Project/Src/Services/File/FileService.cs
  3. 16
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
  4. 1
      src/Main/Core/Test/ICSharpCode.Core.Tests.csproj
  5. 40
      src/Main/Core/Test/InvalidDirectoryNameTests.cs

3
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -474,6 +474,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -474,6 +474,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (!FileService.CheckFileName(newName)) {
return;
}
if (!FileService.CheckDirectoryName(newName)) {
return;
}
string oldText = Text;
Text = newName;
if (Directory != null) {

12
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -50,6 +50,18 @@ namespace ICSharpCode.Core @@ -50,6 +50,18 @@ namespace ICSharpCode.Core
return false;
}
/// <summary>
/// Checks that a single directory name is valid.
/// </summary>
/// <param name="name">A single directory name not the full path</param>
public static bool CheckDirectoryName(string name)
{
if (FileUtility.IsValidDirectoryName(name))
return true;
MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.SaveFile.InvalidFileNameError}", new string[,] {{"FileName", name}}));
return false;
}
class LoadFileWrapper
{
IDisplayBinding binding;

16
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -315,6 +315,22 @@ namespace ICSharpCode.Core @@ -315,6 +315,22 @@ namespace ICSharpCode.Core
Char.IsDigit(ch));
}
/// <summary>
/// Checks that a single directory name (not the full path) is valid.
/// </summary>
public static bool IsValidDirectoryName(string name)
{
if (!IsValidFileName(name)) {
return false;
}
if (name.IndexOfAny(new char[]{Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar}) >= 0) {
return false;
}
if (name.Trim(' ').Length == 0) {
return false;
}
return true;
}
public static bool TestFileExists(string filename)
{

1
src/Main/Core/Test/ICSharpCode.Core.Tests.csproj

@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
<Compile Include="StringParserTests.cs" />
<Compile Include="AddInTreeTests\AddInTreeLoadingTests.cs" />
<Compile Include="AddInTreeTests\ExtPathTests.cs" />
<Compile Include="InvalidDirectoryNameTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Project\ICSharpCode.Core.csproj">

40
src/Main/Core/Test/InvalidDirectoryNameTests.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using NUnit.Framework;
using System;
namespace ICSharpCode.Core.Tests
{
[TestFixture]
public class InvalidDirectoryNameTests
{
[Test]
public void ContainsBackslash()
{
Assert.IsFalse(FileUtility.IsValidDirectoryName(@"project\test"));
}
[Test]
public void ContainsForwardSlash()
{
Assert.IsFalse(FileUtility.IsValidDirectoryName(@"project/test"));
}
[Test]
public void IsPRN()
{
Assert.IsFalse(FileUtility.IsValidDirectoryName("PRN"));
}
[Test]
public void IsEmptySpace()
{
Assert.IsFalse(FileUtility.IsValidDirectoryName(" "));
}
}
}
Loading…
Cancel
Save