Home | History | Annotate | Download | only in extensions
      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