summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi
diff options
context:
space:
mode:
authoryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-04 08:59:12 +0000
committeryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-04 08:59:12 +0000
commitc7542ea6a0556617940895d616a68bb4f0046d68 (patch)
tree727d035ded3fe4402d1fb9340541ef4d717d509b /webkit/fileapi
parent23eaecab077c69c3d35326c40678721e721d0697 (diff)
downloadchromium_src-c7542ea6a0556617940895d616a68bb4f0046d68.zip
chromium_src-c7542ea6a0556617940895d616a68bb4f0046d68.tar.gz
chromium_src-c7542ea6a0556617940895d616a68bb4f0046d68.tar.bz2
Add NativeFileUtil unit tests
BUG=170564 Review URL: https://chromiumcodereview.appspot.com/12088083 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180368 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi')
-rw-r--r--webkit/fileapi/native_file_util.h3
-rw-r--r--webkit/fileapi/native_file_util_unittest.cc339
2 files changed, 339 insertions, 3 deletions
diff --git a/webkit/fileapi/native_file_util.h b/webkit/fileapi/native_file_util.h
index 55f3297..607e750 100644
--- a/webkit/fileapi/native_file_util.h
+++ b/webkit/fileapi/native_file_util.h
@@ -27,9 +27,6 @@ namespace fileapi {
//
// Note that all the methods of this class are static and this does NOT
// inherit from FileSystemFileUtil.
-//
-// TODO(dmikurube): Add unit tests for NativeFileUtil.
-// http://crbug.com/170564
class WEBKIT_STORAGE_EXPORT_PRIVATE NativeFileUtil {
public:
static base::PlatformFileError CreateOrOpen(
diff --git a/webkit/fileapi/native_file_util_unittest.cc b/webkit/fileapi/native_file_util_unittest.cc
new file mode 100644
index 0000000..2121a3e
--- /dev/null
+++ b/webkit/fileapi/native_file_util_unittest.cc
@@ -0,0 +1,339 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/file_path.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/platform_file.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/fileapi/native_file_util.h"
+
+namespace fileapi {
+
+class NativeFileUtilTest : public testing::Test {
+ public:
+ NativeFileUtilTest() {}
+
+ void SetUp() {
+ ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
+ }
+
+ protected:
+ FilePath Path() {
+ return data_dir_.path();
+ }
+
+ FilePath Path(const char* file_name) {
+ return data_dir_.path().AppendASCII(file_name);
+ }
+
+ bool FileExists(const FilePath& path) {
+ return file_util::PathExists(path) &&
+ !file_util::DirectoryExists(path);
+ }
+
+ int64 GetSize(const FilePath& path) {
+ base::PlatformFileInfo info;
+ file_util::GetFileInfo(path, &info);
+ return info.size;
+ }
+
+ private:
+ base::ScopedTempDir data_dir_;
+
+ DISALLOW_COPY_AND_ASSIGN(NativeFileUtilTest);
+};
+
+TEST_F(NativeFileUtilTest, CreateCloseAndDeleteFile) {
+ FilePath file_name = Path("test_file");
+ base::PlatformFile file_handle;
+ bool created = false;
+ int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateOrOpen(file_name,
+ base::PLATFORM_FILE_CREATE | flags,
+ &file_handle, &created));
+ ASSERT_TRUE(created);
+
+ EXPECT_TRUE(file_util::PathExists(file_name));
+ EXPECT_TRUE(NativeFileUtil::PathExists(file_name));
+ EXPECT_EQ(0, GetSize(file_name));
+ EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK, NativeFileUtil::Close(file_handle));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateOrOpen(file_name,
+ base::PLATFORM_FILE_OPEN | flags,
+ &file_handle, &created));
+ ASSERT_FALSE(created);
+ ASSERT_EQ(base::PLATFORM_FILE_OK, NativeFileUtil::Close(file_handle));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::DeleteFile(file_name));
+ EXPECT_FALSE(file_util::PathExists(file_name));
+ EXPECT_FALSE(NativeFileUtil::PathExists(file_name));
+}
+
+TEST_F(NativeFileUtilTest, EnsureFileExists) {
+ FilePath file_name = Path("foobar");
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(file_name, &created));
+ ASSERT_TRUE(created);
+
+ EXPECT_TRUE(FileExists(file_name));
+ EXPECT_EQ(0, GetSize(file_name));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(file_name, &created));
+ EXPECT_FALSE(created);
+}
+
+TEST_F(NativeFileUtilTest, CreateAndDeleteDirectory) {
+ FilePath dir_name = Path("test_dir");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateDirectory(dir_name,
+ false /* exclusive */,
+ false /* recursive */));
+
+ EXPECT_TRUE(NativeFileUtil::DirectoryExists(dir_name));
+ EXPECT_TRUE(file_util::DirectoryExists(dir_name));
+
+ ASSERT_EQ(base::PLATFORM_FILE_ERROR_EXISTS,
+ NativeFileUtil::CreateDirectory(dir_name,
+ true /* exclusive */,
+ false /* recursive */));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::DeleteDirectory (dir_name));
+ EXPECT_FALSE(file_util::DirectoryExists(dir_name));
+ EXPECT_FALSE(NativeFileUtil::DirectoryExists(dir_name));
+}
+
+TEST_F(NativeFileUtilTest, TouchFileAndGetFileInfo) {
+ FilePath file_name = Path("test_file");
+ base::PlatformFileInfo native_info;
+ ASSERT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::GetFileInfo(file_name, &native_info));
+
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(file_name, &created));
+ ASSERT_TRUE(created);
+
+ base::PlatformFileInfo info;
+ ASSERT_TRUE(file_util::GetFileInfo(file_name, &info));
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::GetFileInfo(file_name, &native_info));
+ ASSERT_EQ(info.size, native_info.size);
+ ASSERT_EQ(info.is_directory, native_info.is_directory);
+ ASSERT_EQ(info.is_symbolic_link, native_info.is_symbolic_link);
+ ASSERT_EQ(info.last_modified, native_info.last_modified);
+ ASSERT_EQ(info.last_accessed, native_info.last_accessed);
+ ASSERT_EQ(info.creation_time, native_info.creation_time);
+
+ const base::Time new_accessed =
+ info.last_accessed + base::TimeDelta::FromHours(10);
+ const base::Time new_modified =
+ info.last_modified + base::TimeDelta::FromHours(5);
+
+ EXPECT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::Touch(file_name,
+ new_accessed, new_modified));
+
+ ASSERT_TRUE(file_util::GetFileInfo(file_name, &info));
+ EXPECT_EQ(new_accessed, info.last_accessed);
+ EXPECT_EQ(new_modified, info.last_modified);
+}
+
+TEST_F(NativeFileUtilTest, CreateFileEnumerator) {
+ FilePath path_1 = Path("dir1");
+ FilePath path_2 = Path("file1");
+ FilePath path_11 = Path("dir1").AppendASCII("file11");
+ FilePath path_12 = Path("dir1").AppendASCII("dir12");
+ FilePath path_121 = Path("dir1").AppendASCII("dir12").AppendASCII("file121");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateDirectory(path_1, false, false));
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(path_2, &created));
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(path_11, &created));
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateDirectory(path_12, false, false));
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(path_121, &created));
+
+ {
+ scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> enumerator =
+ NativeFileUtil::CreateFileEnumerator(Path(), false);
+ std::set<FilePath> set;
+ set.insert(path_1);
+ set.insert(path_2);
+ for (FilePath path = enumerator->Next(); !path.empty();
+ path = enumerator->Next())
+ EXPECT_EQ(1U, set.erase(path));
+ EXPECT_TRUE(set.empty());
+ }
+
+ {
+ scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> enumerator =
+ NativeFileUtil::CreateFileEnumerator(Path(), true);
+ std::set<FilePath> set;
+ set.insert(path_1);
+ set.insert(path_2);
+ set.insert(path_11);
+ set.insert(path_12);
+ set.insert(path_121);
+ for (FilePath path = enumerator->Next(); !path.empty();
+ path = enumerator->Next())
+ EXPECT_EQ(1U, set.erase(path));
+ EXPECT_TRUE(set.empty());
+ }
+}
+
+TEST_F(NativeFileUtilTest, Truncate) {
+ FilePath file_name = Path("truncated");
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(file_name, &created));
+ ASSERT_TRUE(created);
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::Truncate(file_name, 1020));
+
+ EXPECT_TRUE(FileExists(file_name));
+ EXPECT_EQ(1020, GetSize(file_name));
+}
+
+TEST_F(NativeFileUtilTest, CopyFile) {
+ FilePath from_file = Path("fromfile");
+ FilePath to_file1 = Path("tofile1");
+ FilePath to_file2 = Path("tofile2");
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(from_file, &created));
+ ASSERT_TRUE(created);
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::Truncate(from_file, 1020));
+
+ EXPECT_TRUE(FileExists(from_file));
+ EXPECT_EQ(1020, GetSize(from_file));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CopyOrMoveFile(from_file, to_file1, true));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CopyOrMoveFile(from_file, to_file2, true));
+
+ EXPECT_TRUE(FileExists(from_file));
+ EXPECT_EQ(1020, GetSize(from_file));
+ EXPECT_TRUE(FileExists(to_file1));
+ EXPECT_EQ(1020, GetSize(to_file1));
+ EXPECT_TRUE(FileExists(to_file2));
+ EXPECT_EQ(1020, GetSize(to_file2));
+
+ FilePath dir = Path("dir");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateDirectory(dir, false, false));
+ ASSERT_TRUE(file_util::DirectoryExists(dir));
+ FilePath to_dir_file = dir.AppendASCII("file");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CopyOrMoveFile(from_file, to_dir_file, true));
+ EXPECT_TRUE(FileExists(to_dir_file));
+ EXPECT_EQ(1020, GetSize(to_dir_file));
+
+ // Following tests are error checking.
+ // Source doesn't exist.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(Path("nonexists"), Path("file"),
+ true));
+
+ // Source is not a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_A_FILE,
+ NativeFileUtil::CopyOrMoveFile(dir, Path("file"), true));
+ // Destination is not a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_INVALID_OPERATION,
+ NativeFileUtil::CopyOrMoveFile(from_file, dir, true));
+ // Destination's parent doesn't exist.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(from_file,
+ Path("nodir").AppendASCII("file"),
+ true));
+ // Destination's parent is a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(from_file,
+ Path("tofile1").AppendASCII("file"),
+ true));
+}
+
+TEST_F(NativeFileUtilTest, MoveFile) {
+ FilePath from_file = Path("fromfile");
+ FilePath to_file = Path("tofile");
+ bool created = false;
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(from_file, &created));
+ ASSERT_TRUE(created);
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK, NativeFileUtil::Truncate(from_file, 1020));
+
+ EXPECT_TRUE(FileExists(from_file));
+ EXPECT_EQ(1020, GetSize(from_file));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CopyOrMoveFile(from_file, to_file, false));
+
+ EXPECT_FALSE(FileExists(from_file));
+ EXPECT_TRUE(FileExists(to_file));
+ EXPECT_EQ(1020, GetSize(to_file));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(from_file, &created));
+ ASSERT_TRUE(FileExists(from_file));
+ ASSERT_EQ(base::PLATFORM_FILE_OK, NativeFileUtil::Truncate(from_file, 1020));
+
+ FilePath dir = Path("dir");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CreateDirectory(dir, false, false));
+ ASSERT_TRUE(file_util::DirectoryExists(dir));
+ FilePath to_dir_file = dir.AppendASCII("file");
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::CopyOrMoveFile(from_file, to_dir_file, false));
+ EXPECT_FALSE(FileExists(from_file));
+ EXPECT_TRUE(FileExists(to_dir_file));
+ EXPECT_EQ(1020, GetSize(to_dir_file));
+
+ // Following is error checking.
+ // Source doesn't exist.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(Path("nonexists"), Path("file"),
+ false));
+
+ // Source is not a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_A_FILE,
+ NativeFileUtil::CopyOrMoveFile(dir, Path("file"), false));
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(from_file, &created));
+ ASSERT_TRUE(FileExists(from_file));
+ // Destination is not a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_INVALID_OPERATION,
+ NativeFileUtil::CopyOrMoveFile(from_file, dir, false));
+
+ ASSERT_EQ(base::PLATFORM_FILE_OK,
+ NativeFileUtil::EnsureFileExists(from_file, &created));
+ ASSERT_TRUE(FileExists(from_file));
+ // Destination's parent doesn't exist.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(from_file,
+ Path("nodir").AppendASCII("file"),
+ false));
+ // Destination's parent is a file.
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
+ NativeFileUtil::CopyOrMoveFile(from_file,
+ Path("tofile1").AppendASCII("file"),
+ false));
+}
+
+} // namespace fileapi