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); }
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); }