| 351 | } |
| 352 | |
| 353 | void TestGlobFiles(const std::string& base_dir) { |
| 354 | auto fs = std::make_shared<MockFileSystem>(TimePoint{}); |
| 355 | |
| 356 | auto check_entries = [](const std::vector<FileInfo>& infos, |
| 357 | std::vector<std::string> expected) -> void { |
| 358 | std::vector<std::string> actual(infos.size()); |
| 359 | std::transform(infos.begin(), infos.end(), actual.begin(), |
| 360 | [](const FileInfo& file) { return file.path(); }); |
| 361 | std::sort(actual.begin(), actual.end()); |
| 362 | ASSERT_EQ(actual, expected); |
| 363 | }; |
| 364 | |
| 365 | ASSERT_OK(fs->CreateDir(base_dir + "A/CD")); |
| 366 | ASSERT_OK(fs->CreateDir(base_dir + "AB/CD")); |
| 367 | ASSERT_OK(fs->CreateDir(base_dir + "AB/CD/ab")); |
| 368 | CreateFile(fs.get(), base_dir + "A/CD/ab.txt", "data"); |
| 369 | CreateFile(fs.get(), base_dir + "AB/CD/a.txt", "data"); |
| 370 | CreateFile(fs.get(), base_dir + "AB/CD/abc.txt", "data"); |
| 371 | CreateFile(fs.get(), base_dir + "AB/CD/ab/c.txt", "data"); |
| 372 | |
| 373 | FileInfoVector infos; |
| 374 | ASSERT_OK_AND_ASSIGN(infos, GlobFiles(fs, base_dir + "A*/CD/?b*.txt")); |
| 375 | ASSERT_EQ(infos.size(), 2); |
| 376 | check_entries(infos, {base_dir + "A/CD/ab.txt", base_dir + "AB/CD/abc.txt"}); |
| 377 | |
| 378 | ASSERT_OK_AND_ASSIGN(infos, GlobFiles(fs, base_dir + "A*/CD/?/b*.txt")); |
| 379 | ASSERT_EQ(infos.size(), 0); |
| 380 | } |
| 381 | |
| 382 | TEST(InternalUtil, GlobFilesWithoutLeadingSlash) { TestGlobFiles(""); } |
| 383 |
no test coverage detected