Esempio n. 1
0
        public async Task Test2Async()
        {
            // ディレクトリやファイルを実際のファイルシステム上に用意
            var temp = GetTempDir();

            using var deleteLater = new Defer(() => CleanupTempDir(temp));
            var pathSet = new HashSet <string>()
            {
                "file0.txt",
                "dir1/file1-1.txt",
                "dir1/file1-2.txt",
                "dir2",
                "dir3-1/dir3-2/file3-1.txt",
                "dir3-1/dir3-2/dir3-3/file3-2.txt",
            };

            foreach (var path in pathSet)
            {
                await SetupPathAsync(temp.Combine(_AsItems(path)));
            }

            // テスト実行。見つかったディレクトリやファイルを変数 pathSet から消していく
            // ただし、dir3-1 の中身を無視してみる
            var skipCount = 0;

            await foreach (var entry in Fsentry.VisitAsync(temp))
            {
                Assert.IsFalse(entry.RelativePath.IsAbsolute);

                var relPathStr = entry.RelativePath.ToString("/");

                if (entry.Event == FsentryEvent.EnterDir)
                {
                    if (relPathStr.Contains("dir3-1"))
                    {
                        entry.Command = FsentryCommand.SkipDirectory;
                        skipCount++;
                        continue;
                    }

                    if (pathSet.Contains(relPathStr))
                    {
                        pathSet.Remove(relPathStr);
                    }
                }
                else if (entry.Event == FsentryEvent.File)
                {
                    Assert.IsTrue(pathSet.Contains(relPathStr));
                    pathSet.Remove(relPathStr);
                }
            }

            // 1度だけ skip したはず。"dir3-1" を見つけてすぐ skip したので、中のディレクトリの探索はしていないはず
            Assert.AreEqual(1, skipCount);

            // pathSet は 2 つ残ったはず
            Assert.AreEqual(2, pathSet.Count);
        }
Esempio n. 2
0
        public async Task Test1Async()
        {
            // ディレクトリやファイルを実際のファイルシステム上に用意
            var temp = GetTempDir();

            using var deleteLater = new Defer(() => CleanupTempDir(temp));
            var pathSet = new HashSet <string>()
            {
                "file0.txt",
                "dir1/file1-1.txt",
                "dir1/file1-2.txt",
                "dir2",
                "dir3-1/dir3-2/file3-1.txt",
                "dir3-1/dir3-2/dir3-3/file3-2.txt",
            };

            foreach (var path in pathSet)
            {
                await SetupPathAsync(temp.Combine(_AsItems(path)));
            }

            // テスト実行。見つかったディレクトリやファイルを変数 pathSet から消していく
            await foreach (var entry in Fsentry.VisitAsync(temp))
            {
                Assert.IsFalse(entry.RelativePath.IsAbsolute);

                var relPathStr = entry.RelativePath.ToString("/");

                if (entry.Event == FsentryEvent.EnterDir)
                {
                    if (pathSet.Contains(relPathStr))
                    {
                        pathSet.Remove(relPathStr);
                    }
                }
                else if (entry.Event == FsentryEvent.File)
                {
                    Assert.IsTrue(pathSet.Contains(relPathStr));
                    pathSet.Remove(relPathStr);
                }
            }

            // pathSet は全て無くなったはず
            Assert.AreEqual(0, pathSet.Count);
        }