Chromium Code Reviews| Index: chrome/browser/sync_file_system/remote_sync_operation_resolver_unittest.cc |
| diff --git a/chrome/browser/sync_file_system/remote_sync_operation_resolver_unittest.cc b/chrome/browser/sync_file_system/remote_sync_operation_resolver_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9dcdaa2b1308ac53ab1779df5e2b2266b8429325 |
| --- /dev/null |
| +++ b/chrome/browser/sync_file_system/remote_sync_operation_resolver_unittest.cc |
| @@ -0,0 +1,390 @@ |
| +// 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 <vector> |
| + |
| +#include "chrome/browser/sync_file_system/remote_sync_operation_resolver.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "webkit/fileapi/syncable/file_change.h" |
| +#include "webkit/fileapi/syncable/sync_file_type.h" |
| + |
| +namespace sync_file_system { |
| + |
| +namespace { |
| + |
| +struct Input { |
| + SyncFileType local_file_type; |
| + FileChangeList local_changes; |
| +}; |
| + |
| +template <typename type, size_t array_size> |
| +std::vector<type> CreateList(const type (&inputs)[array_size]) { |
| + return std::vector<type>(inputs, inputs + array_size); |
| +} |
| + |
| +FileChangeList CreateNoneChange() { |
|
kinuko
2013/04/24 14:54:50
nit: None -> Empty?
nhiroki
2013/04/25 06:54:43
Done.
|
| + return FileChangeList(); |
| +} |
| + |
| +FileChangeList CreateAddOrUpdateFileChange() { |
| + FileChangeList list; |
| + list.Update(FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| + SYNC_FILE_TYPE_FILE)); |
| + return list; |
| +} |
| + |
| +FileChangeList CreateAddDirectoryChange() { |
| + FileChangeList list; |
| + list.Update(FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| + SYNC_FILE_TYPE_DIRECTORY)); |
| + return list; |
| +} |
| + |
| +FileChangeList CreateDeleteFileChange() { |
| + FileChangeList list; |
| + list.Update(FileChange(FileChange::FILE_CHANGE_DELETE, |
| + SYNC_FILE_TYPE_FILE)); |
| + return list; |
| +} |
| + |
| +FileChangeList CreateDeleteDirectoryChange() { |
| + FileChangeList list; |
| + list.Update(FileChange(FileChange::FILE_CHANGE_DELETE, |
| + SYNC_FILE_TYPE_DIRECTORY)); |
| + return list; |
| +} |
| + |
| +std::vector<Input> CreateInput() { |
| + const Input inputs[] = { |
| + { SYNC_FILE_TYPE_UNKNOWN, CreateNoneChange() }, |
| + { SYNC_FILE_TYPE_UNKNOWN, CreateAddOrUpdateFileChange() }, |
| + { SYNC_FILE_TYPE_UNKNOWN, CreateAddDirectoryChange() }, |
| + { SYNC_FILE_TYPE_UNKNOWN, CreateDeleteFileChange() }, |
| + { SYNC_FILE_TYPE_UNKNOWN, CreateDeleteDirectoryChange() }, |
| + |
| + { SYNC_FILE_TYPE_FILE, CreateNoneChange() }, |
| + { SYNC_FILE_TYPE_FILE, CreateAddOrUpdateFileChange() }, |
| + { SYNC_FILE_TYPE_FILE, CreateAddDirectoryChange() }, |
| + { SYNC_FILE_TYPE_FILE, CreateDeleteFileChange() }, |
| + { SYNC_FILE_TYPE_FILE, CreateDeleteDirectoryChange() }, |
| + |
| + { SYNC_FILE_TYPE_DIRECTORY, CreateNoneChange() }, |
| + { SYNC_FILE_TYPE_DIRECTORY, CreateAddOrUpdateFileChange() }, |
| + { SYNC_FILE_TYPE_DIRECTORY, CreateAddDirectoryChange() }, |
| + { SYNC_FILE_TYPE_DIRECTORY, CreateDeleteFileChange() }, |
| + { SYNC_FILE_TYPE_DIRECTORY, CreateDeleteDirectoryChange() }, |
| + }; |
| + return CreateList(inputs); |
| +} |
| + |
| +} // namespace |
| + |
| +class RemoteSyncOperationResolverTest : public testing::Test { |
| + public: |
| + RemoteSyncOperationResolverTest() {} |
| + |
| + protected: |
| + typedef RemoteSyncOperationResolver Resolver; |
| + typedef std::vector<Resolver::RemoteSyncOperationType> ExpectedTypes; |
| + |
| + void VerifyResolveForAddOrUpdateFile( |
|
kinuko
2013/04/24 14:54:50
Are these Verify* helper methods in order to acces
nhiroki
2013/04/25 06:54:43
Done.
|
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForAddOrUpdateFile( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForAddOrUpdateFileInConflict( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForAddOrUpdateFileInConflict( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForAddDirectory( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForAddDirectory( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForAddDirectoryInConflict( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForAddDirectoryInConflict( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForDeleteFile( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForDeleteFile( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForDeleteFileInConflict( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForDeleteFileInConflict( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForDeleteDirectory( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForDeleteDirectory( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + void VerifyResolveForDeleteDirectoryInConflict( |
| + Resolver::RemoteSyncOperationType expected_type, |
| + const Input& input) { |
| + EXPECT_EQ(expected_type, |
| + Resolver::ResolveForDeleteDirectoryInConflict( |
| + input.local_changes, input.local_file_type)); |
| + } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(RemoteSyncOperationResolverTest); |
| +}; |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForAddOrUpdateFile) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_ADD_FILE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_ADD_FILE, |
| + Resolver::REMOTE_SYNC_OPERATION_ADD_FILE, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_UPDATE_FILE, |
| + Resolver::REMOTE_SYNC_OPERATION_CONFLICT, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForAddOrUpdateFile(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForAddOrUpdateFileInConflict) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_CONFLICT, |
| + Resolver::REMOTE_SYNC_OPERATION_CONFLICT, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForAddOrUpdateFileInConflict(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForAddDirectory) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_ADD_DIRECTORY, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForAddDirectory(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForAddDirectoryInConflict) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForAddDirectoryInConflict(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteFile) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_FILE, |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < inputs.size(); ++i) |
| + VerifyResolveForDeleteFile(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteFileInConflict) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForDeleteFileInConflict(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteDirectory) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + Resolver::REMOTE_SYNC_OPERATION_NONE, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_DIRECTORY, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForDeleteDirectory(expected_types[i], inputs[i]); |
| +} |
| + |
| +TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteDirectoryInConflict) { |
| + const Resolver::RemoteSyncOperationType kExpectedTypes[] = { |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_METADATA, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + |
| + Resolver::REMOTE_SYNC_OPERATION_DELETE_DIRECTORY, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + Resolver::REMOTE_SYNC_OPERATION_FAIL, |
| + }; |
| + |
| + ExpectedTypes expected_types = CreateList(kExpectedTypes); |
| + std::vector<Input> inputs = CreateInput(); |
| + |
| + ASSERT_EQ(expected_types.size(), inputs.size()); |
| + for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i) |
| + VerifyResolveForDeleteDirectoryInConflict(expected_types[i], inputs[i]); |
| +} |
| + |
| +} // namespace sync_file_system |