Skip to content

Commit 04abe02

Browse files
authored
fix: Propagate null values in Wrap* methods (#982)
When wrapping `FileSystemInfo`, `DirectoryInfo`, and `FileInfo`, null inputs will be correctly propagated. Prior to this change, the wrappers for all three of these types would throw exceptions: - `NullReferenceException` for `WrapFileSystemInfo` - `ArgumentNullException` for `WrapDirectoryInfo`/`WrapFileInfo` (thrown by `DirectoryInfoWrapper`/`FileInfoWrapper`) Basic unit tests were also added for these null cases. Fixes #981
1 parent 4a54927 commit 04abe02

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/TestableIO.System.IO.Abstractions.Wrappers/Converters.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ internal static FileInfoBase[] WrapFiles(this FileInfo[] input, IFileSystem file
2929

3030
private static FileSystemInfoBase WrapFileSystemInfo(IFileSystem fileSystem, FileSystemInfo item)
3131
{
32+
if (item is null)
33+
{
34+
return null;
35+
}
36+
3237
if (item is FileInfo fileInfo)
3338
{
3439
return WrapFileInfo(fileSystem, fileInfo);
@@ -47,8 +52,10 @@ private static FileSystemInfoBase WrapFileSystemInfo(IFileSystem fileSystem, Fil
4752
}
4853
}
4954

50-
private static FileInfoBase WrapFileInfo(IFileSystem fileSystem, FileInfo f) => new FileInfoWrapper(fileSystem, f);
55+
private static FileInfoBase WrapFileInfo(IFileSystem fileSystem, FileInfo f)
56+
=> f is null ? null : new FileInfoWrapper(fileSystem, f);
5157

52-
private static DirectoryInfoBase WrapDirectoryInfo(IFileSystem fileSystem, DirectoryInfo d) => new DirectoryInfoWrapper(fileSystem, d);
58+
private static DirectoryInfoBase WrapDirectoryInfo(IFileSystem fileSystem, DirectoryInfo d)
59+
=> d is null ? null : new DirectoryInfoWrapper(fileSystem, d);
5360
}
5461
}

tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/ConvertersTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using NUnit.Framework;
45

56
namespace System.IO.Abstractions.Tests
@@ -42,6 +43,7 @@ public void WrapFiles_with_IEnumerable_is_lazy()
4243

4344
Assert.DoesNotThrow(() => crashingFileInfos.WrapFiles(new FileSystem()));
4445
}
46+
4547
[Test]
4648
public void WrapDirectories_with_IEnumerable_is_lazy()
4749
{
@@ -50,5 +52,24 @@ public void WrapDirectories_with_IEnumerable_is_lazy()
5052
Assert.DoesNotThrow(() => crashingDirectoryInfos.WrapDirectories(new FileSystem()));
5153
}
5254

55+
[Test]
56+
public void WrapFileSystemInfo_handles_null_FileSystemInfo()
57+
{
58+
Assert.IsNull(Converters.WrapFileSystemInfo(null, new FileSystem()));
59+
}
60+
61+
[Test]
62+
public void WrapDirectories_handles_null_DirectoryInfo()
63+
{
64+
List<DirectoryInfo> directoryInfos = new() { null };
65+
Assert.IsNull(directoryInfos.WrapDirectories(new FileSystem()).Single());
66+
}
67+
68+
[Test]
69+
public void WrapFiles_handles_null_FileInfo()
70+
{
71+
List<FileInfo> fileInfos = new() { null };
72+
Assert.IsNull(fileInfos.WrapFiles(new FileSystem()).Single());
73+
}
5374
}
5475
}

0 commit comments

Comments
 (0)