| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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> |
| 11 #include <tchar.h> | 11 #include <tchar.h> |
| 12 #include <winioctl.h> | 12 #include <winioctl.h> |
| 13 #endif | 13 #endif |
| 14 | 14 |
| 15 #include <algorithm> | 15 #include <algorithm> |
| 16 #include <fstream> | 16 #include <fstream> |
| 17 #include <set> | 17 #include <set> |
| 18 | 18 |
| 19 #include "base/base_paths.h" | 19 #include "base/base_paths.h" |
| 20 #include "base/file_util.h" | 20 #include "base/file_util.h" |
| 21 #include "base/files/file_enumerator.h" |
| 21 #include "base/files/file_path.h" | 22 #include "base/files/file_path.h" |
| 22 #include "base/files/scoped_temp_dir.h" | 23 #include "base/files/scoped_temp_dir.h" |
| 23 #include "base/path_service.h" | 24 #include "base/path_service.h" |
| 24 #include "base/strings/utf_string_conversions.h" | 25 #include "base/strings/utf_string_conversions.h" |
| 25 #include "base/test/test_file_util.h" | 26 #include "base/test/test_file_util.h" |
| 26 #include "base/threading/platform_thread.h" | 27 #include "base/threading/platform_thread.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "testing/platform_test.h" | 29 #include "testing/platform_test.h" |
| 29 | 30 |
| 30 #if defined(OS_WIN) | 31 #if defined(OS_WIN) |
| 31 #include "base/win/scoped_handle.h" | 32 #include "base/win/scoped_handle.h" |
| 32 #endif | 33 #endif |
| 33 | 34 |
| 34 // This macro helps avoid wrapped lines in the test structs. | 35 // This macro helps avoid wrapped lines in the test structs. |
| 35 #define FPL(x) FILE_PATH_LITERAL(x) | 36 #define FPL(x) FILE_PATH_LITERAL(x) |
| 36 | 37 |
| 38 using base::FileEnumerator; |
| 37 using base::FilePath; | 39 using base::FilePath; |
| 38 | 40 |
| 39 namespace { | 41 namespace { |
| 40 | 42 |
| 41 // To test that file_util::Normalize FilePath() deals with NTFS reparse points | 43 // To test that file_util::Normalize FilePath() deals with NTFS reparse points |
| 42 // correctly, we need functions to create and delete reparse points. | 44 // correctly, we need functions to create and delete reparse points. |
| 43 #if defined(OS_WIN) | 45 #if defined(OS_WIN) |
| 44 typedef struct _REPARSE_DATA_BUFFER { | 46 typedef struct _REPARSE_DATA_BUFFER { |
| 45 ULONG ReparseTag; | 47 ULONG ReparseTag; |
| 46 USHORT ReparseDataLength; | 48 USHORT ReparseDataLength; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 ASSERT_TRUE(file_util::GetPosixFilePermissions(path, &mode)); | 129 ASSERT_TRUE(file_util::GetPosixFilePermissions(path, &mode)); |
| 128 mode |= mode_bits_to_set; | 130 mode |= mode_bits_to_set; |
| 129 mode &= ~mode_bits_to_clear; | 131 mode &= ~mode_bits_to_clear; |
| 130 ASSERT_TRUE(file_util::SetPosixFilePermissions(path, mode)); | 132 ASSERT_TRUE(file_util::SetPosixFilePermissions(path, mode)); |
| 131 } | 133 } |
| 132 #endif // defined(OS_POSIX) | 134 #endif // defined(OS_POSIX) |
| 133 | 135 |
| 134 const wchar_t bogus_content[] = L"I'm cannon fodder."; | 136 const wchar_t bogus_content[] = L"I'm cannon fodder."; |
| 135 | 137 |
| 136 const int FILES_AND_DIRECTORIES = | 138 const int FILES_AND_DIRECTORIES = |
| 137 file_util::FileEnumerator::FILES | file_util::FileEnumerator::DIRECTORIES; | 139 FileEnumerator::FILES | FileEnumerator::DIRECTORIES; |
| 138 | 140 |
| 139 // file_util winds up using autoreleased objects on the Mac, so this needs | 141 // file_util winds up using autoreleased objects on the Mac, so this needs |
| 140 // to be a PlatformTest | 142 // to be a PlatformTest |
| 141 class FileUtilTest : public PlatformTest { | 143 class FileUtilTest : public PlatformTest { |
| 142 protected: | 144 protected: |
| 143 virtual void SetUp() OVERRIDE { | 145 virtual void SetUp() OVERRIDE { |
| 144 PlatformTest::SetUp(); | 146 PlatformTest::SetUp(); |
| 145 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 147 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 146 } | 148 } |
| 147 | 149 |
| 148 base::ScopedTempDir temp_dir_; | 150 base::ScopedTempDir temp_dir_; |
| 149 }; | 151 }; |
| 150 | 152 |
| 151 // Collects all the results from the given file enumerator, and provides an | 153 // Collects all the results from the given file enumerator, and provides an |
| 152 // interface to query whether a given file is present. | 154 // interface to query whether a given file is present. |
| 153 class FindResultCollector { | 155 class FindResultCollector { |
| 154 public: | 156 public: |
| 155 explicit FindResultCollector(file_util::FileEnumerator& enumerator) { | 157 explicit FindResultCollector(FileEnumerator& enumerator) { |
| 156 FilePath cur_file; | 158 FilePath cur_file; |
| 157 while (!(cur_file = enumerator.Next()).value().empty()) { | 159 while (!(cur_file = enumerator.Next()).value().empty()) { |
| 158 FilePath::StringType path = cur_file.value(); | 160 FilePath::StringType path = cur_file.value(); |
| 159 // The file should not be returned twice. | 161 // The file should not be returned twice. |
| 160 EXPECT_TRUE(files_.end() == files_.find(path)) | 162 EXPECT_TRUE(files_.end() == files_.find(path)) |
| 161 << "Same file returned twice"; | 163 << "Same file returned twice"; |
| 162 | 164 |
| 163 // Save for later. | 165 // Save for later. |
| 164 files_.insert(path); | 166 files_.insert(path); |
| 165 } | 167 } |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); | 912 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); |
| 911 EXPECT_EQ(file_util::FILE_PERMISSION_USER_MASK, | 913 EXPECT_EQ(file_util::FILE_PERMISSION_USER_MASK, |
| 912 mode & file_util::FILE_PERMISSION_USER_MASK); | 914 mode & file_util::FILE_PERMISSION_USER_MASK); |
| 913 | 915 |
| 914 // Get rid of the permissions from the directory. | 916 // Get rid of the permissions from the directory. |
| 915 EXPECT_TRUE(file_util::SetPosixFilePermissions(subdir_path, 0u)); | 917 EXPECT_TRUE(file_util::SetPosixFilePermissions(subdir_path, 0u)); |
| 916 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); | 918 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); |
| 917 EXPECT_FALSE(mode & file_util::FILE_PERMISSION_USER_MASK); | 919 EXPECT_FALSE(mode & file_util::FILE_PERMISSION_USER_MASK); |
| 918 | 920 |
| 919 // Make sure the file in the directory can't be enumerated. | 921 // Make sure the file in the directory can't be enumerated. |
| 920 file_util::FileEnumerator f1(subdir_path, true, | 922 FileEnumerator f1(subdir_path, true, FileEnumerator::FILES); |
| 921 file_util::FileEnumerator::FILES); | |
| 922 EXPECT_TRUE(file_util::PathExists(subdir_path)); | 923 EXPECT_TRUE(file_util::PathExists(subdir_path)); |
| 923 FindResultCollector c1(f1); | 924 FindResultCollector c1(f1); |
| 924 EXPECT_EQ(c1.size(), 0); | 925 EXPECT_EQ(c1.size(), 0); |
| 925 EXPECT_FALSE(file_util::GetPosixFilePermissions(file_name, &mode)); | 926 EXPECT_FALSE(file_util::GetPosixFilePermissions(file_name, &mode)); |
| 926 | 927 |
| 927 // Give the permissions to the directory. | 928 // Give the permissions to the directory. |
| 928 EXPECT_TRUE(file_util::SetPosixFilePermissions( | 929 EXPECT_TRUE(file_util::SetPosixFilePermissions( |
| 929 subdir_path, | 930 subdir_path, |
| 930 file_util::FILE_PERMISSION_USER_MASK)); | 931 file_util::FILE_PERMISSION_USER_MASK)); |
| 931 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); | 932 EXPECT_TRUE(file_util::GetPosixFilePermissions(subdir_path, &mode)); |
| 932 EXPECT_EQ(file_util::FILE_PERMISSION_USER_MASK, | 933 EXPECT_EQ(file_util::FILE_PERMISSION_USER_MASK, |
| 933 mode & file_util::FILE_PERMISSION_USER_MASK); | 934 mode & file_util::FILE_PERMISSION_USER_MASK); |
| 934 | 935 |
| 935 // Make sure the file in the directory can be enumerated. | 936 // Make sure the file in the directory can be enumerated. |
| 936 file_util::FileEnumerator f2(subdir_path, true, | 937 FileEnumerator f2(subdir_path, true, FileEnumerator::FILES); |
| 937 file_util::FileEnumerator::FILES); | |
| 938 FindResultCollector c2(f2); | 938 FindResultCollector c2(f2); |
| 939 EXPECT_TRUE(c2.HasFile(file_name)); | 939 EXPECT_TRUE(c2.HasFile(file_name)); |
| 940 EXPECT_EQ(c2.size(), 1); | 940 EXPECT_EQ(c2.size(), 1); |
| 941 | 941 |
| 942 // Delete the file. | 942 // Delete the file. |
| 943 EXPECT_TRUE(file_util::Delete(subdir_path, true)); | 943 EXPECT_TRUE(file_util::Delete(subdir_path, true)); |
| 944 EXPECT_FALSE(file_util::PathExists(subdir_path)); | 944 EXPECT_FALSE(file_util::PathExists(subdir_path)); |
| 945 } | 945 } |
| 946 | 946 |
| 947 #endif // defined(OS_POSIX) | 947 #endif // defined(OS_POSIX) |
| (...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1817 CreateTextFile(test_path, L"test file"); | 1817 CreateTextFile(test_path, L"test file"); |
| 1818 EXPECT_TRUE(file_util::PathExists(test_path)); | 1818 EXPECT_TRUE(file_util::PathExists(test_path)); |
| 1819 EXPECT_FALSE(file_util::DirectoryExists(test_path)); | 1819 EXPECT_FALSE(file_util::DirectoryExists(test_path)); |
| 1820 EXPECT_TRUE(file_util::Delete(test_path, false)); | 1820 EXPECT_TRUE(file_util::Delete(test_path, false)); |
| 1821 | 1821 |
| 1822 EXPECT_TRUE(file_util::Delete(test_root, true)); | 1822 EXPECT_TRUE(file_util::Delete(test_root, true)); |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 TEST_F(FileUtilTest, FileEnumeratorTest) { | 1825 TEST_F(FileUtilTest, FileEnumeratorTest) { |
| 1826 // Test an empty directory. | 1826 // Test an empty directory. |
| 1827 file_util::FileEnumerator f0(temp_dir_.path(), true, FILES_AND_DIRECTORIES); | 1827 FileEnumerator f0(temp_dir_.path(), true, FILES_AND_DIRECTORIES); |
| 1828 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); | 1828 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); |
| 1829 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); | 1829 EXPECT_EQ(f0.Next().value(), FILE_PATH_LITERAL("")); |
| 1830 | 1830 |
| 1831 // Test an empty directory, non-recursively, including "..". | 1831 // Test an empty directory, non-recursively, including "..". |
| 1832 file_util::FileEnumerator f0_dotdot(temp_dir_.path(), false, | 1832 FileEnumerator f0_dotdot(temp_dir_.path(), false, |
| 1833 FILES_AND_DIRECTORIES | file_util::FileEnumerator::INCLUDE_DOT_DOT); | 1833 FILES_AND_DIRECTORIES | FileEnumerator::INCLUDE_DOT_DOT); |
| 1834 EXPECT_EQ(temp_dir_.path().Append(FILE_PATH_LITERAL("..")).value(), | 1834 EXPECT_EQ(temp_dir_.path().Append(FILE_PATH_LITERAL("..")).value(), |
| 1835 f0_dotdot.Next().value()); | 1835 f0_dotdot.Next().value()); |
| 1836 EXPECT_EQ(FILE_PATH_LITERAL(""), | 1836 EXPECT_EQ(FILE_PATH_LITERAL(""), |
| 1837 f0_dotdot.Next().value()); | 1837 f0_dotdot.Next().value()); |
| 1838 | 1838 |
| 1839 // create the directories | 1839 // create the directories |
| 1840 FilePath dir1 = temp_dir_.path().Append(FILE_PATH_LITERAL("dir1")); | 1840 FilePath dir1 = temp_dir_.path().Append(FILE_PATH_LITERAL("dir1")); |
| 1841 EXPECT_TRUE(file_util::CreateDirectory(dir1)); | 1841 EXPECT_TRUE(file_util::CreateDirectory(dir1)); |
| 1842 FilePath dir2 = temp_dir_.path().Append(FILE_PATH_LITERAL("dir2")); | 1842 FilePath dir2 = temp_dir_.path().Append(FILE_PATH_LITERAL("dir2")); |
| 1843 EXPECT_TRUE(file_util::CreateDirectory(dir2)); | 1843 EXPECT_TRUE(file_util::CreateDirectory(dir2)); |
| 1844 FilePath dir2inner = dir2.Append(FILE_PATH_LITERAL("inner")); | 1844 FilePath dir2inner = dir2.Append(FILE_PATH_LITERAL("inner")); |
| 1845 EXPECT_TRUE(file_util::CreateDirectory(dir2inner)); | 1845 EXPECT_TRUE(file_util::CreateDirectory(dir2inner)); |
| 1846 | 1846 |
| 1847 // create the files | 1847 // create the files |
| 1848 FilePath dir2file = dir2.Append(FILE_PATH_LITERAL("dir2file.txt")); | 1848 FilePath dir2file = dir2.Append(FILE_PATH_LITERAL("dir2file.txt")); |
| 1849 CreateTextFile(dir2file, std::wstring()); | 1849 CreateTextFile(dir2file, std::wstring()); |
| 1850 FilePath dir2innerfile = dir2inner.Append(FILE_PATH_LITERAL("innerfile.txt")); | 1850 FilePath dir2innerfile = dir2inner.Append(FILE_PATH_LITERAL("innerfile.txt")); |
| 1851 CreateTextFile(dir2innerfile, std::wstring()); | 1851 CreateTextFile(dir2innerfile, std::wstring()); |
| 1852 FilePath file1 = temp_dir_.path().Append(FILE_PATH_LITERAL("file1.txt")); | 1852 FilePath file1 = temp_dir_.path().Append(FILE_PATH_LITERAL("file1.txt")); |
| 1853 CreateTextFile(file1, std::wstring()); | 1853 CreateTextFile(file1, std::wstring()); |
| 1854 FilePath file2_rel = dir2.Append(FilePath::kParentDirectory) | 1854 FilePath file2_rel = dir2.Append(FilePath::kParentDirectory) |
| 1855 .Append(FILE_PATH_LITERAL("file2.txt")); | 1855 .Append(FILE_PATH_LITERAL("file2.txt")); |
| 1856 CreateTextFile(file2_rel, std::wstring()); | 1856 CreateTextFile(file2_rel, std::wstring()); |
| 1857 FilePath file2_abs = temp_dir_.path().Append(FILE_PATH_LITERAL("file2.txt")); | 1857 FilePath file2_abs = temp_dir_.path().Append(FILE_PATH_LITERAL("file2.txt")); |
| 1858 | 1858 |
| 1859 // Only enumerate files. | 1859 // Only enumerate files. |
| 1860 file_util::FileEnumerator f1(temp_dir_.path(), true, | 1860 FileEnumerator f1(temp_dir_.path(), true, FileEnumerator::FILES); |
| 1861 file_util::FileEnumerator::FILES); | |
| 1862 FindResultCollector c1(f1); | 1861 FindResultCollector c1(f1); |
| 1863 EXPECT_TRUE(c1.HasFile(file1)); | 1862 EXPECT_TRUE(c1.HasFile(file1)); |
| 1864 EXPECT_TRUE(c1.HasFile(file2_abs)); | 1863 EXPECT_TRUE(c1.HasFile(file2_abs)); |
| 1865 EXPECT_TRUE(c1.HasFile(dir2file)); | 1864 EXPECT_TRUE(c1.HasFile(dir2file)); |
| 1866 EXPECT_TRUE(c1.HasFile(dir2innerfile)); | 1865 EXPECT_TRUE(c1.HasFile(dir2innerfile)); |
| 1867 EXPECT_EQ(c1.size(), 4); | 1866 EXPECT_EQ(c1.size(), 4); |
| 1868 | 1867 |
| 1869 // Only enumerate directories. | 1868 // Only enumerate directories. |
| 1870 file_util::FileEnumerator f2(temp_dir_.path(), true, | 1869 FileEnumerator f2(temp_dir_.path(), true, FileEnumerator::DIRECTORIES); |
| 1871 file_util::FileEnumerator::DIRECTORIES); | |
| 1872 FindResultCollector c2(f2); | 1870 FindResultCollector c2(f2); |
| 1873 EXPECT_TRUE(c2.HasFile(dir1)); | 1871 EXPECT_TRUE(c2.HasFile(dir1)); |
| 1874 EXPECT_TRUE(c2.HasFile(dir2)); | 1872 EXPECT_TRUE(c2.HasFile(dir2)); |
| 1875 EXPECT_TRUE(c2.HasFile(dir2inner)); | 1873 EXPECT_TRUE(c2.HasFile(dir2inner)); |
| 1876 EXPECT_EQ(c2.size(), 3); | 1874 EXPECT_EQ(c2.size(), 3); |
| 1877 | 1875 |
| 1878 // Only enumerate directories non-recursively. | 1876 // Only enumerate directories non-recursively. |
| 1879 file_util::FileEnumerator f2_non_recursive( | 1877 FileEnumerator f2_non_recursive( |
| 1880 temp_dir_.path(), false, file_util::FileEnumerator::DIRECTORIES); | 1878 temp_dir_.path(), false, FileEnumerator::DIRECTORIES); |
| 1881 FindResultCollector c2_non_recursive(f2_non_recursive); | 1879 FindResultCollector c2_non_recursive(f2_non_recursive); |
| 1882 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); | 1880 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); |
| 1883 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); | 1881 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); |
| 1884 EXPECT_EQ(c2_non_recursive.size(), 2); | 1882 EXPECT_EQ(c2_non_recursive.size(), 2); |
| 1885 | 1883 |
| 1886 // Only enumerate directories, non-recursively, including "..". | 1884 // Only enumerate directories, non-recursively, including "..". |
| 1887 file_util::FileEnumerator f2_dotdot(temp_dir_.path(), false, | 1885 FileEnumerator f2_dotdot(temp_dir_.path(), false, |
| 1888 file_util::FileEnumerator::DIRECTORIES | | 1886 FileEnumerator::DIRECTORIES | |
| 1889 file_util::FileEnumerator::INCLUDE_DOT_DOT); | 1887 FileEnumerator::INCLUDE_DOT_DOT); |
| 1890 FindResultCollector c2_dotdot(f2_dotdot); | 1888 FindResultCollector c2_dotdot(f2_dotdot); |
| 1891 EXPECT_TRUE(c2_dotdot.HasFile(dir1)); | 1889 EXPECT_TRUE(c2_dotdot.HasFile(dir1)); |
| 1892 EXPECT_TRUE(c2_dotdot.HasFile(dir2)); | 1890 EXPECT_TRUE(c2_dotdot.HasFile(dir2)); |
| 1893 EXPECT_TRUE(c2_dotdot.HasFile( | 1891 EXPECT_TRUE(c2_dotdot.HasFile( |
| 1894 temp_dir_.path().Append(FILE_PATH_LITERAL("..")))); | 1892 temp_dir_.path().Append(FILE_PATH_LITERAL("..")))); |
| 1895 EXPECT_EQ(c2_dotdot.size(), 3); | 1893 EXPECT_EQ(c2_dotdot.size(), 3); |
| 1896 | 1894 |
| 1897 // Enumerate files and directories. | 1895 // Enumerate files and directories. |
| 1898 file_util::FileEnumerator f3(temp_dir_.path(), true, FILES_AND_DIRECTORIES); | 1896 FileEnumerator f3(temp_dir_.path(), true, FILES_AND_DIRECTORIES); |
| 1899 FindResultCollector c3(f3); | 1897 FindResultCollector c3(f3); |
| 1900 EXPECT_TRUE(c3.HasFile(dir1)); | 1898 EXPECT_TRUE(c3.HasFile(dir1)); |
| 1901 EXPECT_TRUE(c3.HasFile(dir2)); | 1899 EXPECT_TRUE(c3.HasFile(dir2)); |
| 1902 EXPECT_TRUE(c3.HasFile(file1)); | 1900 EXPECT_TRUE(c3.HasFile(file1)); |
| 1903 EXPECT_TRUE(c3.HasFile(file2_abs)); | 1901 EXPECT_TRUE(c3.HasFile(file2_abs)); |
| 1904 EXPECT_TRUE(c3.HasFile(dir2file)); | 1902 EXPECT_TRUE(c3.HasFile(dir2file)); |
| 1905 EXPECT_TRUE(c3.HasFile(dir2inner)); | 1903 EXPECT_TRUE(c3.HasFile(dir2inner)); |
| 1906 EXPECT_TRUE(c3.HasFile(dir2innerfile)); | 1904 EXPECT_TRUE(c3.HasFile(dir2innerfile)); |
| 1907 EXPECT_EQ(c3.size(), 7); | 1905 EXPECT_EQ(c3.size(), 7); |
| 1908 | 1906 |
| 1909 // Non-recursive operation. | 1907 // Non-recursive operation. |
| 1910 file_util::FileEnumerator f4(temp_dir_.path(), false, FILES_AND_DIRECTORIES); | 1908 FileEnumerator f4(temp_dir_.path(), false, FILES_AND_DIRECTORIES); |
| 1911 FindResultCollector c4(f4); | 1909 FindResultCollector c4(f4); |
| 1912 EXPECT_TRUE(c4.HasFile(dir2)); | 1910 EXPECT_TRUE(c4.HasFile(dir2)); |
| 1913 EXPECT_TRUE(c4.HasFile(dir2)); | 1911 EXPECT_TRUE(c4.HasFile(dir2)); |
| 1914 EXPECT_TRUE(c4.HasFile(file1)); | 1912 EXPECT_TRUE(c4.HasFile(file1)); |
| 1915 EXPECT_TRUE(c4.HasFile(file2_abs)); | 1913 EXPECT_TRUE(c4.HasFile(file2_abs)); |
| 1916 EXPECT_EQ(c4.size(), 4); | 1914 EXPECT_EQ(c4.size(), 4); |
| 1917 | 1915 |
| 1918 // Enumerate with a pattern. | 1916 // Enumerate with a pattern. |
| 1919 file_util::FileEnumerator f5(temp_dir_.path(), true, FILES_AND_DIRECTORIES, | 1917 FileEnumerator f5(temp_dir_.path(), true, FILES_AND_DIRECTORIES, |
| 1920 FILE_PATH_LITERAL("dir*")); | 1918 FILE_PATH_LITERAL("dir*")); |
| 1921 FindResultCollector c5(f5); | 1919 FindResultCollector c5(f5); |
| 1922 EXPECT_TRUE(c5.HasFile(dir1)); | 1920 EXPECT_TRUE(c5.HasFile(dir1)); |
| 1923 EXPECT_TRUE(c5.HasFile(dir2)); | 1921 EXPECT_TRUE(c5.HasFile(dir2)); |
| 1924 EXPECT_TRUE(c5.HasFile(dir2file)); | 1922 EXPECT_TRUE(c5.HasFile(dir2file)); |
| 1925 EXPECT_TRUE(c5.HasFile(dir2inner)); | 1923 EXPECT_TRUE(c5.HasFile(dir2inner)); |
| 1926 EXPECT_TRUE(c5.HasFile(dir2innerfile)); | 1924 EXPECT_TRUE(c5.HasFile(dir2innerfile)); |
| 1927 EXPECT_EQ(c5.size(), 5); | 1925 EXPECT_EQ(c5.size(), 5); |
| 1928 | 1926 |
| 1929 // Make sure the destructor closes the find handle while in the middle of a | 1927 // Make sure the destructor closes the find handle while in the middle of a |
| 1930 // query to allow TearDown to delete the directory. | 1928 // query to allow TearDown to delete the directory. |
| 1931 file_util::FileEnumerator f6(temp_dir_.path(), true, FILES_AND_DIRECTORIES); | 1929 FileEnumerator f6(temp_dir_.path(), true, FILES_AND_DIRECTORIES); |
| 1932 EXPECT_FALSE(f6.Next().value().empty()); // Should have found something | 1930 EXPECT_FALSE(f6.Next().value().empty()); // Should have found something |
| 1933 // (we don't care what). | 1931 // (we don't care what). |
| 1934 } | 1932 } |
| 1935 | 1933 |
| 1936 TEST_F(FileUtilTest, AppendToFile) { | 1934 TEST_F(FileUtilTest, AppendToFile) { |
| 1937 FilePath data_dir = | 1935 FilePath data_dir = |
| 1938 temp_dir_.path().Append(FILE_PATH_LITERAL("FilePathTest")); | 1936 temp_dir_.path().Append(FILE_PATH_LITERAL("FilePathTest")); |
| 1939 | 1937 |
| 1940 // Create a fresh, empty copy of this directory. | 1938 // Create a fresh, empty copy of this directory. |
| 1941 if (file_util::PathExists(data_dir)) { | 1939 if (file_util::PathExists(data_dir)) { |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2378 file_util::VerifyPathControlledByUser( | 2376 file_util::VerifyPathControlledByUser( |
| 2379 base_dir_, text_file_, uid_, ok_gids_)); | 2377 base_dir_, text_file_, uid_, ok_gids_)); |
| 2380 EXPECT_TRUE( | 2378 EXPECT_TRUE( |
| 2381 file_util::VerifyPathControlledByUser( | 2379 file_util::VerifyPathControlledByUser( |
| 2382 sub_dir_, text_file_, uid_, ok_gids_)); | 2380 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2383 } | 2381 } |
| 2384 | 2382 |
| 2385 #endif // defined(OS_POSIX) | 2383 #endif // defined(OS_POSIX) |
| 2386 | 2384 |
| 2387 } // namespace | 2385 } // namespace |
| OLD | NEW |