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 const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop"; 15 const char kName[] = "MyExtension"; 16 const char kValidVersion[] = "0.0.0.0"; 17 const char kValidUpdateUrl[] = "http://clients2.google.com/service/update2/crx"; 18 19 class AppSyncDataTest : public testing::Test { 20 public: 21 AppSyncDataTest() {} 22 virtual ~AppSyncDataTest() {} 23 24 void SetRequiredExtensionValues( 25 sync_pb::ExtensionSpecifics* extension_specifics) { 26 extension_specifics->set_id(kValidId); 27 extension_specifics->set_update_url(kValidUpdateUrl); 28 extension_specifics->set_version(kValidVersion); 29 extension_specifics->set_enabled(false); 30 extension_specifics->set_incognito_enabled(true); 31 extension_specifics->set_name(kName); 32 } 33 }; 34 35 TEST_F(AppSyncDataTest, SyncDataToExtensionSyncDataForApp) { 36 sync_pb::EntitySpecifics entity; 37 sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 38 app_specifics->set_app_launch_ordinal( 39 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 40 app_specifics->set_page_ordinal( 41 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 42 43 SetRequiredExtensionValues(app_specifics->mutable_extension()); 44 45 syncer::SyncData sync_data = 46 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 47 48 AppSyncData app_sync_data(sync_data); 49 EXPECT_EQ(app_specifics->app_launch_ordinal(), 50 app_sync_data.app_launch_ordinal().ToInternalValue()); 51 EXPECT_EQ(app_specifics->page_ordinal(), 52 app_sync_data.page_ordinal().ToInternalValue()); 53 } 54 55 56 57 TEST_F(AppSyncDataTest, ExtensionSyncDataToSyncDataForApp) { 58 sync_pb::EntitySpecifics entity; 59 sync_pb::AppSpecifics* input_specifics = entity.mutable_app(); 60 input_specifics->set_app_launch_ordinal( 61 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 62 input_specifics->set_page_ordinal( 63 syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 64 65 SetRequiredExtensionValues(input_specifics->mutable_extension()); 66 67 syncer::SyncData sync_data = 68 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 69 AppSyncData app_sync_data(sync_data); 70 71 syncer::SyncData output_sync_data = app_sync_data.GetSyncData(); 72 EXPECT_TRUE(sync_data.GetSpecifics().has_app()); 73 const sync_pb::AppSpecifics& output_specifics = 74 output_sync_data.GetSpecifics().app(); 75 EXPECT_EQ(input_specifics->SerializeAsString(), 76 output_specifics.SerializeAsString()); 77 } 78 79 // Ensures that invalid StringOrdinals don't break ExtensionSyncData. 80 TEST_F(AppSyncDataTest, ExtensionSyncDataInvalidOrdinal) { 81 sync_pb::EntitySpecifics entity; 82 sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 83 // Set the ordinals as invalid. 84 app_specifics->set_app_launch_ordinal(""); 85 app_specifics->set_page_ordinal(""); 86 87 SetRequiredExtensionValues(app_specifics->mutable_extension()); 88 89 syncer::SyncData sync_data = 90 syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 91 92 // There should be no issue loading the sync data. 93 AppSyncData app_sync_data(sync_data); 94 app_sync_data.GetSyncData(); 95 } 96 97 } // namespace extensions 98