1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/app_sync_data.h" 6 7 #include "sync/api/string_ordinal.h" 8 #include "sync/protocol/app_specifics.pb.h" 9 #include "sync/protocol/sync.pb.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace extensions { 13 14 namespace { 15 16 const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop"; 17 const char kName[] = "MyExtension"; 18 const char kValidVersion[] = "0.0.0.0"; 19 const char kValidUpdateUrl[] = 20 "http://clients2.google.com/service/update2/crx"; 21 const char kOAuthClientId[] = "1234abcd"; 22 23 } // namespace 24 25 class AppSyncDataTest : public testing::Test { 26 public: 27 AppSyncDataTest() {} 28 virtual ~AppSyncDataTest() {} 29 30 void SetRequiredExtensionValues( 31 sync_pb::ExtensionSpecifics* extension_specifics) { 32 extension_specifics->set_id(kValidId); 33 extension_specifics->set_update_url(kValidUpdateUrl); 34 extension_specifics->set_version(kValidVersion); 35 extension_specifics->set_enabled(false); 36 extension_specifics->set_incognito_enabled(true); 37 extension_specifics->set_name(kName); 38 } 39 }; 40 41 TEST_F(AppSyncDataTest, SyncDataToExtensionSyncDataForApp) { 42 sync_pb::EntitySpecifics entity; 43 sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 44 app_specifics->set_app_launch_ordinal( 45 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 46 app_specifics->set_page_ordinal( 47 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 48 49 SetRequiredExtensionValues(app_specifics->mutable_extension()); 50 51 syncer::SyncData sync_data = 52 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 53 54 AppSyncData app_sync_data(sync_data); 55 EXPECT_EQ(app_specifics->app_launch_ordinal(), 56 app_sync_data.app_launch_ordinal().ToInternalValue()); 57 EXPECT_EQ(app_specifics->page_ordinal(), 58 app_sync_data.page_ordinal().ToInternalValue()); 59 } 60 61 62 63 TEST_F(AppSyncDataTest, ExtensionSyncDataToSyncDataForApp) { 64 sync_pb::EntitySpecifics entity; 65 sync_pb::AppSpecifics* input_specifics = entity.mutable_app(); 66 input_specifics->set_app_launch_ordinal( 67 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 68 input_specifics->set_page_ordinal( 69 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 70 71 SetRequiredExtensionValues(input_specifics->mutable_extension()); 72 73 syncer::SyncData sync_data = 74 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 75 AppSyncData app_sync_data(sync_data); 76 77 syncer::SyncData output_sync_data = app_sync_data.GetSyncData(); 78 EXPECT_TRUE(sync_data.GetSpecifics().has_app()); 79 const sync_pb::AppSpecifics& output_specifics = 80 output_sync_data.GetSpecifics().app(); 81 EXPECT_EQ(input_specifics->SerializeAsString(), 82 output_specifics.SerializeAsString()); 83 } 84 85 // Ensures that invalid StringOrdinals don't break ExtensionSyncData. 86 TEST_F(AppSyncDataTest, ExtensionSyncDataInvalidOrdinal) { 87 sync_pb::EntitySpecifics entity; 88 sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 89 // Set the ordinals as invalid. 90 app_specifics->set_app_launch_ordinal(""); 91 app_specifics->set_page_ordinal(""); 92 93 SetRequiredExtensionValues(app_specifics->mutable_extension()); 94 95 syncer::SyncData sync_data = 96 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 97 98 // There should be no issue loading the sync data. 99 AppSyncData app_sync_data(sync_data); 100 app_sync_data.GetSyncData(); 101 } 102 103 } // namespace extensions 104