// Copyright (c) 2012 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 "chrome/browser/extensions/app_sync_data.h" #include "sync/api/string_ordinal.h" #include "sync/protocol/app_specifics.pb.h" #include "sync/protocol/sync.pb.h" #include "testing/gtest/include/gtest/gtest.h" namespace extensions { namespace { const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop"; const char kName[] = "MyExtension"; const char kValidVersion[] = "0.0.0.0"; const char kValidUpdateUrl[] = "http://clients2.google.com/service/update2/crx"; const char kOAuthClientId[] = "1234abcd"; } // namespace class AppSyncDataTest : public testing::Test { public: AppSyncDataTest() {} virtual ~AppSyncDataTest() {} void SetRequiredExtensionValues( sync_pb::ExtensionSpecifics* extension_specifics) { extension_specifics->set_id(kValidId); extension_specifics->set_update_url(kValidUpdateUrl); extension_specifics->set_version(kValidVersion); extension_specifics->set_enabled(false); extension_specifics->set_incognito_enabled(true); extension_specifics->set_name(kName); } }; TEST_F(AppSyncDataTest, SyncDataToExtensionSyncDataForApp) { sync_pb::EntitySpecifics entity; sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); app_specifics->set_app_launch_ordinal( syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); app_specifics->set_page_ordinal( syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); SetRequiredExtensionValues(app_specifics->mutable_extension()); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); AppSyncData app_sync_data(sync_data); EXPECT_EQ(app_specifics->app_launch_ordinal(), app_sync_data.app_launch_ordinal().ToInternalValue()); EXPECT_EQ(app_specifics->page_ordinal(), app_sync_data.page_ordinal().ToInternalValue()); } TEST_F(AppSyncDataTest, ExtensionSyncDataToSyncDataForApp) { sync_pb::EntitySpecifics entity; sync_pb::AppSpecifics* input_specifics = entity.mutable_app(); input_specifics->set_app_launch_ordinal( syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); input_specifics->set_page_ordinal( syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); SetRequiredExtensionValues(input_specifics->mutable_extension()); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); AppSyncData app_sync_data(sync_data); syncer::SyncData output_sync_data = app_sync_data.GetSyncData(); EXPECT_TRUE(sync_data.GetSpecifics().has_app()); const sync_pb::AppSpecifics& output_specifics = output_sync_data.GetSpecifics().app(); EXPECT_EQ(input_specifics->SerializeAsString(), output_specifics.SerializeAsString()); } // Ensures that invalid StringOrdinals don't break ExtensionSyncData. TEST_F(AppSyncDataTest, ExtensionSyncDataInvalidOrdinal) { sync_pb::EntitySpecifics entity; sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); // Set the ordinals as invalid. app_specifics->set_app_launch_ordinal(""); app_specifics->set_page_ordinal(""); SetRequiredExtensionValues(app_specifics->mutable_extension()); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); // There should be no issue loading the sync data. AppSyncData app_sync_data(sync_data); app_sync_data.GetSyncData(); } } // namespace extensions