From f97604d32f1eb7e0b33e5a99eab1f3e97558ccb9 Mon Sep 17 00:00:00 2001 From: Luigi Grilli Date: Sun, 8 Aug 2021 12:05:05 +0100 Subject: [PATCH] Adding 'SubDirectory' and 'File' extension method to IDirectoryInfo --- .../IDirectoryInfoExtensions.cs | 27 ++++++++ .../DirectoryInfoExtensionsTests.cs | 61 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/System.IO.Abstractions/IDirectoryInfoExtensions.cs create mode 100644 tests/System.IO.Abstractions.Tests/DirectoryInfoExtensionsTests.cs diff --git a/src/System.IO.Abstractions/IDirectoryInfoExtensions.cs b/src/System.IO.Abstractions/IDirectoryInfoExtensions.cs new file mode 100644 index 000000000..ffc5a43cb --- /dev/null +++ b/src/System.IO.Abstractions/IDirectoryInfoExtensions.cs @@ -0,0 +1,27 @@ +namespace System.IO.Abstractions +{ + public static class IDirectoryInfoExtensions + { + /// + /// Get an for the specified sub-directory + /// + /// + /// Sub-directory name (ex. "test") + /// An for the specified sub-directory + public static IDirectoryInfo SubDirectory(this IDirectoryInfo info, string name) + { + return info.FileSystem.DirectoryInfo.FromDirectoryName(info.FileSystem.Path.Combine(info.FullName, name)); + } + + /// + /// Get an for the specified file + /// + /// + /// File name (ex. "test.txt") + /// An for the specified file + public static IFileInfo File(this IDirectoryInfo info, string name) + { + return info.FileSystem.FileInfo.FromFileName(info.FileSystem.Path.Combine(info.FullName, name)); + } + } +} diff --git a/tests/System.IO.Abstractions.Tests/DirectoryInfoExtensionsTests.cs b/tests/System.IO.Abstractions.Tests/DirectoryInfoExtensionsTests.cs new file mode 100644 index 000000000..c58bf845d --- /dev/null +++ b/tests/System.IO.Abstractions.Tests/DirectoryInfoExtensionsTests.cs @@ -0,0 +1,61 @@ +using NUnit.Framework; + +namespace System.IO.Abstractions.Tests +{ + [TestFixture] + public class DirectoryInfoExtensionsTests + { + [Test] + public void SubDirectory_Extension_Test() + { + //arrange + var fs = new FileSystem(); + var current = fs.DirectoryInfo.FromDirectoryName(fs.Directory.GetCurrentDirectory()); + var guid = Guid.NewGuid().ToString(); + var expectedPath = fs.Path.Combine(current.FullName, guid); + + //make sure directory doesn't exists + Assert.IsFalse(fs.Directory.Exists(expectedPath)); + + //create directory + var created = current.SubDirectory(guid); + created.Create(); + + //assert it exists + Assert.IsTrue(fs.Directory.Exists(expectedPath)); + Assert.AreEqual(expectedPath, created.FullName); + + //delete directory + created.Delete(); + Assert.IsFalse(fs.Directory.Exists(expectedPath)); + } + + [Test] + public void File_Extension_Test() + { + //arrange + var fs = new FileSystem(); + var current = fs.DirectoryInfo.FromDirectoryName(fs.Directory.GetCurrentDirectory()); + var guid = Guid.NewGuid().ToString(); + var expectedPath = fs.Path.Combine(current.FullName, guid); + + //make sure file doesn't exists + Assert.IsFalse(fs.File.Exists(expectedPath)); + + //create file + var created = current.File(guid); + using (var stream = created.Create()) + { + stream.Dispose(); + } + + //assert it exists + Assert.IsTrue(fs.File.Exists(expectedPath)); + Assert.AreEqual(expectedPath, created.FullName); + + //delete file + created.Delete(); + Assert.IsFalse(fs.File.Exists(expectedPath)); + } + } +}