Chromium Code Reviews| Index: webkit/fileapi/obfuscated_file_util_unittest.cc |
| diff --git a/webkit/fileapi/obfuscated_file_util_unittest.cc b/webkit/fileapi/obfuscated_file_util_unittest.cc |
| index 75ba9568e8cf9d60c1d78cb705ef5c8005497f34..2831bc4878e107bf070b6922a2adf39d29fe3182 100644 |
| --- a/webkit/fileapi/obfuscated_file_util_unittest.cc |
| +++ b/webkit/fileapi/obfuscated_file_util_unittest.cc |
| @@ -476,6 +476,71 @@ class ObfuscatedFileUtilTest : public testing::Test { |
| ofu()->DeleteFile(context.get(), dest_path)); |
| } |
| + void ClearTimestamp(const FilePath& path) { |
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->Touch(context.get(), path, base::Time(), base::Time())); |
| + base::PlatformFileInfo file_info; |
| + FilePath data_path; |
|
ericu
2011/12/05 21:43:50
This could use GetModifiedTime here.
tzik
2011/12/06 05:13:50
Done.
|
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->GetFileInfo(context.get(), path, &file_info, &data_path)); |
| + EXPECT_EQ(base::Time(), file_info.last_modified); |
| + } |
| + |
| + base::Time GetModifiedTime(const FilePath& path) { |
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| + FilePath data_path; |
| + base::PlatformFileInfo file_info; |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->GetFileInfo(context.get(), path, &file_info, &data_path)); |
| + return file_info.last_modified; |
| + } |
| + |
| + void TestDirectoryTimestampHelper(const FilePath& base_dir, |
| + bool copy, |
| + bool overwrite) { |
| + scoped_ptr<FileSystemOperationContext> context; |
| + const FilePath src_dir_path(base_dir.AppendASCII("foo_dir")); |
| + const FilePath dest_dir_path(base_dir.AppendASCII("bar_dir")); |
| + |
| + const FilePath src_file_path(src_dir_path.AppendASCII("hoge")); |
| + const FilePath dest_file_path(dest_dir_path.AppendASCII("fuga")); |
| + |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), src_dir_path, true, true)); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), dest_dir_path, true, true)); |
| + |
| + bool created = false; |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), src_file_path, &created)); |
| + if (overwrite) { |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), |
| + dest_file_path, &created)); |
| + } |
| + |
| + ClearTimestamp(src_dir_path); |
| + ClearTimestamp(dest_dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CopyOrMoveFile(context.get(), |
| + src_file_path, dest_file_path, |
| + copy)); |
| + |
| + if (copy) |
| + EXPECT_EQ(base::Time(), GetModifiedTime(src_dir_path)); |
| + else |
| + EXPECT_NE(base::Time(), GetModifiedTime(src_dir_path)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dest_dir_path)); |
| + } |
| + |
| private: |
| ScopedTempDir data_dir_; |
| scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_; |
| @@ -1440,3 +1505,190 @@ TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) { |
| ofu()->ReadDirectory(context.get(), FilePath(), &entries)); |
| EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size()); |
| } |
| + |
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) { |
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| + const FilePath dir_path(FILE_PATH_LITERAL("foo_dir")); |
| + |
| + // Create working directory. |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), dir_path, false, false)); |
| + |
| + // EnsureFileExists, create case. |
|
ericu
2011/12/05 21:43:50
Please add a fail case as well [perhaps trying to
tzik
2011/12/06 05:13:50
Done.
|
| + FilePath path(dir_path.AppendASCII("EnsureFileExists_file")); |
| + bool created = false; |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), path, &created)); |
| + EXPECT_TRUE(created); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // non create case. |
| + created = true; |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), path, &created)); |
| + EXPECT_FALSE(created); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // CreateOrOpen, create case. |
| + path = dir_path.AppendASCII("CreateOrOpen_file"); |
| + PlatformFile file_handle = base::kInvalidPlatformFileValue; |
| + created = false; |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateOrOpen( |
| + context.get(), path, |
| + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
| + &file_handle, &created)); |
| + EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); |
| + EXPECT_TRUE(created); |
| + EXPECT_TRUE(base::ClosePlatformFile(file_handle)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // open case. |
| + file_handle = base::kInvalidPlatformFileValue; |
| + created = true; |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateOrOpen( |
| + context.get(), path, |
| + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE, |
| + &file_handle, &created)); |
| + EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); |
| + EXPECT_FALSE(created); |
| + EXPECT_TRUE(base::ClosePlatformFile(file_handle)); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // fail case |
| + file_handle = base::kInvalidPlatformFileValue; |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, |
| + ofu()->CreateOrOpen( |
| + context.get(), path, |
| + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
| + &file_handle, &created)); |
| + EXPECT_EQ(base::kInvalidPlatformFileValue, file_handle); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // CreateDirectory, create case. |
| + path = dir_path.AppendASCII("CreateDirectory_dir/1/2/3"); |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), path, |
| + true /* exclusive */, true /* recursive */)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // create subdir case. |
| + path = dir_path.AppendASCII("CreateDirectory_dir/1/4/5"); |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), path, |
| + true /* exclusive */, true /* recursive */)); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
|
ericu
2011/12/05 21:43:50
Please also check that the timestamp on CreateDire
tzik
2011/12/06 05:13:50
Done.
|
| + |
| + // fail case. |
| + path = dir_path.AppendASCII("CreateDirectory_dir"); |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, |
| + ofu()->CreateDirectory(context.get(), path, |
| + true /* exclusive */, true /* recursive */)); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // CopyInForeignFile, create case. |
| + path = dir_path.AppendASCII("CopyInForeignFile_file"); |
| + FilePath src_path = dir_path.AppendASCII("CopyInForeignFile_src_file"); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), src_path, &created)); |
| + EXPECT_TRUE(created); |
| + FilePath src_local_path; |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->GetLocalFilePath(context.get(), src_path, &src_local_path)); |
| + |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CopyInForeignFile(context.get(), src_local_path, path)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| + |
| +} |
| + |
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForDeletion) { |
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| + const FilePath dir_path(FILE_PATH_LITERAL("foo_dir")); |
| + |
| + // Create working directory. |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), dir_path, false, false)); |
| + |
| + // DeleteFile, delete case. |
| + FilePath path = dir_path.AppendASCII("DeleteFile_file"); |
| + bool created = false; |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), path, &created)); |
| + EXPECT_TRUE(created); |
| + |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->DeleteFile(context.get(), path)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // fail case. |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| + ofu()->DeleteFile(context.get(), path)); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // DeleteSingleDirectory, fail case. |
| + path = dir_path.AppendASCII("DeleteSingleDirectory_dir"); |
| + FilePath file_path(path.AppendASCII("pakeratta")); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->CreateDirectory(context.get(), path, true, true)); |
| + created = false; |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->EnsureFileExists(context.get(), file_path, &created)); |
| + EXPECT_TRUE(created); |
| + |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY, |
| + ofu()->DeleteSingleDirectory(context.get(), path)); |
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| + |
| + // delete case. |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->DeleteFile(context.get(), file_path)); |
| + |
| + ClearTimestamp(dir_path); |
| + context.reset(NewContext(NULL)); |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, |
| + ofu()->DeleteSingleDirectory(context.get(), path)); |
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| +} |
| + |
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCopyAndMove) { |
| + TestDirectoryTimestampHelper( |
| + FilePath(FILE_PATH_LITERAL("copy overwrite")), true, true); |
| + TestDirectoryTimestampHelper( |
| + FilePath(FILE_PATH_LITERAL("copy non-overwrite")), true, false); |
| + TestDirectoryTimestampHelper( |
| + FilePath(FILE_PATH_LITERAL("move overwrite")), false, true); |
| + TestDirectoryTimestampHelper( |
| + FilePath(FILE_PATH_LITERAL("move non-overwrite")),false, false); |
| +} |