Exemplo n.º 1
0
        public void Delete_WhereRecurseIsTrueAndDirectoryIsEmpty_CallsApiCorrectly(bool supportsPatternSearch)
        {
            var fixture = DokanOperationsFixture.Instance;

            var path = fixture.DirectoryName.AsRootedPath();

#if LOGONLY
            fixture.SetupAny();
#else
            fixture.ExpectCreateFile(path, ReadAttributesAccess, ReadWriteShare, FileMode.Open);
            fixture.ExpectGetFileInformation(path, FileAttributes.Directory);
            fixture.ExpectOpenDirectory(path);
            if (supportsPatternSearch)
            {
                fixture.ExpectFindFilesWithPattern(path, "*", DokanOperationsFixture.GetEmptyDirectoryDefaultFiles());
            }
            else
            {
                fixture.ExpectFindFilesWithPatternToFail(path, "*", DokanResult.NotImplemented);
                fixture.ExpectFindFiles(path, DokanOperationsFixture.GetEmptyDirectoryDefaultFiles());
            }
            fixture.ExpectOpenDirectory(path, DeleteFromDirectoryAccess);
            fixture.ExpectDeleteDirectory(path);
#endif

            var sut = new DirectoryInfo(fixture.DirectoryName.AsDriveBasedPath());

            sut.Delete(true);

#if !LOGONLY
            fixture.Verify();
#endif
        }
Exemplo n.º 2
0
        public void Delete_WhereRecurseIsTrueAndDirectoryIsNonempty_CallsApiCorrectly()
        {
            var fixture = DokanOperationsFixture.Instance;

            string path        = DokanOperationsFixture.DirectoryName.AsRootedPath(),
                   subFileName = "SubFile.ext",
                   subFilePath = Path.DirectorySeparatorChar + subFileName;

#if LOGONLY
            fixture.SetupAny();
#else
            fixture.SetupCreateFile(path, ReadAttributesAccess, ReadWriteShare, FileMode.Open);
            fixture.SetupGetFileInformation(path, FileAttributes.Directory);
            fixture.SetupOpenDirectory(path);
            fixture.SetupFindFiles(path, DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(new[] {
                new FileInformation()
                {
                    FileName = subFileName, Attributes = FileAttributes.Normal, Length = 100, CreationTime = DateTime.Today, LastWriteTime = DateTime.Today, LastAccessTime = DateTime.Today
                }
            }).ToArray());
            fixture.SetupCreateFile(path + subFilePath, DeleteAccess, ReadWriteShare, FileMode.Open, deleteOnClose: true);
            fixture.SetupGetFileInformation(path + subFilePath, FileAttributes.Normal);
            fixture.SetupDeleteFile(path + subFilePath);
            fixture.SetupDeleteDirectory(path, true);
#endif

            var sut = new DirectoryInfo(DokanOperationsFixture.DirectoryName.AsDriveBasedPath());

            sut.Delete(true);

#if !LOGONLY
            fixture.VerifyAll();
#endif
        }
Exemplo n.º 3
0
        public void Delete_WhereRecurseIsTrueAndDirectoryIsNonempty_CallsApiCorrectly()
        {
            var supportsPatternSearch = bool.Parse((string)TestContext.DataRow["SupportsPatternSearch"]);

            var fixture = DokanOperationsFixture.Instance;

            string path        = fixture.DirectoryName.AsRootedPath(),
                   subFileName = "SubFile.ext",
                   subFilePath = Path.DirectorySeparatorChar + subFileName;

#if LOGONLY
            fixture.SetupAny();
#else
            fixture.ExpectCreateFile(path, ReadAttributesAccess, ReadWriteShare, FileMode.Open);
            fixture.ExpectGetFileInformation(path, FileAttributes.Directory);
            fixture.ExpectOpenDirectory(path);
            if (supportsPatternSearch)
            {
                fixture.ExpectFindFilesWithPattern(path, "*", DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(new[]
                {
                    new FileInformation()
                    {
                        FileName     = subFileName, Attributes = FileAttributes.Normal,
                        Length       = 100,
                        CreationTime = DateTime.Today, LastWriteTime = DateTime.Today, LastAccessTime = DateTime.Today
                    }
                }).ToArray());
            }
            else
            {
                fixture.ExpectFindFilesWithPatternToFail(path, "*", DokanResult.NotImplemented);
                fixture.ExpectFindFiles(path, DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(new[]
                {
                    new FileInformation()
                    {
                        FileName     = subFileName, Attributes = FileAttributes.Normal,
                        Length       = 100,
                        CreationTime = DateTime.Today, LastWriteTime = DateTime.Today, LastAccessTime = DateTime.Today
                    }
                }).ToArray());
            }
            fixture.ExpectCreateFile(path + subFilePath, DeleteAccess, ReadWriteShare, FileMode.Open, deleteOnClose: true);
            fixture.ExpectGetFileInformation(path + subFilePath, FileAttributes.Normal);
            fixture.ExpectDeleteFile(path + subFilePath);
            fixture.ExpectOpenDirectory(path, DeleteFromDirectoryAccess);
            fixture.ExpectDeleteDirectory(path);
#endif

            var sut = new DirectoryInfo(fixture.DirectoryName.AsDriveBasedPath());

            sut.Delete(true);

#if !LOGONLY
            fixture.Verify();
#endif
        }
Exemplo n.º 4
0
        public void GetFileSystemInfos_OnRootDirectory_WhereSearchOptionIsAllDirectories_CallsApiCorrectly()
        {
            var fixture = DokanOperationsFixture.Instance;

            var pathsAndItems = new[]
            {
                new {
                    Path  = DokanOperationsFixture.RootName,
                    Items = DokanOperationsFixture.RootDirectoryItems
                },
                new {
                    Path  = DokanOperationsFixture.DirectoryName.AsRootedPath(),
                    Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(DokanOperationsFixture.DirectoryItems).ToArray()
                },
                new {
                    Path  = Path.Combine(DokanOperationsFixture.DirectoryName, DokanOperationsFixture.SubDirectoryName).AsRootedPath(),
                    Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(DokanOperationsFixture.SubDirectoryItems).ToArray()
                },
                new {
                    Path  = DokanOperationsFixture.Directory2Name.AsRootedPath(),
                    Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(DokanOperationsFixture.Directory2Items).ToArray()
                },
                new {
                    Path  = Path.Combine(DokanOperationsFixture.Directory2Name, DokanOperationsFixture.SubDirectory2Name).AsRootedPath(),
                    Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().ToArray()
                }
            };

#if LOGONLY
            fixture.SetupAny();
#else
            foreach (var pathAndItem in pathsAndItems)
            {
                fixture.SetupOpenDirectory(pathAndItem.Path);
                fixture.SetupFindFiles(pathAndItem.Path, pathAndItem.Items);
            }
#endif

            var sut = new DirectoryInfo(DokanOperationsFixture.RootName.AsDriveBasedPath());

#if LOGONLY
            Assert.IsNotNull(sut.GetFileSystemInfos(), nameof(sut.GetFileSystemInfos));
            Console.WriteLine(sut.GetFileSystemInfos().Length);
#else
            CollectionAssert.AreEqual(
                pathsAndItems.Select(p => p.Items.Where(f => !f.FileName.All(c => c == '.')))
                .Aggregate((i1, i2) => i1.Union(i2).ToArray())
                .Select(i => i.FileName).ToArray(),
                sut.GetFileSystemInfos("*", SearchOption.AllDirectories).Select(f => f.Name).ToArray(),
                nameof(sut.GetFileSystemInfos));

            fixture.VerifyAll();
#endif
        }
Exemplo n.º 5
0
        public void GetFileSystemInfos_OnRootDirectory_WhereSearchOptionIsAllDirectories_CallsApiCorrectly()
        {
            var supportsPatternSearch = bool.Parse((string)TestContext.DataRow["SupportsPatternSearch"]);

            var fixture = DokanOperationsFixture.Instance;

            var pathsAndItems = new[]
            {
                new { Path = DokanOperationsFixture.RootName, Items = fixture.RootDirectoryItems },
                new { Path = fixture.DirectoryName.AsRootedPath(), Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(fixture.DirectoryItems).ToArray() },
                new { Path = Path.Combine(fixture.DirectoryName, fixture.SubDirectoryName).AsRootedPath(), Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(fixture.SubDirectoryItems).ToArray() },
                new { Path = fixture.Directory2Name.AsRootedPath(), Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().Concat(fixture.Directory2Items).ToArray() },
                new { Path = Path.Combine(fixture.Directory2Name, fixture.SubDirectory2Name).AsRootedPath(), Items = DokanOperationsFixture.GetEmptyDirectoryDefaultFiles().ToArray() }
            };

#if LOGONLY
            fixture.SetupAny();
#else
            foreach (var pathAndItem in pathsAndItems)
            {
                fixture.ExpectOpenDirectory(pathAndItem.Path);
                if (supportsPatternSearch)
                {
                    fixture.ExpectFindFilesWithPattern(pathAndItem.Path, "*", pathAndItem.Items);
                }
                else
                {
                    fixture.ExpectFindFilesWithPatternToFail(pathAndItem.Path, "*", DokanResult.NotImplemented);
                    fixture.ExpectFindFiles(pathAndItem.Path, pathAndItem.Items);
                }
            }
#endif

            var sut = new DirectoryInfo(DokanOperationsFixture.RootName.AsDriveBasedPath());

#if LOGONLY
            Assert.IsNotNull(sut.GetFileSystemInfos(), nameof(sut.GetFileSystemInfos));
            Console.WriteLine(sut.GetFileSystemInfos().Length);
#else
            CollectionAssert.AreEqual(
                pathsAndItems.Select(p => p.Items.Where(f => f.FileName.Any(c => c != '.'))).Aggregate((i1, i2) => i1.Union(i2).ToArray()).Select(i => i.FileName).ToArray(),
                sut.GetFileSystemInfos("*", SearchOption.AllDirectories).Select(f => f.Name).ToArray(),
                nameof(sut.GetFileSystemInfos));

            fixture.Verify();
#endif
        }
Exemplo n.º 6
0
        public void Delete_WhereRecurseIsTrueAndDirectoryIsEmpty_CallsApiCorrectly()
        {
            var fixture = DokanOperationsFixture.Instance;

            string path = DokanOperationsFixture.DirectoryName.AsRootedPath();

#if LOGONLY
            fixture.SetupAny();
#else
            fixture.SetupCreateFile(path, ReadAttributesAccess, ReadWriteShare, FileMode.Open);
            fixture.SetupGetFileInformation(path, FileAttributes.Directory);
            fixture.SetupOpenDirectory(path);
            fixture.SetupFindFiles(path, DokanOperationsFixture.GetEmptyDirectoryDefaultFiles());
            fixture.SetupDeleteDirectory(path, true);
#endif

            var sut = new DirectoryInfo(DokanOperationsFixture.DirectoryName.AsDriveBasedPath());

            sut.Delete(true);

#if !LOGONLY
            fixture.VerifyAll();
#endif
        }