From 3a0fe2b1b22f36e459ca477b756bb273dd6d1c57 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 30 Jun 2009 09:45:30 +0000 Subject: [PATCH] FileUtility.IsValidPath(...) and additional directory tests (patch by Frederick Kautz) git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4374 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Services/FileUtility/FileUtility.cs | 8 + .../Core/Test/ICSharpCode.Core.Tests.csproj | 1 + .../Core/Test/InvalidDirectoryNameTests.cs | 216 ++++++++++++++++++ src/Main/Core/Test/ValidDirectoryNameTests.cs | 76 ++++++ 4 files changed, 301 insertions(+) create mode 100644 src/Main/Core/Test/ValidDirectoryNameTests.cs diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs index d837562929..8d81dacdea 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs @@ -372,6 +372,14 @@ namespace ICSharpCode.Core return false; } + if(fileName[fileName.Length-1] == ' ') { + return false; + } + + if(fileName[fileName.Length-1] == '.') { + return false; + } + // platform dependend : Check for invalid file names (DOS) // this routine checks for follwing bad file names : // CON, PRN, AUX, NUL, COM1-9 and LPT1-9 diff --git a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj index 450dae3f57..fce06e5645 100644 --- a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj +++ b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj @@ -49,6 +49,7 @@ + diff --git a/src/Main/Core/Test/InvalidDirectoryNameTests.cs b/src/Main/Core/Test/InvalidDirectoryNameTests.cs index 7855adc944..c1113b9b9d 100644 --- a/src/Main/Core/Test/InvalidDirectoryNameTests.cs +++ b/src/Main/Core/Test/InvalidDirectoryNameTests.cs @@ -36,5 +36,221 @@ namespace ICSharpCode.Core.Tests { Assert.IsFalse(FileUtility.IsValidDirectoryName(" ")); } + + [Test] + public void ContainsLessThan() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("projecttest")); + } + + [Test] + public void ContainsColon() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("project:test")); + } + + [Test] + public void ContainsDoubleQuote() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName(@"project""test")); + } + + [Test] + public void ContainsPipe() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("project|test")); + } + + [Test] + public void ContainsQuestionMark() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("project?test")); + } + + [Test] + public void ContainsStar() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("project*test")); + } + + [Test] + public void IntegerRepresentationBetween0And31() + { + for(int i=0; i<32; i++) + { + char testChar = (char)i; + string testString = string.Format("project{0}test", testChar); + Assert.IsFalse(FileUtility.IsValidDirectoryName(testString)); + } + } + + [Test] + public void ReservedDeviceNameCON() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("CON")); + } + + [Test] + public void ReservedDeviceNamePRN() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("PRN")); + } + + [Test] + public void ReservedDeviceNameAUX() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("AUX")); + } + + [Test] + public void ReservedDeviceNameNUL() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("NUL")); + } + + [Test] + public void ReservedDeviceNameCOM1() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM1")); + } + + [Test] + public void ReservedDeviceNameCOM2() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM2")); + } + + [Test] + public void ReservedDeviceNameCOM3() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM3")); + } + + [Test] + public void ReservedDeviceNameCOM4() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM4")); + } + + [Test] + public void ReservedDeviceNameCOM5() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM5")); + } + + [Test] + public void ReservedDeviceNameCOM6() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM6")); + } + + [Test] + public void ReservedDeviceNameCOM7() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM7")); + } + + [Test] + public void ReservedDeviceNameCOM8() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM8")); + } + + [Test] + public void ReservedDeviceNameCOM9() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("COM9")); + } + + [Test] + public void ReservedDeviceNameLPT1() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT1")); + } + + [Test] + public void ReservedDeviceNameLPT2() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT2")); + } + + [Test] + public void ReservedDeviceNameLPT3() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT3")); + } + + [Test] + public void ReservedDeviceNameLPT4() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT4")); + } + + [Test] + public void ReservedDeviceNameLPT5() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT5")); + } + + [Test] + public void ReservedDeviceNameLPT6() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT6")); + } + + [Test] + public void ReservedDeviceNameLPT7() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT7")); + } + + [Test] + public void ReservedDeviceNameLPT8() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT8")); + } + + [Test] + public void ReservedDeviceNameLPT9() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("LPT9")); + } + + [Test] + public void EndWithSpace() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("projecttest ")); + } + + [Test] + public void EndWithPeriod() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("projecttest.")); + } + + /// + /// Windows API defines the maximum length of a path to 260 characters. + /// However, Unicode extended-length path may have a limit of approximately 32,767 + /// characters. See Maximum Path Length for more information at + /// http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx + /// + [Test] + public void NameTooLong() + { + int MAX_LENGTH = 260; + System.Text.StringBuilder tempString = new System.Text.StringBuilder(""); + for(int i=0; i < MAX_LENGTH; i++) + { + tempString.Append('a'); + } + Assert.IsTrue(tempString.Length == MAX_LENGTH, "Failed to build a test directory string of {0} length.", MAX_LENGTH); + Assert.IsFalse(FileUtility.IsValidDirectoryName(tempString.ToString())); + } } } diff --git a/src/Main/Core/Test/ValidDirectoryNameTests.cs b/src/Main/Core/Test/ValidDirectoryNameTests.cs new file mode 100644 index 0000000000..d55371e1f4 --- /dev/null +++ b/src/Main/Core/Test/ValidDirectoryNameTests.cs @@ -0,0 +1,76 @@ +using NUnit.Framework; +using System; + +namespace ICSharpCode.Core.Tests +{ + [TestFixture] + public class ValidDirectoryNameTests + { + [Test] + public void ValidDirectoryNameProjectTest() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("projecttest")); + } + + [Test] + public void ValidDirectoryNameWithPeriod() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("project.test")); + } + + [Test] + public void ValidDirectoryNameWithTwoPeriodAtStart() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("..projecttest")); + } + + [Test] + public void ValidDirectoryNameCOM() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("COM")); + } + + [Test] + public void ValidDirectoryNameCOM10() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("COM10")); + } + + [Test] + public void ValidDirectoryNameLPT() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("LPT")); + } + + [Test] + public void ValidDirectoryNameLPT10() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("LPT10")); + } + + [Test] + public void ValidEightThreeDirectoryName() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("projec~1.est")); + } + + [Test] + public void SmallestDirectoryNameLength() + { + Assert.IsTrue(FileUtility.IsValidDirectoryName("a")); + } + + [Test] + public void LongestDirectoryNameLength() + { + // TODO: Determine what maximum length of directory should be. + int MAX_LENGTH = 259; + System.Text.StringBuilder tempString = new System.Text.StringBuilder(""); + for(int i=0; i < MAX_LENGTH; i++) + { + tempString.Append('a'); + } + Assert.IsTrue(FileUtility.IsValidDirectoryName(tempString.ToString())); + } + } +}