Home | History | Annotate | Download | only in integration
      1 // Copyright (c) 2011 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/sync/test/integration/preferences_helper.h"
      6 
      7 #include "base/prefs/pref_service.h"
      8 #include "base/values.h"
      9 #include "chrome/browser/prefs/scoped_user_pref_update.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 #include "chrome/browser/sync/profile_sync_service_harness.h"
     12 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
     13 #include "chrome/browser/sync/test/integration/sync_test.h"
     14 
     15 using sync_datatype_helper::test;
     16 
     17 namespace preferences_helper {
     18 
     19 PrefService* GetPrefs(int index) {
     20   return test()->GetProfile(index)->GetPrefs();
     21 }
     22 
     23 PrefService* GetVerifierPrefs() {
     24   return test()->verifier()->GetPrefs();
     25 }
     26 
     27 void ChangeBooleanPref(int index, const char* pref_name) {
     28   bool new_value = !GetPrefs(index)->GetBoolean(pref_name);
     29   GetPrefs(index)->SetBoolean(pref_name, new_value);
     30   if (test()->use_verifier())
     31     GetVerifierPrefs()->SetBoolean(pref_name, new_value);
     32 }
     33 
     34 void ChangeIntegerPref(int index, const char* pref_name, int new_value) {
     35   GetPrefs(index)->SetInteger(pref_name, new_value);
     36   if (test()->use_verifier())
     37     GetVerifierPrefs()->SetInteger(pref_name, new_value);
     38 }
     39 
     40 void ChangeInt64Pref(int index, const char* pref_name, int64 new_value) {
     41   GetPrefs(index)->SetInt64(pref_name, new_value);
     42   if (test()->use_verifier())
     43     GetVerifierPrefs()->SetInt64(pref_name, new_value);
     44 }
     45 
     46 void ChangeDoublePref(int index, const char* pref_name, double new_value) {
     47   GetPrefs(index)->SetDouble(pref_name, new_value);
     48   if (test()->use_verifier())
     49     GetVerifierPrefs()->SetDouble(pref_name, new_value);
     50 }
     51 
     52 void ChangeStringPref(int index,
     53                       const char* pref_name,
     54                       const std::string& new_value) {
     55   GetPrefs(index)->SetString(pref_name, new_value);
     56   if (test()->use_verifier())
     57     GetVerifierPrefs()->SetString(pref_name, new_value);
     58 }
     59 
     60 void AppendStringPref(int index,
     61                       const char* pref_name,
     62                       const std::string& append_value) {
     63   ChangeStringPref(index,
     64                    pref_name,
     65                    GetPrefs(index)->GetString(pref_name) + append_value);
     66 }
     67 
     68 void ChangeFilePathPref(int index,
     69                         const char* pref_name,
     70                         const base::FilePath& new_value) {
     71   GetPrefs(index)->SetFilePath(pref_name, new_value);
     72   if (test()->use_verifier())
     73     GetVerifierPrefs()->SetFilePath(pref_name, new_value);
     74 }
     75 
     76 void ChangeListPref(int index,
     77                     const char* pref_name,
     78                     const ListValue& new_value) {
     79   {
     80     ListPrefUpdate update(GetPrefs(index), pref_name);
     81     ListValue* list = update.Get();
     82     for (ListValue::const_iterator it = new_value.begin();
     83          it != new_value.end();
     84          ++it) {
     85       list->Append((*it)->DeepCopy());
     86     }
     87   }
     88 
     89   if (test()->use_verifier()) {
     90     ListPrefUpdate update_verifier(GetVerifierPrefs(), pref_name);
     91     ListValue* list_verifier = update_verifier.Get();
     92     for (ListValue::const_iterator it = new_value.begin();
     93          it != new_value.end();
     94          ++it) {
     95       list_verifier->Append((*it)->DeepCopy());
     96     }
     97   }
     98 }
     99 
    100 bool BooleanPrefMatches(const char* pref_name) {
    101   bool reference_value;
    102   if (test()->use_verifier()) {
    103     reference_value = GetVerifierPrefs()->GetBoolean(pref_name);
    104   } else {
    105     reference_value = GetPrefs(0)->GetBoolean(pref_name);
    106   }
    107   for (int i = 0; i < test()->num_clients(); ++i) {
    108     if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) {
    109       LOG(ERROR) << "Boolean preference " << pref_name << " mismatched in"
    110                  << " profile " << i << ".";
    111       return false;
    112     }
    113   }
    114   return true;
    115 }
    116 
    117 bool IntegerPrefMatches(const char* pref_name) {
    118   int reference_value;
    119   if (test()->use_verifier()) {
    120     reference_value = GetVerifierPrefs()->GetInteger(pref_name);
    121   } else {
    122     reference_value = GetPrefs(0)->GetInteger(pref_name);
    123   }
    124   for (int i = 0; i < test()->num_clients(); ++i) {
    125     if (reference_value != GetPrefs(i)->GetInteger(pref_name)) {
    126       LOG(ERROR) << "Integer preference " << pref_name << " mismatched in"
    127                  << " profile " << i << ".";
    128       return false;
    129     }
    130   }
    131   return true;
    132 }
    133 
    134 bool Int64PrefMatches(const char* pref_name) {
    135   int64 reference_value;
    136   if (test()->use_verifier()) {
    137     reference_value = GetVerifierPrefs()->GetInt64(pref_name);
    138   } else {
    139     reference_value = GetPrefs(0)->GetInt64(pref_name);
    140   }
    141   for (int i = 0; i < test()->num_clients(); ++i) {
    142     if (reference_value != GetPrefs(i)->GetInt64(pref_name)) {
    143       LOG(ERROR) << "Integer preference " << pref_name << " mismatched in"
    144                  << " profile " << i << ".";
    145       return false;
    146     }
    147   }
    148   return true;
    149 }
    150 
    151 bool DoublePrefMatches(const char* pref_name) {
    152   double reference_value;
    153   if (test()->use_verifier()) {
    154     reference_value = GetVerifierPrefs()->GetDouble(pref_name);
    155   } else {
    156     reference_value = GetPrefs(0)->GetDouble(pref_name);
    157   }
    158   for (int i = 0; i < test()->num_clients(); ++i) {
    159     if (reference_value != GetPrefs(i)->GetDouble(pref_name)) {
    160       LOG(ERROR) << "Double preference " << pref_name << " mismatched in"
    161                  << " profile " << i << ".";
    162       return false;
    163     }
    164   }
    165   return true;
    166 }
    167 
    168 bool StringPrefMatches(const char* pref_name) {
    169   std::string reference_value;
    170   if (test()->use_verifier()) {
    171     reference_value = GetVerifierPrefs()->GetString(pref_name);
    172   } else {
    173     reference_value = GetPrefs(0)->GetString(pref_name);
    174   }
    175   for (int i = 0; i < test()->num_clients(); ++i) {
    176     if (reference_value != GetPrefs(i)->GetString(pref_name)) {
    177       LOG(ERROR) << "String preference " << pref_name << " mismatched in"
    178                  << " profile " << i << ".";
    179       return false;
    180     }
    181   }
    182   return true;
    183 }
    184 
    185 bool FilePathPrefMatches(const char* pref_name) {
    186   base::FilePath reference_value;
    187   if (test()->use_verifier()) {
    188     reference_value = GetVerifierPrefs()->GetFilePath(pref_name);
    189   } else {
    190     reference_value = GetPrefs(0)->GetFilePath(pref_name);
    191   }
    192   for (int i = 0; i < test()->num_clients(); ++i) {
    193     if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) {
    194       LOG(ERROR) << "base::FilePath preference " << pref_name
    195                  << " mismatched in" << " profile " << i << ".";
    196       return false;
    197     }
    198   }
    199   return true;
    200 }
    201 
    202 bool ListPrefMatches(const char* pref_name) {
    203   const ListValue* reference_value;
    204   if (test()->use_verifier()) {
    205     reference_value = GetVerifierPrefs()->GetList(pref_name);
    206   } else {
    207     reference_value = GetPrefs(0)->GetList(pref_name);
    208   }
    209   for (int i = 0; i < test()->num_clients(); ++i) {
    210     if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) {
    211       LOG(ERROR) << "List preference " << pref_name << " mismatched in"
    212                  << " profile " << i << ".";
    213       return false;
    214     }
    215   }
    216   return true;
    217 }
    218 
    219 }  // namespace preferences_helper
    220