blob: 91ff2a7c820ba4e1dcb1de946c7d740e82f83990 [file] [log] [blame]
aberentd56b7ec2016-11-16 16:43:271// 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
aberentd56b7ec2016-11-16 16:43:2724namespace android {
25
26using base::android::AppendJavaStringArrayToStringVector;
27using base::android::AttachCurrentThread;
28using base::android::ScopedJavaLocalRef;
29using base::android::ToJavaArrayOfStrings;
30using base::android::JavaParamRef;
31
32class ChromeBackupAgentTest : public ::testing::Test {
33 protected:
34 ChromeBackupAgentTest()
35 : expected_pref_names_(GetBackupPrefNames()),
36 testing_profile_manager_(TestingBrowserProcess::GetGlobal()),
37 env_(AttachCurrentThread()) {}
38
39 void SetUp() override {
40 ASSERT_TRUE(testing_profile_manager_.SetUp());
41 testing_profile_ =
42 testing_profile_manager_.CreateTestingProfile(chrome::kInitialProfile);
43 pref_service_ = testing_profile_->GetTestingPrefService();
44 registry_ = pref_service_->registry();
45 // Register one dummy pref for testing
46 registry_->RegisterBooleanPref("dummy", false);
47 }
48
49 content::TestBrowserThreadBundle thread_bundle_;
50 std::vector<std::string> expected_pref_names_;
51 TestingProfileManager testing_profile_manager_;
52 TestingProfile* testing_profile_;
53 sync_preferences::TestingPrefServiceSyncable* pref_service_;
54 PrefRegistrySimple* registry_;
55 JNIEnv* env_;
56};
57
58TEST_F(ChromeBackupAgentTest, GetBoolBackupNames) {
59 ScopedJavaLocalRef<jobjectArray> result =
60 GetBoolBackupNamesForTesting(env_, JavaParamRef<jobject>(nullptr));
61 std::vector<std::string> pref_names;
Torne (Richard Coles)3c22e8302018-10-12 18:34:2262 AppendJavaStringArrayToStringVector(AttachCurrentThread(), result,
aberentd56b7ec2016-11-16 16:43:2763 &pref_names);
64 EXPECT_EQ(expected_pref_names_, pref_names);
65}
66
67TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_AllDefault) {
68 ScopedJavaLocalRef<jbooleanArray> result =
69 GetBoolBackupValuesForTesting(env_, JavaParamRef<jobject>(nullptr));
70 jsize size = env_->GetArrayLength(result.obj());
71 ASSERT_EQ(expected_pref_names_.size(), static_cast<size_t>(size));
72
73 jboolean* values = env_->GetBooleanArrayElements(result.obj(), nullptr);
74 for (int i = 0; i < size; i++) {
75 bool expected_value;
76 ASSERT_TRUE(pref_service_->GetDefaultPrefValue(expected_pref_names_[i])
77 ->GetAsBoolean(&expected_value));
78 EXPECT_EQ(expected_value, values[i]) << "i = " << i << ", "
79 << expected_pref_names_[i];
80 }
81}
82
83TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_IrrelevantChange) {
84 // Try changing the dummy value, should make no difference
85 pref_service_->SetBoolean("dummy", true);
86
87 ScopedJavaLocalRef<jbooleanArray> result =
88 GetBoolBackupValuesForTesting(env_, JavaParamRef<jobject>(nullptr));
89 jsize size = env_->GetArrayLength(result.obj());
90 ASSERT_EQ(expected_pref_names_.size(), static_cast<size_t>(size));
91 jboolean* values = env_->GetBooleanArrayElements(result.obj(), nullptr);
92 for (int i = 0; i < size; i++) {
93 bool expected_value;
94 ASSERT_TRUE(pref_service_->GetDefaultPrefValue(expected_pref_names_[i])
95 ->GetAsBoolean(&expected_value));
96 EXPECT_EQ(expected_value, values[i]) << "i = " << i << ", "
97 << expected_pref_names_[i];
98 }
99}
100
101TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_RelevantChange) {
102 // Change one of the values we care about
103 pref_service_->SetBoolean(expected_pref_names_[3], false);
104 ScopedJavaLocalRef<jbooleanArray> result =
105 GetBoolBackupValuesForTesting(env_, JavaParamRef<jobject>(nullptr));
106 jsize size = env_->GetArrayLength(result.obj());
107 ASSERT_EQ(expected_pref_names_.size(), static_cast<size_t>(size));
108
109 jboolean* values = env_->GetBooleanArrayElements(result.obj(), nullptr);
110 for (int i = 0; i < size; i++) {
111 EXPECT_EQ(pref_service_->GetBoolean(expected_pref_names_[i]), values[i])
112 << "i = " << i << ", " << expected_pref_names_[i];
113 }
114}
115
116TEST_F(ChromeBackupAgentTest, SetBoolBackupValues) {
117 ScopedJavaLocalRef<jobjectArray> narray =
118 ToJavaArrayOfStrings(env_, expected_pref_names_);
119 jboolean* values = new jboolean[expected_pref_names_.size()];
120 for (size_t i = 0; i < expected_pref_names_.size(); i++) {
121 values[i] = false;
122 }
123 // Set a couple of the values to true.
124 values[5] = true;
125 values[8] = true;
126 ScopedJavaLocalRef<jbooleanArray> varray(
127 env_, env_->NewBooleanArray(expected_pref_names_.size()));
128 env_->SetBooleanArrayRegion(varray.obj(), 0, expected_pref_names_.size(),
129 values);
130 SetBoolBackupPrefsForTesting(env_, JavaParamRef<jobject>(nullptr),
131 JavaParamRef<jobjectArray>(env_, narray.obj()),
132 JavaParamRef<jbooleanArray>(env_, varray.obj()));
133 for (size_t i = 0; i < expected_pref_names_.size(); i++) {
134 EXPECT_EQ(values[i], pref_service_->GetBoolean(expected_pref_names_[i]))
135 << "i = " << i << ", " << expected_pref_names_[i];
136 }
137 EXPECT_FALSE(pref_service_->GetBoolean("dummy"));
138}
139
140} // namespace android