System.IO.Abstractions icon indicating copy to clipboard operation
System.IO.Abstractions copied to clipboard

MockDirectory.Delete recursive does not consider nested files MockFileData.AllowedFileShare property

Open cedsan opened this issue 4 years ago • 1 comments

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!

cedsan avatar Aug 01 '21 20:08 cedsan

Thanks for reporting. You got the idea totally right and I agree it's a gap in our implementation.

fgreinacher avatar Aug 09 '21 20:08 fgreinacher