From 1fcc5cd608ac2fe1dfa6f2dcee7f6d61bcaaac67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Sun, 23 Apr 2023 09:50:20 +0200 Subject: [PATCH] fix: null-handling in Wrap-Method in factories for `IDirectoryInfo` or `IFileInfo` (#976) Fixes #975: When providing `null` as parameter to the implementations of `IFileInfoFactory` or `IDirectoryInfoFactory` return `null` instead of throwing an exception. --- .../MockDirectoryInfoFactory.cs | 5 +++++ .../MockFileInfoFactory.cs | 5 +++++ .../DirectoryInfoFactory.cs | 7 ++++++- .../FileInfoFactory.cs | 7 ++++++- .../MockDirectoryInfoFactoryTests.cs | 18 ++++++++++++++++++ .../MockFileInfoFactoryTests.cs | 10 ++++++++++ .../DirectoryInfoFactoryTests.cs | 18 ++++++++++++++++++ .../FileInfoFactoryTests.cs | 18 ++++++++++++++++++ 8 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs create mode 100644 tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoFactoryTests.cs create mode 100644 tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoFactoryTests.cs diff --git a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs index 71d5f6c5d..ba680b91b 100644 --- a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs +++ b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs @@ -33,6 +33,11 @@ public IDirectoryInfo New(string path) /// public IDirectoryInfo Wrap(DirectoryInfo directoryInfo) { + if (directoryInfo == null) + { + return null; + } + return new MockDirectoryInfo(mockFileSystem, directoryInfo.Name); } } diff --git a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs index 8e8adde3c..2d3129092 100644 --- a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs +++ b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs @@ -32,6 +32,11 @@ public IFileInfo New(string fileName) /// public IFileInfo Wrap(FileInfo fileInfo) { + if (fileInfo == null) + { + return null; + } + return new MockFileInfo(mockFileSystem, fileInfo.Name); } } diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs index 8b6967872..ed33f9eb3 100644 --- a/src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs +++ b/src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs @@ -28,10 +28,15 @@ public IDirectoryInfo New(string path) var realDirectoryInfo = new DirectoryInfo(path); return new DirectoryInfoWrapper(fileSystem, realDirectoryInfo); } - + /// public IDirectoryInfo Wrap(DirectoryInfo directoryInfo) { + if (directoryInfo == null) + { + return null; + } + return new DirectoryInfoWrapper(fileSystem, directoryInfo); } } diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs index 3f7add05f..a2f79ecc9 100644 --- a/src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs +++ b/src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs @@ -28,10 +28,15 @@ public IFileInfo New(string fileName) var realFileInfo = new FileInfo(fileName); return new FileInfoWrapper(fileSystem, realFileInfo); } - + /// public IFileInfo Wrap(FileInfo fileInfo) { + if (fileInfo == null) + { + return null; + } + return new FileInfoWrapper(fileSystem, fileInfo); } } diff --git a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs new file mode 100644 index 000000000..0c57e50cd --- /dev/null +++ b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; + +namespace System.IO.Abstractions.TestingHelpers.Tests +{ + [TestFixture] + public class MockDirectoryInfoFactoryTests + { + [Test] + public void MockDirectoryInfoFactory_Wrap_WithNull_ShouldReturnNull() + { + var fileSystem = new MockFileSystem(); + + var result = fileSystem.DirectoryInfo.Wrap(null); + + Assert.IsNull(result); + } + } +} diff --git a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs index 5b8b5bd7f..2f7655000 100644 --- a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs +++ b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs @@ -41,5 +41,15 @@ public void MockFileInfoFactory_New_ShouldReturnFileInfoForNonExistentFile() // Assert Assert.IsNotNull(result); } + + [Test] + public void MockFileInfoFactory_Wrap_WithNull_ShouldReturnNull() + { + var fileSystem = new MockFileSystem(); + + var result = fileSystem.FileInfo.Wrap(null); + + Assert.IsNull(result); + } } } \ No newline at end of file diff --git a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoFactoryTests.cs b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoFactoryTests.cs new file mode 100644 index 000000000..8531c41f6 --- /dev/null +++ b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoFactoryTests.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; + +namespace System.IO.Abstractions.Tests +{ + [TestFixture] + public class DirectoryInfoFactoryTests + { + [Test] + public void Wrap_WithNull_ShouldReturnNull() + { + var fileSystem = new FileSystem(); + + var result = fileSystem.DirectoryInfo.Wrap(null); + + Assert.IsNull(result); + } + } +} diff --git a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoFactoryTests.cs b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoFactoryTests.cs new file mode 100644 index 000000000..d91bbc439 --- /dev/null +++ b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoFactoryTests.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; + +namespace System.IO.Abstractions.Tests +{ + [TestFixture] + public class FileInfoFactoryTests + { + [Test] + public void Wrap_WithNull_ShouldReturnNull() + { + var fileSystem = new FileSystem(); + + var result = fileSystem.FileInfo.Wrap(null); + + Assert.IsNull(result); + } + } +}