From 207202e941e5659f67b3f6ea372960ff8fd26878 Mon Sep 17 00:00:00 2001 From: Masood Sujau Date: Fri, 11 Feb 2022 09:20:01 +1300 Subject: [PATCH 1/4] fix: make MockFile.Exists handle empty string --- .../MockFile.cs | 5 +++++ .../MockFileExistsTests.cs | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs index a6120d13e..006cf8bef 100644 --- a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs +++ b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs @@ -203,6 +203,11 @@ public override bool Exists(string path) return false; } + if (path.Length == 0) + { + return false; + } + var file = mockFileDataAccessor.GetFile(path); return file != null && !file.IsDirectory; } diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs index 3a4b37f1f..d11f78014 100644 --- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs +++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs @@ -88,6 +88,19 @@ public void MockFile_Exists_ShouldReturnFalseForNullPath() Assert.IsFalse(result); } + [Test] + public void MockFile_Exists_ShouldReturnFalseForEmptyStringPath() + { + // Arrange + var fileSystem = new MockFileSystem(); + + // Act + var result = fileSystem.File.Exists(string.Empty); + + // Assert + Assert.IsFalse(result); + } + [Test] public void MockFile_Exists_ShouldReturnFalseForDirectories() { From 9d2ec6ff6a7ff30b88400f7537f4e0109745e952 Mon Sep 17 00:00:00 2001 From: Masood Sujau Date: Wed, 16 Feb 2022 11:34:35 +1300 Subject: [PATCH 2/4] Added try catch block to exists to be inline with dotnet runtime --- .../MockFile.cs | 16 +++++++++++++--- .../MockFileExistsTests.cs | 13 +++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs index 006cf8bef..ef63645c5 100644 --- a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs +++ b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs @@ -203,13 +203,23 @@ public override bool Exists(string path) return false; } - if (path.Length == 0) + if (path.Trim() == string.Empty) { return false; } - var file = mockFileDataAccessor.GetFile(path); - return file != null && !file.IsDirectory; + try + { + mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path)); + + var file = mockFileDataAccessor.GetFile(path); + return file != null && !file.IsDirectory; + } + catch (ArgumentException) { } + catch (IOException) { } + catch (UnauthorizedAccessException) { } + + return false; } /// diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs index d11f78014..a622e7e2a 100644 --- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs +++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs @@ -101,6 +101,19 @@ public void MockFile_Exists_ShouldReturnFalseForEmptyStringPath() Assert.IsFalse(result); } + [Test] + public void MockFile_Exists_ShouldReturnFalseForInvalidCharactersInPath() + { + // Arrange + var fileSystem = new MockFileSystem(); + + // Act + var result = fileSystem.File.Exists(@"C:""*/:<>?|abc"); + + // Assert + Assert.IsFalse(result); + } + [Test] public void MockFile_Exists_ShouldReturnFalseForDirectories() { From e88a38c21dc0c7de738e39962cb5198fc7f30a1b Mon Sep 17 00:00:00 2001 From: Masood Sujau Date: Wed, 16 Feb 2022 20:38:37 +1300 Subject: [PATCH 3/4] Added NotSupportedException to catch block --- src/System.IO.Abstractions.TestingHelpers/MockFile.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs index ef63645c5..173af2207 100644 --- a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs +++ b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs @@ -216,6 +216,7 @@ public override bool Exists(string path) return file != null && !file.IsDirectory; } catch (ArgumentException) { } + catch (NotSupportedException) { } catch (IOException) { } catch (UnauthorizedAccessException) { } From 6e1a2815a1d057e37f5f545ecfce8ec7abf7acdd Mon Sep 17 00:00:00 2001 From: Masood Sujau Date: Thu, 17 Feb 2022 09:04:52 +1300 Subject: [PATCH 4/4] Added comments for unhandled exception --- src/System.IO.Abstractions.TestingHelpers/MockFile.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs index 173af2207..78155cdd2 100644 --- a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs +++ b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs @@ -208,6 +208,7 @@ public override bool Exists(string path) return false; } + //Not handling exceptions here so that mock behaviour is as similar as possible to System.IO.File.Exists (See #810) try { mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));