From 380f0c7f9c458b57ac27dc11e31bddfbc6d42770 Mon Sep 17 00:00:00 2001 From: Samuel de Santis Date: Wed, 5 Jun 2019 16:36:12 +0200 Subject: [PATCH 1/5] Fixes an issue with trailing spaces on directory path for Windows platform. On Windows, trailing spaces are automatically removed from directory name. --- .../MockDirectoryInfoTests.cs | 17 +++++++++++++++++ .../MockDirectoryTests.cs | 14 ++++++++++++++ .../MockDirectory.cs | 2 +- .../MockDirectoryInfo.cs | 4 +++- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs index 0fcb8bfb1..a95d0b053 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs @@ -239,6 +239,7 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedUNCPath(string dire [TestCase(@"c:\temp\\folder", @"c:\temp\folder")] [TestCase(@"c:\temp//folder", @"c:\temp\folder")] [TestCase(@"c:\temp//\\///folder", @"c:\temp\folder")] + [TestCase(@"c:\temp\folder ", @"c:\temp\folder")] public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directoryPath, string expectedFullName) { // Arrange @@ -254,6 +255,22 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directo Assert.AreEqual(expectedFullName, actualFullName); } + [TestCase(@"c:\temp\\folder ", @"folder")] + [WindowsOnly(WindowsSpecifics.Drives)] + public void MockDirectoryInfo_Name_ShouldReturnNormalizedName(string directoryPath, string expectedName) + { + // Arrange + directoryPath = XFS.Path(directoryPath); + var fileSystem = new MockFileSystem(new Dictionary()); + var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); + + // Act + var actualName = directoryInfo.Name; + + // Assert + Assert.AreEqual(expectedName, actualName); + } + [Test] public void MockDirectoryInfo_Constructor_ShouldThrowArgumentNullException_IfArgumentDirectoryIsNull() { diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs index 7b3372b63..5cb8a1e28 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs @@ -523,6 +523,20 @@ public void MockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBase() Assert.IsNotNull(result); } + [Test] + [WindowsOnly(WindowsSpecifics.Drives)] + public void MockDirectory_CreateDirectory_ShouldTrimTrailingSpaces() + { + // Arrange + var fileSystem = new MockFileSystem(); + + // Act + fileSystem.Directory.CreateDirectory(XFS.Path(@"c:\temp\folder ")); + + // Assert + Assert.IsTrue(fileSystem.Directory.Exists(XFS.Path(@"c:\temp\folder"))); + } + [Test] public void MockDirectory_CreMockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBaseWhenDirectoryExists() { diff --git a/System.IO.Abstractions.TestingHelpers/MockDirectory.cs b/System.IO.Abstractions.TestingHelpers/MockDirectory.cs index cffef30ab..e1a701d62 100644 --- a/System.IO.Abstractions.TestingHelpers/MockDirectory.cs +++ b/System.IO.Abstractions.TestingHelpers/MockDirectory.cs @@ -49,7 +49,7 @@ private IDirectoryInfo CreateDirectoryInternal(string path, DirectorySecurity di throw new ArgumentException(StringResources.Manager.GetString("PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE"), "path"); } - path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes(); + path = XFS.IsWindowsPlatform() ? mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes().TrimEnd(' ') : mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes(); if (!Exists(path)) { diff --git a/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs b/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs index ac6c94ad4..756f54aef 100644 --- a/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs +++ b/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs @@ -4,6 +4,8 @@ namespace System.IO.Abstractions.TestingHelpers { + using XFS = MockUnixSupport; + [Serializable] public class MockDirectoryInfo : DirectoryInfoBase { @@ -24,7 +26,7 @@ public MockDirectoryInfo(IMockFileDataAccessor mockFileDataAccessor, string dire originalPath = directoryPath; directoryPath = mockFileDataAccessor.Path.GetFullPath(directoryPath); - this.directoryPath = directoryPath.TrimSlashes(); + this.directoryPath = XFS.IsWindowsPlatform() ? directoryPath.TrimSlashes().TrimEnd(' ') : directoryPath.TrimSlashes(); } public override void Delete() From b6e1cdf4d133a82fdd84810b4fc524b3b120f07a Mon Sep 17 00:00:00 2001 From: Samuel de Santis Date: Wed, 5 Jun 2019 17:05:12 +0200 Subject: [PATCH 2/5] Fixes unit tests for Unix platform. --- .../MockDirectoryInfoTests.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs index a95d0b053..54141ccf4 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs @@ -239,7 +239,6 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedUNCPath(string dire [TestCase(@"c:\temp\\folder", @"c:\temp\folder")] [TestCase(@"c:\temp//folder", @"c:\temp\folder")] [TestCase(@"c:\temp//\\///folder", @"c:\temp\folder")] - [TestCase(@"c:\temp\folder ", @"c:\temp\folder")] public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directoryPath, string expectedFullName) { // Arrange @@ -255,9 +254,25 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directo Assert.AreEqual(expectedFullName, actualFullName); } + [TestCase(@"c:\temp\folder ", @"c:\temp\folder")] + [WindowsOnly(WindowsSpecifics.Drives)] + public void MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces(string directoryPath, string expectedFullName) + { + // Arrange + directoryPath = XFS.Path(directoryPath); + var fileSystem = new MockFileSystem(new Dictionary()); + var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); + + // Act + var actualFullName = directoryInfo.FullName; + + // Assert + Assert.AreEqual(expectedFullName, actualFullName); + } + [TestCase(@"c:\temp\\folder ", @"folder")] [WindowsOnly(WindowsSpecifics.Drives)] - public void MockDirectoryInfo_Name_ShouldReturnNormalizedName(string directoryPath, string expectedName) + public void MockDirectoryInfo_Name_ShouldReturnNameWithTrimmedTrailingSpaces(string directoryPath, string expectedName) { // Arrange directoryPath = XFS.Path(directoryPath); From 5e594c419dac755470da02c98bf7b029259e4d72 Mon Sep 17 00:00:00 2001 From: Samuel de Santis Date: Thu, 6 Jun 2019 10:49:15 +0200 Subject: [PATCH 3/5] Removes unnecessary call to XFS.Path method. --- .../MockDirectoryInfoTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs index 54141ccf4..36ddd8c4e 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs @@ -259,7 +259,6 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directo public void MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces(string directoryPath, string expectedFullName) { // Arrange - directoryPath = XFS.Path(directoryPath); var fileSystem = new MockFileSystem(new Dictionary()); var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); @@ -275,7 +274,6 @@ public void MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces public void MockDirectoryInfo_Name_ShouldReturnNameWithTrimmedTrailingSpaces(string directoryPath, string expectedName) { // Arrange - directoryPath = XFS.Path(directoryPath); var fileSystem = new MockFileSystem(new Dictionary()); var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); From b63525edcb31bd6ac745e0270005cffb3cd56922 Mon Sep 17 00:00:00 2001 From: Samuel de Santis Date: Fri, 7 Jun 2019 17:09:31 +0200 Subject: [PATCH 4/5] Removed unnecessary code --- .../MockDirectoryInfoTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs index 36ddd8c4e..330c8f40b 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs @@ -259,7 +259,7 @@ public void MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directo public void MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces(string directoryPath, string expectedFullName) { // Arrange - var fileSystem = new MockFileSystem(new Dictionary()); + var fileSystem = new MockFileSystem(); var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); // Act @@ -274,7 +274,7 @@ public void MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces public void MockDirectoryInfo_Name_ShouldReturnNameWithTrimmedTrailingSpaces(string directoryPath, string expectedName) { // Arrange - var fileSystem = new MockFileSystem(new Dictionary()); + var fileSystem = new MockFileSystem(); var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath); // Act From 5f8fd14d822a11773243831e59739684c7b0bbdf Mon Sep 17 00:00:00 2001 From: Samuel de Santis Date: Fri, 7 Jun 2019 17:12:39 +0200 Subject: [PATCH 5/5] Reduce small duplicate of code --- System.IO.Abstractions.TestingHelpers/MockDirectory.cs | 6 +++++- System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers/MockDirectory.cs b/System.IO.Abstractions.TestingHelpers/MockDirectory.cs index e1a701d62..eb71319c5 100644 --- a/System.IO.Abstractions.TestingHelpers/MockDirectory.cs +++ b/System.IO.Abstractions.TestingHelpers/MockDirectory.cs @@ -49,7 +49,11 @@ private IDirectoryInfo CreateDirectoryInternal(string path, DirectorySecurity di throw new ArgumentException(StringResources.Manager.GetString("PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE"), "path"); } - path = XFS.IsWindowsPlatform() ? mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes().TrimEnd(' ') : mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes(); + path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes(); + if (XFS.IsWindowsPlatform()) + { + path = path.TrimEnd(' '); + } if (!Exists(path)) { diff --git a/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs b/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs index 756f54aef..9518f8eac 100644 --- a/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs +++ b/System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs @@ -26,7 +26,12 @@ public MockDirectoryInfo(IMockFileDataAccessor mockFileDataAccessor, string dire originalPath = directoryPath; directoryPath = mockFileDataAccessor.Path.GetFullPath(directoryPath); - this.directoryPath = XFS.IsWindowsPlatform() ? directoryPath.TrimSlashes().TrimEnd(' ') : directoryPath.TrimSlashes(); + directoryPath = directoryPath.TrimSlashes(); + if (XFS.IsWindowsPlatform()) + { + directoryPath = directoryPath.TrimEnd(' '); + } + this.directoryPath = directoryPath; } public override void Delete()