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

Unified Diff: webkit/fileapi/obfuscated_file_util_unittest.cc

Issue 8728029: Update mtime of directory when containee changed. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: '' Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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);
+}
« webkit/fileapi/obfuscated_file_util.cc ('K') | « webkit/fileapi/obfuscated_file_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698