Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: base/file_util_unittest.cc

Issue 13315: Move file enumeration to filepaths. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/file_util_posix.cc ('k') | base/file_util_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « base/file_util_posix.cc ('k') | base/file_util_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698