| Index: webkit/fileapi/isolated_file_util_unittest.cc
|
| diff --git a/webkit/fileapi/isolated_file_util_unittest.cc b/webkit/fileapi/isolated_file_util_unittest.cc
|
| index 448cbef8c6f9f4a61772de1088a92ac878444544..faf83d76b5b662a7d167284ce547ca1e0405d226 100644
|
| --- a/webkit/fileapi/isolated_file_util_unittest.cc
|
| +++ b/webkit/fileapi/isolated_file_util_unittest.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include <map>
|
| +#include <queue>
|
| #include <set>
|
| #include <string>
|
| #include <vector>
|
| @@ -14,11 +15,11 @@
|
| #include "base/message_loop_proxy.h"
|
| #include "base/time.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "webkit/fileapi/async_file_test_helper.h"
|
| #include "webkit/fileapi/external_mount_points.h"
|
| #include "webkit/fileapi/file_system_context.h"
|
| #include "webkit/fileapi/file_system_operation_context.h"
|
| #include "webkit/fileapi/file_system_task_runners.h"
|
| -#include "webkit/fileapi/file_util_helper.h"
|
| #include "webkit/fileapi/isolated_context.h"
|
| #include "webkit/fileapi/isolated_file_util.h"
|
| #include "webkit/fileapi/local_file_system_operation.h"
|
| @@ -35,6 +36,8 @@ namespace fileapi {
|
|
|
| namespace {
|
|
|
| +typedef AsyncFileTestHelper::FileEntryList FileEntryList;
|
| +
|
| // Used in IsolatedFileUtilTest::SimulateDropFiles().
|
| // Random root paths in which we create each file/directory of the
|
| // RegularTestCases (so that we can simulate a drop with files/directories
|
| @@ -51,12 +54,41 @@ base::FilePath GetTopLevelPath(const base::FilePath& path) {
|
| return base::FilePath(components[0]);
|
| }
|
|
|
| -bool IsDirectoryEmpty(FileSystemOperationContext* context,
|
| - FileSystemFileUtil* file_util,
|
| - const FileSystemURL& url) {
|
| - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum =
|
| - file_util->CreateFileEnumerator(context, url, false /* recursive */);
|
| - return file_enum->Next().empty();
|
| +bool IsDirectoryEmpty(FileSystemContext* context, const FileSystemURL& url) {
|
| + FileEntryList entries;
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::ReadDirectory(context, url, &entries));
|
| + return entries.empty();
|
| +}
|
| +
|
| +FileSystemURL GetEntryURL(FileSystemContext* file_system_context,
|
| + const FileSystemURL& dir,
|
| + const FilePath::StringType& name) {
|
| + return file_system_context->CreateCrackedFileSystemURL(
|
| + dir.origin(),
|
| + dir.mount_type(),
|
| + dir.virtual_path().Append(name));
|
| +}
|
| +
|
| +FilePath GetRelativeVirtualPath(const FileSystemURL& root,
|
| + const FileSystemURL& url) {
|
| + if (root.virtual_path().empty())
|
| + return url.virtual_path();
|
| + FilePath relative;
|
| + const bool success = root.virtual_path().AppendRelativePath(
|
| + url.virtual_path(), &relative);
|
| + DCHECK(success);
|
| + return relative;
|
| +}
|
| +
|
| +FileSystemURL GetOtherURL(FileSystemContext* file_system_context,
|
| + const FileSystemURL& root,
|
| + const FileSystemURL& other_root,
|
| + const FileSystemURL& url) {
|
| + return file_system_context->CreateCrackedFileSystemURL(
|
| + other_root.origin(),
|
| + other_root.mount_type(),
|
| + other_root.virtual_path().Append(GetRelativeVirtualPath(root, url)));
|
| }
|
|
|
| } // namespace
|
| @@ -65,8 +97,7 @@ bool IsDirectoryEmpty(FileSystemOperationContext* context,
|
| // IsolatedFileUtil.
|
| class IsolatedFileUtilTest : public testing::Test {
|
| public:
|
| - IsolatedFileUtilTest()
|
| - : other_file_util_helper_(GURL("http://foo/"), kFileSystemTypeTest) {}
|
| + IsolatedFileUtilTest() {}
|
|
|
| virtual void SetUp() {
|
| ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
|
| @@ -85,15 +116,11 @@ class IsolatedFileUtilTest : public testing::Test {
|
| partition_dir_.path(),
|
| CreateAllowFileAccessOptions());
|
|
|
| - // For cross-FileUtil copy/move tests.
|
| - other_file_util_helper_.SetUp(file_system_context_);
|
| -
|
| isolated_context()->AddReference(filesystem_id_);
|
| }
|
|
|
| virtual void TearDown() {
|
| isolated_context()->RemoveReference(filesystem_id_);
|
| - other_file_util_helper_.TearDown();
|
| }
|
|
|
| protected:
|
| @@ -107,14 +134,12 @@ class IsolatedFileUtilTest : public testing::Test {
|
| return file_system_context_.get();
|
| }
|
| FileSystemFileUtil* file_util() const { return file_util_.get(); }
|
| - FileSystemFileUtil* other_file_util() const {
|
| - return other_file_util_helper_.file_util();
|
| - }
|
| std::string filesystem_id() const { return filesystem_id_; }
|
|
|
| - base::FilePath GetTestCasePlatformPath(const base::FilePath::StringType& path) {
|
| - return toplevel_root_map_[GetTopLevelPath(base::FilePath(path))].Append(path).
|
| - NormalizePathSeparators();
|
| + base::FilePath GetTestCasePlatformPath(
|
| + const base::FilePath::StringType& path) {
|
| + return toplevel_root_map_[GetTopLevelPath(base::FilePath(path))]
|
| + .Append(path).NormalizePathSeparators();
|
| }
|
|
|
| base::FilePath GetTestCaseLocalPath(const base::FilePath& path) {
|
| @@ -133,31 +158,28 @@ class IsolatedFileUtilTest : public testing::Test {
|
| virtual_path);
|
| }
|
|
|
| - FileSystemURL GetOtherFileSystemURL(const base::FilePath& path) {
|
| - return other_file_util_helper_.CreateURL(GetTestCaseLocalPath(path));
|
| + FileSystemURL GetOtherFileSystemURL(const base::FilePath& path) const {
|
| + return file_system_context()->CreateCrackedFileSystemURL(
|
| + GURL("http://example.com"),
|
| + kFileSystemTypeTemporary,
|
| + FilePath().AppendASCII("dest").Append(path));
|
| }
|
|
|
| - void VerifyFilesHaveSameContent(FileSystemFileUtil* file_util1,
|
| - FileSystemFileUtil* file_util2,
|
| - const FileSystemURL& url1,
|
| + void VerifyFilesHaveSameContent(const FileSystemURL& url1,
|
| const FileSystemURL& url2) {
|
| - scoped_ptr<FileSystemOperationContext> context;
|
| -
|
| // Get the file info for url1.
|
| base::PlatformFileInfo info1;
|
| - base::FilePath platform_path1;
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| + FilePath platform_path1;
|
| ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - file_util1->GetFileInfo(context.get(), url1,
|
| - &info1, &platform_path1));
|
| + AsyncFileTestHelper::GetMetadata(
|
| + file_system_context(), url1, &info1, &platform_path1));
|
|
|
| // Get the file info for url2.
|
| base::PlatformFileInfo info2;
|
| base::FilePath platform_path2;
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - file_util2->GetFileInfo(context.get(), url2,
|
| - &info2, &platform_path2));
|
| + AsyncFileTestHelper::GetMetadata(
|
| + file_system_context(), url2, &info2, &platform_path2));
|
|
|
| // See if file info matches with the other one.
|
| EXPECT_EQ(info1.is_directory, info2.is_directory);
|
| @@ -171,48 +193,57 @@ class IsolatedFileUtilTest : public testing::Test {
|
| EXPECT_EQ(content1, content2);
|
| }
|
|
|
| - void VerifyDirectoriesHaveSameContent(FileSystemFileUtil* file_util1,
|
| - FileSystemFileUtil* file_util2,
|
| - const FileSystemURL& root1,
|
| + void VerifyDirectoriesHaveSameContent(const FileSystemURL& root1,
|
| const FileSystemURL& root2) {
|
| - scoped_ptr<FileSystemOperationContext> context;
|
| base::FilePath root_path1 = root1.path();
|
| base::FilePath root_path2 = root2.path();
|
|
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum1 =
|
| - file_util1->CreateFileEnumerator(context.get(), root1,
|
| - true /* recursive */);
|
| + FileEntryList entries;
|
| + std::queue<FileSystemURL> directories;
|
|
|
| - base::FilePath current;
|
| + directories.push(root1);
|
| std::set<base::FilePath> file_set1;
|
| - while (!(current = file_enum1->Next()).empty()) {
|
| - if (file_enum1->IsDirectory())
|
| - continue;
|
| - base::FilePath relative;
|
| - root_path1.AppendRelativePath(current, &relative);
|
| - file_set1.insert(relative);
|
| + while (!directories.empty()) {
|
| + FileSystemURL dir = directories.front();
|
| + directories.pop();
|
| +
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::ReadDirectory(
|
| + file_system_context(), dir, &entries));
|
| + for (size_t i = 0; i < entries.size(); ++i) {
|
| + FileSystemURL url = GetEntryURL(file_system_context(),
|
| + dir, entries[i].name);
|
| + if (entries[i].is_directory) {
|
| + directories.push(url);
|
| + continue;
|
| + }
|
| + file_set1.insert(GetRelativeVirtualPath(root1, url));
|
| + }
|
| }
|
|
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum2 =
|
| - file_util2->CreateFileEnumerator(context.get(), root2,
|
| - true /* recursive */);
|
| -
|
| - while (!(current = file_enum2->Next()).empty()) {
|
| - base::FilePath relative;
|
| - root_path2.AppendRelativePath(current, &relative);
|
| - FileSystemURL url1 = root1.WithPath(root_path1.Append(relative));
|
| - FileSystemURL url2 = root2.WithPath(root_path2.Append(relative));
|
| - if (file_enum2->IsDirectory()) {
|
| - FileSystemOperationContext context1(file_system_context());
|
| - FileSystemOperationContext context2(file_system_context());
|
| - EXPECT_EQ(IsDirectoryEmpty(&context1, file_util1, url1),
|
| - IsDirectoryEmpty(&context2, file_util2, url2));
|
| - continue;
|
| + directories.push(root2);
|
| + while (!directories.empty()) {
|
| + FileSystemURL dir = directories.front();
|
| + directories.pop();
|
| +
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::ReadDirectory(
|
| + file_system_context(), dir, &entries));
|
| + for (size_t i = 0; i < entries.size(); ++i) {
|
| + FileSystemURL url2 = GetEntryURL(file_system_context(),
|
| + dir, entries[i].name);
|
| + FileSystemURL url1 = GetOtherURL(file_system_context(),
|
| + root2, root1, url2);
|
| + if (entries[i].is_directory) {
|
| + directories.push(url2);
|
| + EXPECT_EQ(IsDirectoryEmpty(file_system_context(), url1),
|
| + IsDirectoryEmpty(file_system_context(), url2));
|
| + continue;
|
| + }
|
| + base::FilePath relative = GetRelativeVirtualPath(root2, url2);
|
| + EXPECT_TRUE(file_set1.find(relative) != file_set1.end());
|
| + VerifyFilesHaveSameContent(url1, url2);
|
| }
|
| - EXPECT_TRUE(file_set1.find(relative) != file_set1.end());
|
| - VerifyFilesHaveSameContent(file_util1, file_util2, url1, url2);
|
| }
|
| }
|
|
|
| @@ -255,7 +286,6 @@ class IsolatedFileUtilTest : public testing::Test {
|
| scoped_refptr<FileSystemContext> file_system_context_;
|
| std::map<base::FilePath, base::FilePath> toplevel_root_map_;
|
| scoped_ptr<IsolatedFileUtil> file_util_;
|
| - LocalFileSystemTestOriginHelper other_file_util_helper_;
|
| DISALLOW_COPY_AND_ASSIGN(IsolatedFileUtilTest);
|
| };
|
|
|
| @@ -336,7 +366,8 @@ TEST_F(IsolatedFileUtilTest, ReadDirectoryTest) {
|
| << ": " << test_case.path);
|
|
|
| // Read entries in the directory to construct the expected results map.
|
| - typedef std::map<base::FilePath::StringType, base::FileUtilProxy::Entry> EntryMap;
|
| + typedef std::map<base::FilePath::StringType,
|
| + base::FileUtilProxy::Entry> EntryMap;
|
| EntryMap expected_entry_map;
|
|
|
| FileEnumerator file_enum(
|
| @@ -356,11 +387,10 @@ TEST_F(IsolatedFileUtilTest, ReadDirectoryTest) {
|
|
|
| // Perform ReadDirectory in the isolated filesystem.
|
| FileSystemURL url = GetFileSystemURL(base::FilePath(test_case.path));
|
| - std::vector<base::FileUtilProxy::Entry> entries;
|
| - FileSystemOperationContext context(file_system_context());
|
| + FileEntryList entries;
|
| ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - FileUtilHelper::ReadDirectory(
|
| - &context, file_util(), url, &entries));
|
| + AsyncFileTestHelper::ReadDirectory(
|
| + file_system_context(), url, &entries));
|
|
|
| EXPECT_EQ(expected_entry_map.size(), entries.size());
|
| for (size_t i = 0; i < entries.size(); ++i) {
|
| @@ -392,82 +422,71 @@ TEST_F(IsolatedFileUtilTest, GetLocalFilePathTest) {
|
| }
|
|
|
| TEST_F(IsolatedFileUtilTest, CopyOutFileTest) {
|
| - scoped_ptr<FileSystemOperationContext> context(
|
| - new FileSystemOperationContext(file_system_context()));
|
| - FileSystemURL root_url = GetFileSystemURL(base::FilePath());
|
| - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum(
|
| - file_util()->CreateFileEnumerator(context.get(),
|
| - root_url,
|
| - true /* recursive */));
|
| - base::FilePath current;
|
| - while (!(current = file_enum->Next()).empty()) {
|
| - if (file_enum->IsDirectory())
|
| - continue;
|
| -
|
| - SCOPED_TRACE(testing::Message() << "Testing file copy "
|
| - << current.value());
|
| + FileSystemURL src_root = GetFileSystemURL(base::FilePath());
|
| + FileSystemURL dest_root = GetOtherFileSystemURL(base::FilePath());
|
|
|
| - FileSystemURL src_url = root_url.WithPath(current);
|
| - FileSystemURL dest_url = GetOtherFileSystemURL(current);
|
| + FileEntryList entries;
|
| + std::queue<FileSystemURL> directories;
|
| + directories.push(src_root);
|
|
|
| - // Create the parent directory of the destination.
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| - ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - other_file_util()->CreateDirectory(
|
| - context.get(),
|
| - GetOtherFileSystemURL(current.DirName()),
|
| - false /* exclusive */,
|
| - true /* recursive */));
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::CreateDirectory(file_system_context(),
|
| + dest_root));
|
|
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| + while (!directories.empty()) {
|
| + FileSystemURL dir = directories.front();
|
| + directories.pop();
|
| ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - FileUtilHelper::Copy(
|
| - context.get(),
|
| - file_util(), other_file_util(),
|
| - src_url, dest_url));
|
| -
|
| - VerifyFilesHaveSameContent(file_util(), other_file_util(),
|
| - src_url, dest_url);
|
| + AsyncFileTestHelper::ReadDirectory(file_system_context(),
|
| + dir, &entries));
|
| + for (size_t i = 0; i < entries.size(); ++i) {
|
| + FileSystemURL src_url = GetEntryURL(file_system_context(),
|
| + dir, entries[i].name);
|
| + FileSystemURL dest_url = GetOtherURL(file_system_context(),
|
| + src_root, dest_root, src_url);
|
| +
|
| + if (entries[i].is_directory) {
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::CreateDirectory(file_system_context(),
|
| + dest_url));
|
| + directories.push(src_url);
|
| + continue;
|
| + }
|
| + SCOPED_TRACE(testing::Message() << "Testing file copy "
|
| + << src_url.path().value());
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::Copy(file_system_context(),
|
| + src_url, dest_url));
|
| + VerifyFilesHaveSameContent(src_url, dest_url);
|
| + }
|
| }
|
| }
|
|
|
| TEST_F(IsolatedFileUtilTest, CopyOutDirectoryTest) {
|
| - scoped_ptr<FileSystemOperationContext> context(
|
| - new FileSystemOperationContext(file_system_context()));
|
| - FileSystemURL root_url = GetFileSystemURL(base::FilePath());
|
| - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum(
|
| - file_util()->CreateFileEnumerator(context.get(),
|
| - root_url,
|
| - false /* recursive */));
|
| - base::FilePath current;
|
| - while (!(current = file_enum->Next()).empty()) {
|
| - if (!file_enum->IsDirectory())
|
| + FileSystemURL src_root = GetFileSystemURL(base::FilePath());
|
| + FileSystemURL dest_root = GetOtherFileSystemURL(base::FilePath());
|
| +
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::CreateDirectory(file_system_context(),
|
| + dest_root));
|
| +
|
| + FileEntryList entries;
|
| + ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| + AsyncFileTestHelper::ReadDirectory(file_system_context(),
|
| + src_root, &entries));
|
| + for (size_t i = 0; i < entries.size(); ++i) {
|
| + if (!entries[i].is_directory)
|
| continue;
|
| -
|
| - SCOPED_TRACE(testing::Message() << "Testing directory copy "
|
| - << current.value());
|
| -
|
| - FileSystemURL src_url = root_url.WithPath(current);
|
| - FileSystemURL dest_url = GetOtherFileSystemURL(current);
|
| -
|
| - // Create the parent directory of the destination.
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| - ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - other_file_util()->CreateDirectory(
|
| - context.get(),
|
| - GetOtherFileSystemURL(current.DirName()),
|
| - false /* exclusive */,
|
| - true /* recursive */));
|
| -
|
| - context.reset(new FileSystemOperationContext(file_system_context()));
|
| + FileSystemURL src_url = GetEntryURL(file_system_context(),
|
| + src_root, entries[i].name);
|
| + FileSystemURL dest_url = GetOtherURL(file_system_context(),
|
| + src_root, dest_root, src_url);
|
| + SCOPED_TRACE(testing::Message() << "Testing file copy "
|
| + << src_url.path().value());
|
| ASSERT_EQ(base::PLATFORM_FILE_OK,
|
| - FileUtilHelper::Copy(
|
| - context.get(),
|
| - file_util(), other_file_util(),
|
| - src_url, dest_url));
|
| -
|
| - VerifyDirectoriesHaveSameContent(file_util(), other_file_util(),
|
| - src_url, dest_url);
|
| + AsyncFileTestHelper::Copy(file_system_context(),
|
| + src_url, dest_url));
|
| + VerifyDirectoriesHaveSameContent(src_url, dest_url);
|
| }
|
| }
|
|
|
|
|