| Index: chrome/browser/sync/glue/autofill_profile_model_associator_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/sync/glue/autofill_profile_model_associator_unittest.cc (revision 99989)
|
| +++ chrome/browser/sync/glue/autofill_profile_model_associator_unittest.cc (working copy)
|
| @@ -1,261 +0,0 @@
|
| -// Copyright (c) 2011 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/tracked.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/sync/internal_api/read_node_mock.h"
|
| -#include "chrome/browser/sync/internal_api/syncapi_mock.h"
|
| -#include "chrome/browser/sync/glue/autofill_profile_model_associator.h"
|
| -#include "chrome/browser/sync/syncable/syncable.h"
|
| -#include "chrome/browser/sync/syncable/syncable_mock.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -using ::testing::Return;
|
| -using ::testing::DoDefault;
|
| -using ::testing::ReturnRef;
|
| -using ::testing::Pointee;
|
| -using ::testing::Ref;
|
| -using ::testing::Invoke;
|
| -class AutofillProfile;
|
| -
|
| -using browser_sync::AutofillProfileModelAssociator;
|
| -
|
| -// Note this is not a generic mock. This is a mock used to
|
| -// test AutofillProfileModelAssociator class itself by mocking
|
| -// other functions that are called by the functions we need to test.
|
| -class MockAutofillProfileModelAssociator
|
| - : public AutofillProfileModelAssociator {
|
| - public:
|
| - MockAutofillProfileModelAssociator() {
|
| - }
|
| - virtual ~MockAutofillProfileModelAssociator() {}
|
| - bool TraverseAndAssociateChromeAutofillProfilesWrapper(
|
| - sync_api::WriteTransaction* write_trans,
|
| - const sync_api::ReadNode& autofill_root,
|
| - const std::vector<AutofillProfile*>& all_profiles_from_db,
|
| - std::set<std::string>* current_profiles,
|
| - std::vector<AutofillProfile*>* updated_profiles,
|
| - std::vector<AutofillProfile*>* new_profiles,
|
| - std::vector<std::string>* profiles_to_delete) {
|
| - return TraverseAndAssociateChromeAutofillProfiles(write_trans,
|
| - autofill_root,
|
| - all_profiles_from_db,
|
| - current_profiles,
|
| - updated_profiles,
|
| - new_profiles,
|
| - profiles_to_delete);
|
| - }
|
| - MOCK_METHOD3(AddNativeProfileIfNeeded,
|
| - void(const sync_pb::AutofillProfileSpecifics&,
|
| - DataBundle*,
|
| - const sync_api::ReadNode&));
|
| - MOCK_METHOD2(OverwriteProfileWithServerData,
|
| - bool(AutofillProfile*,
|
| - const sync_pb::AutofillProfileSpecifics&));
|
| - MOCK_METHOD6(MakeNewAutofillProfileSyncNodeIfNeeded,
|
| - bool(sync_api::WriteTransaction*,
|
| - const sync_api::BaseNode&,
|
| - const AutofillProfile&,
|
| - std::vector<AutofillProfile*>*,
|
| - std::set<std::string>*,
|
| - std::vector<std::string>*));
|
| - MOCK_METHOD2(Associate, void(const std::string*, int64));
|
| -
|
| - bool TraverseAndAssociateAllSyncNodesWrapper(
|
| - sync_api::WriteTransaction *trans,
|
| - const sync_api::ReadNode &autofill_root,
|
| - browser_sync::AutofillProfileModelAssociator::DataBundle *bundle) {
|
| - return TraverseAndAssociateAllSyncNodes(trans, autofill_root, bundle);
|
| - }
|
| -
|
| - void AddNativeProfileIfNeededWrapper(
|
| - const sync_pb::AutofillProfileSpecifics& profile,
|
| - DataBundle* bundle,
|
| - const sync_api::ReadNode& node) {
|
| - AutofillProfileModelAssociator::AddNativeProfileIfNeeded(
|
| - profile,
|
| - bundle,
|
| - node);
|
| - }
|
| -};
|
| -
|
| -class AutofillProfileModelAssociatorTest : public testing::Test {
|
| - public:
|
| - AutofillProfileModelAssociatorTest()
|
| - : db_thread_(BrowserThread::DB, &message_loop_) {}
|
| -
|
| - protected:
|
| - MessageLoop message_loop_;
|
| - BrowserThread db_thread_;
|
| - MockAutofillProfileModelAssociator associator_;
|
| -};
|
| -
|
| -TEST_F(AutofillProfileModelAssociatorTest,
|
| - TestAssociateProfileInWebDBWithSyncDB) {
|
| - ScopedVector<AutofillProfile> profiles_from_web_db;
|
| - std::string guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44B";
|
| -
|
| - sync_pb::EntitySpecifics specifics;
|
| - MockDirectory mock_directory;
|
| - sync_pb::AutofillProfileSpecifics *profile_specifics =
|
| - specifics.MutableExtension(sync_pb::autofill_profile);
|
| -
|
| - profile_specifics->set_guid(guid);
|
| -
|
| - std::set<std::string> current_profiles;
|
| -
|
| - // This will be released inside the function
|
| - // TraverseAndAssociateChromeAutofillProfiles
|
| - AutofillProfile *profile = new AutofillProfile(guid);
|
| -
|
| - // Set up the entry kernel with what we want.
|
| - EntryKernel kernel;
|
| - kernel.put(syncable::SPECIFICS, specifics);
|
| - kernel.put(syncable::META_HANDLE, 1);
|
| -
|
| - MockWriteTransaction write_trans(FROM_HERE, &mock_directory);
|
| - EXPECT_CALL(mock_directory, GetEntryByClientTag(_))
|
| - .WillOnce(Return(&kernel));
|
| -
|
| - sync_api::ReadNode read_node(&write_trans);
|
| -
|
| - EXPECT_CALL(associator_, Associate(Pointee(guid), 1));
|
| -
|
| - profiles_from_web_db.push_back(profile);
|
| -
|
| - associator_.TraverseAndAssociateChromeAutofillProfilesWrapper(&write_trans,
|
| - read_node,
|
| - profiles_from_web_db.get(),
|
| - ¤t_profiles,
|
| - NULL,
|
| - NULL,
|
| - NULL);
|
| -
|
| - EXPECT_EQ((unsigned int)1, current_profiles.size());
|
| -}
|
| -
|
| -TEST_F(AutofillProfileModelAssociatorTest, TestAssociatingMissingWebDBProfile) {
|
| - ScopedVector<AutofillProfile> profiles_from_web_db;
|
| - MockDirectory mock_directory;
|
| -
|
| - MockWriteTransaction write_trans(FROM_HERE, &mock_directory);
|
| - EXPECT_CALL(mock_directory,
|
| - GetEntryByClientTag(_))
|
| - .WillOnce(Return(reinterpret_cast<EntryKernel*>(NULL)));
|
| -
|
| - sync_api::ReadNode autofill_root(&write_trans);
|
| -
|
| - std::string guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44A";
|
| - std::set<std::string> current_profiles;
|
| - AutofillProfile *profile = new AutofillProfile(guid);
|
| -
|
| - EXPECT_CALL(associator_,
|
| - MakeNewAutofillProfileSyncNodeIfNeeded(&write_trans,
|
| - Ref(autofill_root),
|
| - Ref(*profile),
|
| - _,
|
| - ¤t_profiles,
|
| - NULL))
|
| - .WillOnce(Return(true));
|
| -
|
| - profiles_from_web_db.push_back(profile);
|
| -
|
| - associator_.TraverseAndAssociateChromeAutofillProfilesWrapper(&write_trans,
|
| - autofill_root,
|
| - profiles_from_web_db.get(),
|
| - ¤t_profiles,
|
| - NULL,
|
| - NULL,
|
| - NULL);
|
| -}
|
| -
|
| -TEST_F(AutofillProfileModelAssociatorTest,
|
| - TestAssociateProfileInSyncDBWithWebDB) {
|
| - ReadNodeMock autofill_root;
|
| -
|
| - // The constrcutor itself will initialize the id to root.
|
| - syncable::Id root_id;
|
| -
|
| - sync_pb::EntitySpecifics specifics;
|
| - MockDirectory mock_directory;
|
| - sync_pb::AutofillProfileSpecifics *profile_specifics =
|
| - specifics.MutableExtension(sync_pb::autofill_profile);
|
| -
|
| - profile_specifics->set_guid("abc");
|
| -
|
| - // Set up the entry kernel with what we want.
|
| - EntryKernel kernel;
|
| - kernel.put(syncable::SPECIFICS, specifics);
|
| - kernel.put(syncable::META_HANDLE, 1);
|
| - kernel.put(syncable::ID, root_id);
|
| -
|
| - MockWriteTransaction write_trans(FROM_HERE, &mock_directory);
|
| -
|
| - browser_sync::AutofillProfileModelAssociator::DataBundle bundle;
|
| -
|
| - EXPECT_CALL(autofill_root, GetFirstChildId())
|
| - .WillOnce(Return(1));
|
| -
|
| - EXPECT_CALL(mock_directory,
|
| - GetEntryByHandle(_))
|
| - .WillOnce(Return(&kernel));
|
| -
|
| - EXPECT_CALL(associator_,
|
| - AddNativeProfileIfNeeded(_,
|
| - &bundle,
|
| - _));
|
| -
|
| - associator_.TraverseAndAssociateAllSyncNodesWrapper(&write_trans,
|
| - autofill_root,
|
| - &bundle);
|
| -}
|
| -
|
| -TEST_F(AutofillProfileModelAssociatorTest, TestDontNeedToAddNativeProfile) {
|
| - ::testing::StrictMock<MockAutofillProfileModelAssociator> associator;
|
| - sync_pb::AutofillProfileSpecifics profile_specifics;
|
| - ReadNodeMock read_node;
|
| - std::string guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44C";
|
| - std::set<std::string> current_profiles;
|
| - browser_sync::AutofillProfileModelAssociator::DataBundle bundle;
|
| -
|
| - profile_specifics.set_guid(guid);
|
| -
|
| - bundle.current_profiles.insert(guid);
|
| -
|
| - // We have no expectations to set. We have used a strict mock.
|
| - // If the profile is already present no other function
|
| - // should be called.
|
| - associator.AddNativeProfileIfNeededWrapper(profile_specifics, &bundle,
|
| - read_node);
|
| -}
|
| -
|
| -TEST_F(AutofillProfileModelAssociatorTest, TestNeedToAddNativeProfile) {
|
| - sync_pb::AutofillProfileSpecifics profile_specifics;
|
| - ReadNodeMock read_node;
|
| - std::string guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44D";
|
| - std::set<std::string> current_profiles;
|
| - browser_sync::AutofillProfileModelAssociator::DataBundle bundle;
|
| - std::string first_name = "lingesh";
|
| -
|
| - profile_specifics.set_guid(guid);
|
| - profile_specifics.set_name_first(first_name);
|
| -
|
| - EXPECT_CALL(read_node, GetId())
|
| - .WillOnce(Return(1));
|
| -
|
| - EXPECT_CALL(associator_,
|
| - Associate(Pointee(guid), 1));
|
| -
|
| - associator_.AddNativeProfileIfNeededWrapper(
|
| - profile_specifics,
|
| - &bundle,
|
| - read_node);
|
| -
|
| - EXPECT_EQ(bundle.new_profiles.size(), (unsigned int)1);
|
| - EXPECT_EQ(bundle.new_profiles.front()->GetInfo(NAME_FIRST),
|
| - UTF8ToUTF16(first_name));
|
| -}
|
| -
|
|
|