| 755 | } |
| 756 | |
| 757 | void GenericFileSystemTest::TestGetFileInfoSelector(FileSystem* fs) { |
| 758 | ASSERT_OK(fs->CreateDir("AB/CD")); |
| 759 | CreateFile(fs, "abc", "data"); |
| 760 | CreateFile(fs, "AB/def", "some data"); |
| 761 | CreateFile(fs, "AB/CD/ghi", "some other data"); |
| 762 | CreateFile(fs, "AB/CD/jkl", "yet other data"); |
| 763 | |
| 764 | TimePoint first_dir_time, first_file_time; |
| 765 | FileSelector s; |
| 766 | s.base_dir = ""; |
| 767 | std::vector<FileInfo> infos; |
| 768 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(s)); |
| 769 | // Need to sort results to make testing deterministic |
| 770 | SortInfos(&infos); |
| 771 | ASSERT_EQ(infos.size(), 2); |
| 772 | AssertFileInfo(infos[0], "AB", FileType::Directory); |
| 773 | first_dir_time = infos[0].mtime(); |
| 774 | if (have_directory_mtimes()) { |
| 775 | ValidateTimePoint(first_dir_time); |
| 776 | } |
| 777 | AssertFileInfo(infos[1], "abc", FileType::File, 4); |
| 778 | |
| 779 | s.base_dir = "AB"; |
| 780 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(s)); |
| 781 | SortInfos(&infos); |
| 782 | ASSERT_EQ(infos.size(), 2); |
| 783 | AssertFileInfo(infos[0], "AB/CD", FileType::Directory); |
| 784 | AssertFileInfo(infos[1], "AB/def", FileType::File, 9); |
| 785 | |
| 786 | s.base_dir = "AB/CD"; |
| 787 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(s)); |
| 788 | SortInfos(&infos); |
| 789 | ASSERT_EQ(infos.size(), 2); |
| 790 | AssertFileInfo(infos[0], "AB/CD/ghi", FileType::File, 15); |
| 791 | AssertFileInfo(infos[1], "AB/CD/jkl", FileType::File, 14); |
| 792 | first_file_time = infos[0].mtime(); |
| 793 | if (have_directory_mtimes()) { |
| 794 | AssertDurationBetween(first_file_time - first_dir_time, 0.0, kTimeSlack); |
| 795 | } |
| 796 | AssertDurationBetween(infos[1].mtime() - first_file_time, 0.0, kTimeSlack); |
| 797 | |
| 798 | // Recursive |
| 799 | s.base_dir = "AB"; |
| 800 | s.recursive = true; |
| 801 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(s)); |
| 802 | SortInfos(&infos); |
| 803 | ASSERT_EQ(infos.size(), 4); |
| 804 | AssertFileInfo(infos[0], "AB/CD", FileType::Directory); |
| 805 | AssertFileInfo(infos[1], "AB/CD/ghi", FileType::File, first_file_time, 15); |
| 806 | AssertFileInfo(infos[2], "AB/CD/jkl", FileType::File, 14); |
| 807 | AssertFileInfo(infos[3], "AB/def", FileType::File, 9); |
| 808 | |
| 809 | // Check the mtime is the same from one call to the other |
| 810 | FileInfo info; |
| 811 | ASSERT_OK_AND_ASSIGN(info, fs->GetFileInfo("AB")); |
| 812 | AssertFileInfo(info, "AB", FileType::Directory, first_dir_time); |
| 813 | ASSERT_OK_AND_ASSIGN(info, fs->GetFileInfo("AB/CD/ghi")); |
| 814 | AssertFileInfo(info, "AB/CD/ghi", FileType::File, first_file_time, 15); |
nothing calls this directly
no test coverage detected