| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <shellapi.h> | 9 #include <shellapi.h> |
| 10 #include <shlobj.h> | 10 #include <shlobj.h> |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 | 48 |
| 49 // the path to temporary directory used to contain the test operations | 49 // the path to temporary directory used to contain the test operations |
| 50 FilePath test_dir_; | 50 FilePath test_dir_; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 // Collects all the results from the given file enumerator, and provides an | 53 // Collects all the results from the given file enumerator, and provides an |
| 54 // interface to query whether a given file is present. | 54 // interface to query whether a given file is present. |
| 55 class FindResultCollector { | 55 class FindResultCollector { |
| 56 public: | 56 public: |
| 57 FindResultCollector(file_util::FileEnumerator& enumerator) { | 57 FindResultCollector(file_util::FileEnumerator& enumerator) { |
| 58 std::wstring cur_file; | 58 FilePath cur_file; |
| 59 while (!(cur_file = enumerator.Next()).empty()) { | 59 while (!(cur_file = enumerator.Next()).value().empty()) { |
| 60 FilePath::StringType path = FilePath::FromWStringHack(cur_file).value(); | 60 FilePath::StringType path = cur_file.value(); |
| 61 // The file should not be returned twice. | 61 // The file should not be returned twice. |
| 62 EXPECT_TRUE(files_.end() == files_.find(path)) | 62 EXPECT_TRUE(files_.end() == files_.find(path)) |
| 63 << "Same file returned twice"; | 63 << "Same file returned twice"; |
| 64 | 64 |
| 65 // Save for later. | 65 // Save for later. |
| 66 files_.insert(path); | 66 files_.insert(path); |
| 67 } | 67 } |
| 68 } | 68 } |
| 69 | 69 |
| 70 // Returns true if the enumerator found the file. | 70 // Returns true if the enumerator found the file. |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 path = path.Append(FILE_PATH_LITERAL("foo.bar")); | 823 path = path.Append(FILE_PATH_LITERAL("foo.bar")); |
| 824 path = path.Append(FILE_PATH_LITERAL("foo")); | 824 path = path.Append(FILE_PATH_LITERAL("foo")); |
| 825 // '/foo.bar/foo' with extension '.baz' | 825 // '/foo.bar/foo' with extension '.baz' |
| 826 FilePath result_path = path; | 826 FilePath result_path = path; |
| 827 file_util::ReplaceExtension(&result_path, FILE_PATH_LITERAL(".baz")); | 827 file_util::ReplaceExtension(&result_path, FILE_PATH_LITERAL(".baz")); |
| 828 EXPECT_EQ(path.ToWStringHack() + L".baz", result_path.ToWStringHack()); | 828 EXPECT_EQ(path.ToWStringHack() + L".baz", result_path.ToWStringHack()); |
| 829 } | 829 } |
| 830 | 830 |
| 831 TEST_F(FileUtilTest, FileEnumeratorTest) { | 831 TEST_F(FileUtilTest, FileEnumeratorTest) { |
| 832 // Test an empty directory. | 832 // Test an empty directory. |
| 833 file_util::FileEnumerator f0(test_dir_.ToWStringHack(), true, | 833 file_util::FileEnumerator f0(test_dir_, true, |
| 834 file_util::FileEnumerator::FILES_AND_DIRECTORIES); | 834 file_util::FileEnumerator::FILES_AND_DIRECTORIES); |
| 835 EXPECT_EQ(f0.Next(), L""); | 835 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); |
| 836 EXPECT_EQ(f0.Next(), L""); | 836 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); |
| 837 | 837 |
| 838 // create the directories | 838 // create the directories |
| 839 FilePath dir1 = test_dir_.Append(FILE_PATH_LITERAL("dir1")); | 839 FilePath dir1 = test_dir_.Append(FILE_PATH_LITERAL("dir1")); |
| 840 EXPECT_TRUE(file_util::CreateDirectory(dir1)); | 840 EXPECT_TRUE(file_util::CreateDirectory(dir1)); |
| 841 FilePath dir2 = test_dir_.Append(FILE_PATH_LITERAL("dir2")); | 841 FilePath dir2 = test_dir_.Append(FILE_PATH_LITERAL("dir2")); |
| 842 EXPECT_TRUE(file_util::CreateDirectory(dir2)); | 842 EXPECT_TRUE(file_util::CreateDirectory(dir2)); |
| 843 FilePath dir2inner = dir2.Append(FILE_PATH_LITERAL("inner")); | 843 FilePath dir2inner = dir2.Append(FILE_PATH_LITERAL("inner")); |
| 844 EXPECT_TRUE(file_util::CreateDirectory(dir2inner)); | 844 EXPECT_TRUE(file_util::CreateDirectory(dir2inner)); |
| 845 | 845 |
| 846 // create the files | 846 // create the files |
| 847 FilePath dir2file = dir2.Append(FILE_PATH_LITERAL("dir2file.txt")); | 847 FilePath dir2file = dir2.Append(FILE_PATH_LITERAL("dir2file.txt")); |
| 848 CreateTextFile(dir2file, L""); | 848 CreateTextFile(dir2file, L""); |
| 849 FilePath dir2innerfile = dir2inner.Append(FILE_PATH_LITERAL("innerfile.txt")); | 849 FilePath dir2innerfile = dir2inner.Append(FILE_PATH_LITERAL("innerfile.txt")); |
| 850 CreateTextFile(dir2innerfile, L""); | 850 CreateTextFile(dir2innerfile, L""); |
| 851 FilePath file1 = test_dir_.Append(FILE_PATH_LITERAL("file1.txt")); | 851 FilePath file1 = test_dir_.Append(FILE_PATH_LITERAL("file1.txt")); |
| 852 CreateTextFile(file1, L""); | 852 CreateTextFile(file1, L""); |
| 853 FilePath file2_rel = | 853 FilePath file2_rel = |
| 854 dir2.Append(FilePath::kParentDirectory) | 854 dir2.Append(FilePath::kParentDirectory) |
| 855 .Append(FILE_PATH_LITERAL("file2.txt")); | 855 .Append(FILE_PATH_LITERAL("file2.txt")); |
| 856 CreateTextFile(file2_rel, L""); | 856 CreateTextFile(file2_rel, L""); |
| 857 FilePath file2_abs = test_dir_.Append(FILE_PATH_LITERAL("file2.txt")); | 857 FilePath file2_abs = test_dir_.Append(FILE_PATH_LITERAL("file2.txt")); |
| 858 | 858 |
| 859 // Only enumerate files. | 859 // Only enumerate files. |
| 860 file_util::FileEnumerator f1(test_dir_.ToWStringHack(), true, | 860 file_util::FileEnumerator f1(test_dir_, true, |
| 861 file_util::FileEnumerator::FILES); | 861 file_util::FileEnumerator::FILES); |
| 862 FindResultCollector c1(f1); | 862 FindResultCollector c1(f1); |
| 863 EXPECT_TRUE(c1.HasFile(file1)); | 863 EXPECT_TRUE(c1.HasFile(file1)); |
| 864 EXPECT_TRUE(c1.HasFile(file2_abs)); | 864 EXPECT_TRUE(c1.HasFile(file2_abs)); |
| 865 EXPECT_TRUE(c1.HasFile(dir2file)); | 865 EXPECT_TRUE(c1.HasFile(dir2file)); |
| 866 EXPECT_TRUE(c1.HasFile(dir2innerfile)); | 866 EXPECT_TRUE(c1.HasFile(dir2innerfile)); |
| 867 EXPECT_EQ(c1.size(), 4); | 867 EXPECT_EQ(c1.size(), 4); |
| 868 | 868 |
| 869 // Only enumerate directories. | 869 // Only enumerate directories. |
| 870 file_util::FileEnumerator f2(test_dir_.ToWStringHack(), true, | 870 file_util::FileEnumerator f2(test_dir_, true, |
| 871 file_util::FileEnumerator::DIRECTORIES); | 871 file_util::FileEnumerator::DIRECTORIES); |
| 872 FindResultCollector c2(f2); | 872 FindResultCollector c2(f2); |
| 873 EXPECT_TRUE(c2.HasFile(dir1)); | 873 EXPECT_TRUE(c2.HasFile(dir1)); |
| 874 EXPECT_TRUE(c2.HasFile(dir2)); | 874 EXPECT_TRUE(c2.HasFile(dir2)); |
| 875 EXPECT_TRUE(c2.HasFile(dir2inner)); | 875 EXPECT_TRUE(c2.HasFile(dir2inner)); |
| 876 EXPECT_EQ(c2.size(), 3); | 876 EXPECT_EQ(c2.size(), 3); |
| 877 | 877 |
| 878 // Only enumerate directories non-recursively. | 878 // Only enumerate directories non-recursively. |
| 879 file_util::FileEnumerator f2_non_recursive( | 879 file_util::FileEnumerator f2_non_recursive( |
| 880 test_dir_.ToWStringHack(), false, file_util::FileEnumerator::DIRECTORIES); | 880 test_dir_, false, file_util::FileEnumerator::DIRECTORIES); |
| 881 FindResultCollector c2_non_recursive(f2_non_recursive); | 881 FindResultCollector c2_non_recursive(f2_non_recursive); |
| 882 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); | 882 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); |
| 883 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); | 883 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); |
| 884 EXPECT_EQ(c2_non_recursive.size(), 2); | 884 EXPECT_EQ(c2_non_recursive.size(), 2); |
| 885 | 885 |
| 886 // Enumerate files and directories. | 886 // Enumerate files and directories. |
| 887 file_util::FileEnumerator f3(test_dir_.ToWStringHack(), true, | 887 file_util::FileEnumerator f3(test_dir_, true, |
| 888 file_util::FileEnumerator::FILES_AND_DIRECTORIES); | 888 file_util::FileEnumerator::FILES_AND_DIRECTORIES); |
| 889 FindResultCollector c3(f3); | 889 FindResultCollector c3(f3); |
| 890 EXPECT_TRUE(c3.HasFile(dir1)); | 890 EXPECT_TRUE(c3.HasFile(dir1)); |
| 891 EXPECT_TRUE(c3.HasFile(dir2)); | 891 EXPECT_TRUE(c3.HasFile(dir2)); |
| 892 EXPECT_TRUE(c3.HasFile(file1)); | 892 EXPECT_TRUE(c3.HasFile(file1)); |
| 893 EXPECT_TRUE(c3.HasFile(file2_abs)); | 893 EXPECT_TRUE(c3.HasFile(file2_abs)); |
| 894 EXPECT_TRUE(c3.HasFile(dir2file)); | 894 EXPECT_TRUE(c3.HasFile(dir2file)); |
| 895 EXPECT_TRUE(c3.HasFile(dir2inner)); | 895 EXPECT_TRUE(c3.HasFile(dir2inner)); |
| 896 EXPECT_TRUE(c3.HasFile(dir2innerfile)); | 896 EXPECT_TRUE(c3.HasFile(dir2innerfile)); |
| 897 EXPECT_EQ(c3.size(), 7); | 897 EXPECT_EQ(c3.size(), 7); |
| 898 | 898 |
| 899 // Non-recursive operation. | 899 // Non-recursive operation. |
| 900 file_util::FileEnumerator f4(test_dir_.ToWStringHack(), false, | 900 file_util::FileEnumerator f4(test_dir_, false, |
| 901 file_util::FileEnumerator::FILES_AND_DIRECTORIES); | 901 file_util::FileEnumerator::FILES_AND_DIRECTORIES); |
| 902 FindResultCollector c4(f4); | 902 FindResultCollector c4(f4); |
| 903 EXPECT_TRUE(c4.HasFile(dir2)); | 903 EXPECT_TRUE(c4.HasFile(dir2)); |
| 904 EXPECT_TRUE(c4.HasFile(dir2)); | 904 EXPECT_TRUE(c4.HasFile(dir2)); |
| 905 EXPECT_TRUE(c4.HasFile(file1)); | 905 EXPECT_TRUE(c4.HasFile(file1)); |
| 906 EXPECT_TRUE(c4.HasFile(file2_abs)); | 906 EXPECT_TRUE(c4.HasFile(file2_abs)); |
| 907 EXPECT_EQ(c4.size(), 4); | 907 EXPECT_EQ(c4.size(), 4); |
| 908 | 908 |
| 909 // Enumerate with a pattern. | 909 // Enumerate with a pattern. |
| 910 file_util::FileEnumerator f5(test_dir_.ToWStringHack(), true, | 910 file_util::FileEnumerator f5(test_dir_, true, |
| 911 file_util::FileEnumerator::FILES_AND_DIRECTORIES, L"dir*"); | 911 file_util::FileEnumerator::FILES_AND_DIRECTORIES, |
| 912 FILE_PATH_LITERAL("dir*")); |
| 912 FindResultCollector c5(f5); | 913 FindResultCollector c5(f5); |
| 913 EXPECT_TRUE(c5.HasFile(dir1)); | 914 EXPECT_TRUE(c5.HasFile(dir1)); |
| 914 EXPECT_TRUE(c5.HasFile(dir2)); | 915 EXPECT_TRUE(c5.HasFile(dir2)); |
| 915 EXPECT_TRUE(c5.HasFile(dir2file)); | 916 EXPECT_TRUE(c5.HasFile(dir2file)); |
| 916 EXPECT_TRUE(c5.HasFile(dir2inner)); | 917 EXPECT_TRUE(c5.HasFile(dir2inner)); |
| 917 EXPECT_TRUE(c5.HasFile(dir2innerfile)); | 918 EXPECT_TRUE(c5.HasFile(dir2innerfile)); |
| 918 EXPECT_EQ(c5.size(), 5); | 919 EXPECT_EQ(c5.size(), 5); |
| 919 | 920 |
| 920 // Make sure the destructor closes the find handle while in the middle of a | 921 // Make sure the destructor closes the find handle while in the middle of a |
| 921 // query to allow TearDown to delete the directory. | 922 // query to allow TearDown to delete the directory. |
| 922 file_util::FileEnumerator f6(test_dir_.ToWStringHack(), true, | 923 file_util::FileEnumerator f6(test_dir_, true, |
| 923 file_util::FileEnumerator::FILES_AND_DIRECTORIES); | 924 file_util::FileEnumerator::FILES_AND_DIRECTORIES); |
| 924 EXPECT_FALSE(f6.Next().empty()); // Should have found something | 925 EXPECT_FALSE(f6.Next().value().empty()); // Should have found something |
| 925 // (we don't care what). | 926 // (we don't care what). |
| 926 } | 927 } |
| 927 | 928 |
| 928 | 929 |
| 929 void PathComponents(const std::wstring& path, | 930 void PathComponents(const std::wstring& path, |
| 930 std::vector<std::wstring>* components) { | 931 std::vector<std::wstring>* components) { |
| 931 DCHECK(components != NULL); | 932 DCHECK(components != NULL); |
| 932 if (components == NULL) | 933 if (components == NULL) |
| 933 return; | 934 return; |
| 934 std::wstring::size_type start = 0; | 935 std::wstring::size_type start = 0; |
| 935 std::wstring::size_type end = path.find('/', start); | 936 std::wstring::size_type end = path.find('/', start); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 for (size_t j = 0; j < comps.size(); ++j) { | 972 for (size_t j = 0; j < comps.size(); ++j) { |
| 972 result.append(comps[j]); | 973 result.append(comps[j]); |
| 973 if (j < comps.size() - 1) | 974 if (j < comps.size() - 1) |
| 974 result.append(FILE_PATH_LITERAL("|"), 1); | 975 result.append(FILE_PATH_LITERAL("|"), 1); |
| 975 } | 976 } |
| 976 EXPECT_EQ(kPathComponents[i].result, result); | 977 EXPECT_EQ(kPathComponents[i].result, result); |
| 977 } | 978 } |
| 978 } | 979 } |
| 979 | 980 |
| 980 } // namespace | 981 } // namespace |
| OLD | NEW |