blob: 4e9ad2c27629373d86a584b5b415196f7ba0c93d [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;
Torne (Richard Coles)6f77e532018-10-12 20:11:0530using base::android::ToJavaBooleanArray;
aberentd56b7ec2016-11-16 16:43:2731using base::android::JavaParamRef;
32
33class ChromeBackupAgentTest : public ::testing::Test {
34 protected:
35 ChromeBackupAgentTest()
36 : expected_pref_names_(GetBackupPrefNames()),
37 testing_profile_manager_(TestingBrowserProcess::GetGlobal()),
38 env_(AttachCurrentThread()) {}
39
40 void SetUp() override {
41 ASSERT_TRUE(testing_profile_manager_.SetUp());
42 testing_profile_ =
43 testing_profile_manager_.CreateTestingProfile(chrome::kInitialProfile);
44 pref_service_ = testing_profile_->GetTestingPrefService();
45 registry_ = pref_service_->registry();
46 // Register one dummy pref for testing
47 registry_->RegisterBooleanPref("dummy", false);
48 }
49
50 content::TestBrowserThreadBundle thread_bundle_;
51 std::vector<std::string> expected_pref_names_;
52 TestingProfileManager testing_profile_manager_;
53 TestingProfile* testing_profile_;
54 sync_preferences::TestingPrefServiceSyncable* pref_service_;
55 PrefRegistrySimple* registry_;
56 JNIEnv* env_;
57};
58
59TEST_F(ChromeBackupAgentTest, GetBoolBackupNames) {
60 ScopedJavaLocalRef<jobjectArray> result =
61 GetBoolBackupNamesForTesting(env_, JavaParamRef<jobject>(nullptr));
62 std::vector<std::string> pref_names;
Torne (Richard Coles)3c22e8302018-10-12 18:34:2263 AppendJavaStringArrayToStringVector(AttachCurrentThread(), result,
aberentd56b7ec2016-11-16 16:43:2764 &pref_names);
65 EXPECT_EQ(expected_pref_names_, pref_names);
66}
67
68TEST_F(ChromeBackupAgentTest, GetBoolBackupValues_AllDefault) {
69 ScopedJavaLocalRef<jbooleanArray> result =
70 GetBoolBackupValuesForTesting(env_, JavaParamRef<jobject>(nullptr));
Torne (Richard Coles)6f77e532018-10-12 20:11:0571 std::vector<bool> values;
72 JavaBooleanArrayToBoolVector(env_, result, &values);
73 ASSERT_EQ(expected_pref_names_.size(), values.size());
74 for (size_t i = 0; i < values.size(); i++) {
aberentd56b7ec2016-11-16 16:43:2775 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));
Torne (Richard Coles)6f77e532018-10-12 20:11:0589 std::vector<bool> values;
90 JavaBooleanArrayToBoolVector(env_, result, &values);
91 ASSERT_EQ(expected_pref_names_.size(), values.size());
92 for (size_t i = 0; i < values.size(); i++) {
aberentd56b7ec2016-11-16 16:43:2793 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));
Torne (Richard Coles)6f77e532018-10-12 20:11:05106 std::vector<bool> values;
107 JavaBooleanArrayToBoolVector(env_, result, &values);
108 ASSERT_EQ(expected_pref_names_.size(), values.size());
109 for (size_t i = 0; i < values.size(); i++) {
aberentd56b7ec2016-11-16 16:43:27110 EXPECT_EQ(pref_service_->GetBoolean(expected_pref_names_[i]), values[i])
111 << "i = " << i << ", " << expected_pref_names_[i];
112 }
113}
114
115TEST_F(ChromeBackupAgentTest, SetBoolBackupValues) {
116 ScopedJavaLocalRef<jobjectArray> narray =
117 ToJavaArrayOfStrings(env_, expected_pref_names_);
Torne (Richard Coles)6f77e532018-10-12 20:11:05118 bool* values = new bool[expected_pref_names_.size()];
aberentd56b7ec2016-11-16 16:43:27119 for (size_t i = 0; i < expected_pref_names_.size(); i++) {
120 values[i] = false;
121 }
122 // Set a couple of the values to true.
123 values[5] = true;
124 values[8] = true;
Torne (Richard Coles)6f77e532018-10-12 20:11:05125 ScopedJavaLocalRef<jbooleanArray> varray =
126 ToJavaBooleanArray(env_, values, expected_pref_names_.size());
aberentd56b7ec2016-11-16 16:43:27127 SetBoolBackupPrefsForTesting(env_, JavaParamRef<jobject>(nullptr),
128 JavaParamRef<jobjectArray>(env_, narray.obj()),
129 JavaParamRef<jbooleanArray>(env_, varray.obj()));
130 for (size_t i = 0; i < expected_pref_names_.size(); i++) {
131 EXPECT_EQ(values[i], pref_service_->GetBoolean(expected_pref_names_[i]))
132 << "i = " << i << ", " << expected_pref_names_[i];
133 }
134 EXPECT_FALSE(pref_service_->GetBoolean("dummy"));
135}
136
137} // namespace android