System.IO.Abstractions
System.IO.Abstractions copied to clipboard
MockDirectory.Delete recursive does not consider nested files MockFileData.AllowedFileShare property
Describe the bug MockDirectory.Delete recursive does not consider nested files which MockFileData.AllowedFileShare property does not allow delete operation.
To Reproduce The following test reproduces the error:
[Test]
public void MockDirectory_Delete_ShouldThrowIfFileAccessShareHasNoWriteOrDeleteAccess()
{
// Arrange
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ @"c:\bar\foo.txt", new MockFileData("some demo content") },
{ @"c:\bar\baz.txt", new MockFileData("some demo content"){ AllowedFileShare = FileShare.None } }
});
// Throws exception
Assert.Throws(typeof(IOException), () => fileSystem.File.Delete(@"c:\bar\baz.txt"));
// Does not throw exception
Assert.Throws(typeof(IOException), () => fileSystem.Directory.Delete(@"c:\bar", true));
}
Expected behavior
I'm not sure if this is indeed a bug or I didn't understand the semantics of the AllowedFileShare property, but the behaviour seems inconsistent. In case it's a bug, I'd be happy to open a PR for it.
Thanks!
Thanks for reporting. You got the idea totally right and I agree it's a gap in our implementation.