TestableIO / System.IO.Abstractions.Extensions

Convenience functionality on top of System.IO.Abstractions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MockFileSystem extensions

rcdailey opened this issue · comments

Would you find the below extension methods useful? If so, I am happy to open a pull request. I'm hesitant to do so right away because I'm not sure if these should be extension methods in this library or if I should contribute them as actual class members upstream (upstream being the actual IO.Abstractions package).

I found these extension methods to be absolutely invaluable in my own code base in conjunction with the Extensions package. It eliminates a lot of boilerplate in my unit tests, namely these:

var fs = new MockFileSystem();
var myDir = fs.CurrentDirectory().SubDirectory("dir");
var myFile = fs.CurrentDirectory().File("file.txt");

// Creating empty files
fs.AddFile(myFile.FullName, new MockFileData(""));
// Becomes
fs.AddEmptyFile(foo);

// Specifying `FullName` all over the place...
fs.AddDirectory(myDir.FullName);
// Becomes
fs.AddDirectory(myDir);

If you could provide some guidance and feedback, I'm happy to move this to a PR. Thanks for your time!

public static class MockFileSystemExtensions
{
    public static void AddEmptyFile(this MockFileSystem fs, string path)
    {
        fs.AddFile(path, new MockFileData(""));
    }

    public static void AddEmptyFile(this MockFileSystem fs, IFileInfo path)
    {
        fs.AddEmptyFile(path.FullName);
    }

    public static void AddDirectory(this MockFileSystem fs, IDirectoryInfo path)
    {
        fs.AddDirectory(path.FullName);
    }

    public static void AddFile(this MockFileSystem fs, IFileInfo path, MockFileData data)
    {
        fs.AddFile(path.FullName, data);
    }

    public static MockFileData GetFile(this MockFileSystem fs, IFileInfo path)
    {
        return fs.GetFile(path.FullName);
    }
}

hi @rcdailey ,
The above looks usefull to me.
In my opinion, they should be part of the base package but I know @fgreinacher is not really into it.
@fgreinacher can you please review the above and see if it makes sense to add them to the TestableIO.System.IO.Abstractions.TestingHelpers library.

If not the only alternative is to create a second library in this repo, something like TestableIO.System.IO.Abstractions.TestingHelpers.Extensions, otherwise the normal extensions would depend on the testing library which doesn't make any sense.

I'm also fine adding them to MockFileSystem. The changes go well with existing methods like AddFileFromEmbeddedResource. I just don't want to change the core abstractions like IFile or IDirectory.