Bari.Core.Test.Generic.LocalFileSystemDirectoryTest.PartialDelete C# (CSharp) Method

PartialDelete() private method

private PartialDelete ( ) : void
return void
        public void PartialDelete()
        {
            using (var tmp = new TempDirectory())
            {
                var dir = new LocalFileSystemDirectory(tmp);

                Directory.CreateDirectory(Path.Combine(tmp, "dir1"));
                Directory.CreateDirectory(Path.Combine(tmp, "dir1", "dir2"));
                using (var f = File.CreateText(Path.Combine(tmp, "dir1", "file.delete")))
                    f.WriteLine("test");
                using (var f = File.CreateText(Path.Combine(tmp, "dir1", "file.keep")))
                    f.WriteLine("test");
                using (var f = File.CreateText(Path.Combine(tmp, "dir1", "dir2", "file.delete")))
                    f.WriteLine("test");

                var paths = new HashSet<string>();

                dir.Delete(p =>
                {
                    paths.Add(p);
                    return false;
                });

                paths.Should().HaveCount(3);
                paths.Should().Contain(Path.Combine("dir1", "file.delete"));
                paths.Should().Contain(Path.Combine("dir1", "file.keep"));
                paths.Should().Contain(Path.Combine("dir1", "dir2", "file.delete"));

                Directory.Exists(tmp).Should().BeTrue();
                Directory.Exists(Path.Combine(tmp, "dir1")).Should().BeTrue();
                Directory.Exists(Path.Combine(tmp, "dir1", "dir2")).Should().BeTrue();
                File.Exists(Path.Combine(tmp, "dir1", "file.delete")).Should().BeTrue();
                File.Exists(Path.Combine(tmp, "dir1", "file.keep")).Should().BeTrue();
                File.Exists(Path.Combine(tmp, "dir1", "dir2", "file.delete")).Should().BeTrue();

                paths.Clear();
                dir.Delete(p =>
                {
                    paths.Add(p);
                    return !p.EndsWith(".keep", System.StringComparison.InvariantCulture);
                });

                paths.Should().HaveCount(4);
                paths.Should().Contain(Path.Combine("dir1", "file.delete"));
                paths.Should().Contain(Path.Combine("dir1", "file.keep"));
                paths.Should().Contain(Path.Combine("dir1", "dir2"));
                paths.Should().Contain(Path.Combine("dir1", "dir2", "file.delete"));

                Directory.Exists(tmp).Should().BeTrue();
                Directory.Exists(Path.Combine(tmp, "dir1")).Should().BeTrue();
                Directory.Exists(Path.Combine(tmp, "dir1", "dir2")).Should().BeFalse();
                File.Exists(Path.Combine(tmp, "dir1", "file.delete")).Should().BeFalse();
                File.Exists(Path.Combine(tmp, "dir1", "file.keep")).Should().BeTrue();
                File.Exists(Path.Combine(tmp, "dir1", "dir2", "file.delete")).Should().BeFalse();

                paths.Clear();
                dir.Delete(p =>
                {
                    paths.Add(p);
                    return true;
                });

                paths.Should().HaveCount(3);
                paths.Should().Contain(Path.Combine("dir1", "file.keep"));
                paths.Should().Contain("dir1");
                paths.Should().Contain("");

                Directory.Exists(tmp).Should().BeFalse();
            }
        }