Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 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 <jni.h> | |
| 6 | |
| 7 #include <string> | |
| 8 #include <vector> | |
| 9 | |
| 10 #include "base/android/jni_android.h" | |
| 11 #include "base/android/jni_array.h" | |
| 12 #include "base/values.h" | |
| 13 #include "chrome/browser/android/chrome_backup_agent.h" | |
| 14 #include "chrome/browser/profiles/profile_manager.h" | |
| 15 #include "chrome/common/chrome_constants.h" | |
| 16 #include "chrome/test/base/testing_browser_process.h" | |
| 17 #include "chrome/test/base/testing_profile.h" | |
| 18 #include "chrome/test/base/testing_profile_manager.h" | |
| 19 #include "components/prefs/testing_pref_service.h" | |
| 20 #include "components/sync_preferences/testing_pref_service_syncable.h" | |
| 21 #include "content/public/test/test_browser_thread_bundle.h" | |
| 22 #include "testing/gtest/include/gtest/gtest.h" | |
| 23 | |
| 24 // Declare the Java callable functions, can't include ChromeBackupAgent_jni.h | |
| 25 // since we don't want to define anything here. | |
|
Bernhard Bauer
2016/11/14 10:05:39
Ugh. Couldn't you just expose these functions from
aberent
2016/11/14 17:23:40
Done.
| |
| 26 extern "C" __attribute__((visibility("default"))) jobjectArray | |
| 27 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupNames( | |
| 28 JNIEnv* env, | |
| 29 jclass jcaller); | |
| 30 extern "C" __attribute__((visibility("default"))) jbooleanArray | |
| 31 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupValues( | |
| 32 JNIEnv* env, | |
| 33 jclass jcaller); | |
| 34 extern "C" __attribute__((visibility("default"))) void | |
| 35 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeSetBoolBackupPrefs( | |
| 36 JNIEnv* env, | |
| 37 jclass jcaller, | |
| 38 jobjectArray name, | |
| 39 jbooleanArray value); | |
| 40 | |
| 41 class ChromeBackupAgentTest : public ::testing::Test { | |
| 42 protected: | |
| 43 ChromeBackupAgentTest() | |
| 44 : expected_pref_names_(chrome::android::GetBackupPrefNames()), | |
| 45 testing_profile_manager_(TestingBrowserProcess::GetGlobal()), | |
| 46 env_(base::android::AttachCurrentThread()) {} | |
| 47 | |
| 48 virtual void SetUp() { | |
|
Bernhard Bauer
2016/11/14 10:05:39
override (and no virtual)?
aberent
2016/11/14 17:23:40
Done.
| |
| 49 ASSERT_TRUE(testing_profile_manager_.SetUp()); | |
| 50 testing_profile_ = | |
| 51 testing_profile_manager_.CreateTestingProfile(chrome::kInitialProfile); | |
| 52 pref_service_ = testing_profile_->GetTestingPrefService(); | |
| 53 registry_ = pref_service_->registry(); | |
| 54 // Register one dummy pref for testing | |
| 55 registry_->RegisterBooleanPref("dummy", false); | |
| 56 } | |
| 57 | |
| 58 content::TestBrowserThreadBundle thread_bundle_; | |
| 59 std::vector<std::string> expected_pref_names_; | |
| 60 TestingProfileManager testing_profile_manager_; | |
| 61 TestingProfile* testing_profile_; | |
| 62 sync_preferences::TestingPrefServiceSyncable* pref_service_; | |
| 63 PrefRegistrySimple* registry_; | |
| 64 JNIEnv* env_; | |
| 65 }; | |
| 66 | |
| 67 TEST_F(ChromeBackupAgentTest, GetBoolBackupNames) { | |
| 68 jobjectArray result = | |
|
Bernhard Bauer
2016/11/14 10:05:39
Do you need to wrap this in a ScopedJavaLocalRef o
aberent
2016/11/14 17:23:40
Done. There is a conversion from a JavaRef to a ba
| |
| 69 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupName s( | |
| 70 env_, nullptr); | |
| 71 std::vector<std::string> pref_names; | |
| 72 base::android::AppendJavaStringArrayToStringVector( | |
| 73 base::android::AttachCurrentThread(), result, &pref_names); | |
| 74 | |
| 75 EXPECT_EQ(expected_pref_names_, pref_names); | |
| 76 } | |
| 77 | |
| 78 TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_AllDefault) { | |
| 79 jbooleanArray result = | |
| 80 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupValu es( | |
| 81 env_, nullptr); | |
| 82 jsize size = env_->GetArrayLength(result); | |
| 83 ASSERT_EQ(expected_pref_names_.size(), (size_t)size); | |
|
Bernhard Bauer
2016/11/14 10:05:38
static_cast<size_t>()
aberent
2016/11/14 17:23:40
Done.
| |
| 84 | |
| 85 jboolean* values = env_->GetBooleanArrayElements(result, nullptr); | |
| 86 for (int i = 0; i < size; i++) { | |
| 87 bool expected_value; | |
| 88 ASSERT_TRUE(pref_service_->GetDefaultPrefValue(expected_pref_names_[i]) | |
| 89 ->GetAsBoolean(&expected_value)); | |
| 90 EXPECT_EQ(expected_value, values[i]) << "i = " << i << ", " | |
| 91 << expected_pref_names_[i]; | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_IrrelevantChange) { | |
| 96 // Try changing the dummy value, should make no difference | |
| 97 pref_service_->SetBoolean("dummy", true); | |
| 98 jbooleanArray result = | |
| 99 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupValu es( | |
| 100 env_, nullptr); | |
| 101 jsize size = env_->GetArrayLength(result); | |
| 102 ASSERT_EQ(expected_pref_names_.size(), (size_t)size); | |
| 103 | |
| 104 jboolean* values = env_->GetBooleanArrayElements(result, nullptr); | |
| 105 for (int i = 0; i < size; i++) { | |
| 106 bool expected_value; | |
| 107 ASSERT_TRUE(pref_service_->GetDefaultPrefValue(expected_pref_names_[i]) | |
| 108 ->GetAsBoolean(&expected_value)); | |
| 109 EXPECT_EQ(expected_value, values[i]) << "i = " << i << ", " | |
| 110 << expected_pref_names_[i]; | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_RelevantChange) { | |
| 115 JNIEnv* env_ = base::android::AttachCurrentThread(); | |
|
Bernhard Bauer
2016/11/14 10:05:38
Unnecessary, I think.
aberent
2016/11/14 17:23:40
Done.
| |
| 116 // Change one of the values we care about | |
| 117 pref_service_->SetBoolean(expected_pref_names_[3], false); | |
| 118 jbooleanArray result = | |
| 119 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeGetBoolBackupValu es( | |
| 120 env_, nullptr); | |
| 121 jsize size = env_->GetArrayLength(result); | |
| 122 ASSERT_EQ(expected_pref_names_.size(), (size_t)size); | |
| 123 | |
| 124 jboolean* values = env_->GetBooleanArrayElements(result, nullptr); | |
| 125 for (int i = 0; i < size; i++) { | |
| 126 if (i == 3) | |
|
Bernhard Bauer
2016/11/14 10:05:39
I would maybe examine |expected_pref_names_| inste
aberent
2016/11/14 17:23:40
Done.
| |
| 127 continue; | |
| 128 bool expected_value; | |
| 129 ASSERT_TRUE(pref_service_->GetDefaultPrefValue(expected_pref_names_[i]) | |
| 130 ->GetAsBoolean(&expected_value)); | |
| 131 EXPECT_EQ(expected_value, values[i]) << "i = " << i << ", " | |
| 132 << expected_pref_names_[i]; | |
| 133 } | |
| 134 EXPECT_FALSE(values[3]) << "i = " << 3 << ", " << expected_pref_names_[3]; | |
| 135 } | |
| 136 | |
| 137 TEST_F(ChromeBackupAgentTest, SetBoolBackupValues) { | |
| 138 base::android::ScopedJavaLocalRef<jobjectArray> narray = | |
| 139 base::android::ToJavaArrayOfStrings(env_, expected_pref_names_); | |
| 140 jboolean* values = new jboolean[expected_pref_names_.size()]; | |
| 141 for (size_t i = 0; i < expected_pref_names_.size(); i++) { | |
| 142 values[i] = false; | |
| 143 } | |
| 144 // Set a couple of the values to true. | |
| 145 values[5] = true; | |
| 146 values[8] = true; | |
| 147 jbooleanArray varray = env_->NewBooleanArray(expected_pref_names_.size()); | |
| 148 env_->SetBooleanArrayRegion(varray, 0, expected_pref_names_.size(), values); | |
| 149 Java_org_chromium_chrome_browser_ChromeBackupAgent_nativeSetBoolBackupPrefs( | |
| 150 env_, nullptr, narray.obj(), varray); | |
| 151 for (size_t i = 0; i < expected_pref_names_.size(); i++) { | |
| 152 EXPECT_EQ((i == 5 || i == 8), | |
|
Bernhard Bauer
2016/11/14 10:05:39
Just directly use values[i] here?
aberent
2016/11/14 17:23:40
Done.
| |
| 153 pref_service_->GetBoolean(expected_pref_names_[i])) | |
| 154 << "i = " << i << ", " << expected_pref_names_[i]; | |
| 155 } | |
| 156 EXPECT_FALSE(pref_service_->GetBoolean("dummy")); | |
| 157 } | |
| OLD | NEW |