Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 1 | /* |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 2 | * Copyright (C) 2019 The Android Open Source Project |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 17 | package android.provider.settings.validators; |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 18 | |
Amin Shaikh | bb58879 | 2019-04-02 18:07:40 -0400 | [diff] [blame] | 19 | import static com.google.common.truth.Truth.assertThat; |
| 20 | |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 21 | import static org.junit.Assert.assertFalse; |
| 22 | import static org.junit.Assert.assertTrue; |
Annie Meng | 5d26b8c | 2018-05-17 16:00:16 +0100 | [diff] [blame] | 23 | import static org.junit.Assert.fail; |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 24 | |
| 25 | import android.platform.test.annotations.Presubmit; |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 26 | import android.provider.Settings; |
Al Sutton | 0833b2e | 2019-08-22 16:21:30 +0100 | [diff] [blame] | 27 | import android.provider.settings.backup.GlobalSettings; |
| 28 | import android.provider.settings.backup.SecureSettings; |
| 29 | import android.provider.settings.backup.SystemSettings; |
Tadashi G. Takaoka | b4470f2 | 2019-01-15 18:29:15 +0900 | [diff] [blame] | 30 | |
| 31 | import androidx.test.filters.SmallTest; |
| 32 | import androidx.test.runner.AndroidJUnit4; |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 33 | |
Amin Shaikh | bb58879 | 2019-04-02 18:07:40 -0400 | [diff] [blame] | 34 | import org.json.JSONException; |
| 35 | import org.json.JSONObject; |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 36 | import org.junit.Test; |
| 37 | import org.junit.runner.RunWith; |
| 38 | |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 39 | import java.util.Map; |
| 40 | |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 41 | /** |
| 42 | * Tests that ensure all backed up settings have non-null validators. Also, common validators |
| 43 | * are tested. |
| 44 | */ |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 45 | @Presubmit |
| 46 | @RunWith(AndroidJUnit4.class) |
| 47 | @SmallTest |
| 48 | public class SettingsValidatorsTest { |
| 49 | |
| 50 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 51 | public void testNonNegativeIntegerValidator() { |
| 52 | assertTrue(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("1")); |
| 53 | assertTrue(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("0")); |
| 54 | assertFalse(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("-1")); |
| 55 | assertFalse(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("rectangle")); |
| 56 | } |
| 57 | |
| 58 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 59 | public void testNonNegativeIntegerValidator_onNullValue_returnsFalse() { |
| 60 | assertFalse(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate(null)); |
| 61 | } |
| 62 | |
| 63 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 64 | public void testAnyIntegerValidator() { |
| 65 | assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("1")); |
| 66 | assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("0")); |
| 67 | assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("-1")); |
| 68 | assertFalse(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("rectangle")); |
| 69 | } |
| 70 | |
| 71 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 72 | public void testAnyIntegerValidator_onNullValue_returnsFalse() { |
| 73 | assertFalse(SettingsValidators.ANY_INTEGER_VALIDATOR.validate(null)); |
| 74 | } |
| 75 | |
| 76 | @Test |
| 77 | public void testUriValidator_onNullValue_returnsTrue() { |
| 78 | assertTrue(SettingsValidators.URI_VALIDATOR.validate(null)); |
| 79 | } |
| 80 | |
| 81 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 82 | public void testComponentNameValidator() { |
| 83 | assertTrue(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate( |
Stefanot | e66c1c3 | 2018-08-28 16:51:08 +0100 | [diff] [blame] | 84 | "com.android.localtransport/.LocalTransport")); |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 85 | assertFalse(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate("rectangle")); |
| 86 | } |
| 87 | |
| 88 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 89 | public void testComponentNameValidator_onNullValue_returnsFalse() { |
Annie Meng | 5d26b8c | 2018-05-17 16:00:16 +0100 | [diff] [blame] | 90 | assertFalse(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate(null)); |
| 91 | } |
| 92 | |
| 93 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 94 | public void testLenientIpAddressValidator_onNullValue_returnsFalse() { |
| 95 | assertFalse(SettingsValidators.LENIENT_IP_ADDRESS_VALIDATOR.validate(null)); |
| 96 | } |
| 97 | |
| 98 | @Test |
Annie Meng | 4451179 | 2018-05-17 18:49:24 +0100 | [diff] [blame] | 99 | public void testNullableComponentNameValidator_onValidComponentName_returnsTrue() { |
| 100 | assertTrue(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate( |
Stefanot | e66c1c3 | 2018-08-28 16:51:08 +0100 | [diff] [blame] | 101 | "com.android.localtransport/.LocalTransport")); |
Annie Meng | 4451179 | 2018-05-17 18:49:24 +0100 | [diff] [blame] | 102 | } |
| 103 | |
| 104 | @Test |
| 105 | public void testNullableComponentNameValidator_onInvalidComponentName_returnsFalse() { |
| 106 | assertFalse(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate( |
| 107 | "rectangle")); |
| 108 | } |
| 109 | |
| 110 | @Test |
| 111 | public void testNullableComponentNameValidator_onNullValue_returnsTrue() { |
| 112 | assertTrue(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate(null)); |
| 113 | } |
| 114 | |
| 115 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 116 | public void testLocaleValidator() { |
| 117 | assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("en_US")); |
| 118 | assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("es")); |
| 119 | assertFalse(SettingsValidators.LOCALE_VALIDATOR.validate("rectangle")); |
| 120 | } |
| 121 | |
| 122 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 123 | public void testLocaleValidator_onNullValue_returnsFalse() { |
| 124 | assertFalse(SettingsValidators.LOCALE_VALIDATOR.validate(null)); |
| 125 | } |
| 126 | |
| 127 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 128 | public void testPackageNameValidator() { |
| 129 | assertTrue(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate( |
| 130 | "com.google.android")); |
| 131 | assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate("com.google.@android")); |
| 132 | assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(".com.google.android")); |
| 133 | assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(".com.google.5android")); |
| 134 | } |
| 135 | |
| 136 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 137 | public void testPackageNameValidator_onNullValue_returnsFalse() { |
| 138 | assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(null)); |
| 139 | } |
| 140 | |
| 141 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 142 | public void testDiscreteValueValidator() { |
| 143 | String[] beerTypes = new String[]{"Ale", "American IPA", "Stout"}; |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 144 | Validator v = new DiscreteValueValidator(beerTypes); |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 145 | assertTrue(v.validate("Ale")); |
| 146 | assertTrue(v.validate("American IPA")); |
| 147 | assertTrue(v.validate("Stout")); |
| 148 | assertFalse(v.validate("Cider")); // just juice pretending to be beer |
| 149 | } |
| 150 | |
| 151 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 152 | public void testDiscreteValueValidator_onNullValue_returnsFalse() { |
| 153 | String[] discreteTypes = new String[]{"Type1", "Type2"}; |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 154 | Validator v = new DiscreteValueValidator(discreteTypes); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 155 | |
| 156 | assertFalse(v.validate(null)); |
| 157 | } |
| 158 | |
| 159 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 160 | public void testInclusiveIntegerRangeValidator() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 161 | Validator v = new InclusiveIntegerRangeValidator(0, 5); |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 162 | assertTrue(v.validate("0")); |
| 163 | assertTrue(v.validate("2")); |
| 164 | assertTrue(v.validate("5")); |
| 165 | assertFalse(v.validate("-1")); |
| 166 | assertFalse(v.validate("6")); |
| 167 | } |
| 168 | |
| 169 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 170 | public void testInclusiveIntegerRangeValidator_onNullValue_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 171 | Validator v = new InclusiveIntegerRangeValidator(0, 5); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 172 | |
| 173 | assertFalse(v.validate(null)); |
| 174 | } |
| 175 | |
| 176 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 177 | public void testInclusiveFloatRangeValidator() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 178 | Validator v = new InclusiveFloatRangeValidator(0.0f, 5.0f); |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 179 | assertTrue(v.validate("0.0")); |
| 180 | assertTrue(v.validate("2.0")); |
| 181 | assertTrue(v.validate("5.0")); |
| 182 | assertFalse(v.validate("-1.0")); |
| 183 | assertFalse(v.validate("6.0")); |
| 184 | } |
| 185 | |
| 186 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 187 | public void testInclusiveFloatRangeValidator_onNullValue_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 188 | Validator v = new InclusiveFloatRangeValidator(0.0f, 5.0f); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 189 | |
| 190 | assertFalse(v.validate(null)); |
| 191 | } |
| 192 | |
| 193 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 194 | public void testComponentNameListValidator() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 195 | Validator v = new ComponentNameListValidator(","); |
Stefanot | e66c1c3 | 2018-08-28 16:51:08 +0100 | [diff] [blame] | 196 | assertTrue(v.validate("com.android.localtransport/.LocalTransport," |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 197 | + "com.google.android.gms/.backup.migrate.service.D2dTransport")); |
| 198 | assertFalse(v.validate("com.google.5android,android")); |
| 199 | } |
| 200 | |
| 201 | @Test |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 202 | public void testComponentNameListValidator_onNullValue_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 203 | Validator v = new ComponentNameListValidator(","); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 204 | |
| 205 | assertFalse(v.validate(null)); |
| 206 | } |
| 207 | |
| 208 | @Test |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 209 | public void testPackageNameListValidator() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 210 | Validator v = new PackageNameListValidator(","); |
Stefanot | e66c1c3 | 2018-08-28 16:51:08 +0100 | [diff] [blame] | 211 | assertTrue(v.validate("com.android.localtransport.LocalTransport,com.google.android.gms")); |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 212 | assertFalse(v.validate("5com.android.internal.backup.LocalTransport,android")); |
| 213 | } |
| 214 | |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 215 | @Test |
| 216 | public void testPackageNameListValidator_onNullValue_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 217 | Validator v = new PackageNameListValidator(","); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 218 | |
| 219 | assertFalse(v.validate(null)); |
| 220 | } |
| 221 | |
| 222 | @Test |
| 223 | public void dateFormatValidator_onNullValue_returnsFalse() { |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 224 | assertFalse(SettingsValidators.DATE_FORMAT_VALIDATOR.validate(null)); |
Annie Meng | eed1b81 | 2018-05-21 16:34:52 +0100 | [diff] [blame] | 225 | } |
Michal Karpinski | 6fe6c8e | 2018-01-24 15:40:09 +0000 | [diff] [blame] | 226 | |
| 227 | @Test |
Amin Shaikh | bb58879 | 2019-04-02 18:07:40 -0400 | [diff] [blame] | 228 | public void testJSONObjectValidator() throws JSONException { |
| 229 | Validator v = SettingsValidators.JSON_OBJECT_VALIDATOR; |
| 230 | |
| 231 | assertThat(v.validate(new JSONObject().toString())).isTrue(); |
| 232 | assertThat(v.validate("{}")).isTrue(); |
| 233 | assertThat(v.validate(new JSONObject().put("foo", "bar").toString())) |
| 234 | .isTrue(); |
| 235 | assertThat(v.validate("{\"foo\": \"bar\"}")).isTrue(); |
| 236 | |
| 237 | assertThat(v.validate("random string")).isFalse(); |
| 238 | assertThat(v.validate("random: string")).isFalse(); |
| 239 | assertThat(v.validate("{random: }")).isFalse(); |
| 240 | } |
| 241 | |
| 242 | @Test |
| 243 | public void testJSONObjectValidator_onNullValue_returnsFalse() { |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 244 | assertFalse(SettingsValidators.JSON_OBJECT_VALIDATOR.validate(null)); |
Amin Shaikh | bb58879 | 2019-04-02 18:07:40 -0400 | [diff] [blame] | 245 | } |
| 246 | |
| 247 | @Test |
| 248 | public void testJSONObjectValidator_onEmptyString_returnsFalse() { |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 249 | assertFalse(SettingsValidators.JSON_OBJECT_VALIDATOR.validate("")); |
Amin Shaikh | bb58879 | 2019-04-02 18:07:40 -0400 | [diff] [blame] | 250 | } |
| 251 | |
| 252 | @Test |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 253 | public void ensureAllBackedUpSystemSettingsHaveValidators() { |
Al Sutton | 0833b2e | 2019-08-22 16:21:30 +0100 | [diff] [blame] | 254 | String offenders = getOffenders(concat(SystemSettings.SETTINGS_TO_BACKUP, |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 255 | Settings.System.LEGACY_RESTORE_SETTINGS), SystemSettingsValidators.VALIDATORS); |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 256 | |
| 257 | failIfOffendersPresent(offenders, "Settings.System"); |
| 258 | } |
| 259 | |
| 260 | @Test |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 261 | public void testTTSListValidator_withValidInput_returnsTrue() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 262 | assertTrue( |
| 263 | SettingsValidators.TTS_LIST_VALIDATOR.validate( |
| 264 | "com.foo.ttsengine:en-US,com.bar.ttsengine:es_ES")); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 265 | } |
| 266 | |
| 267 | @Test |
| 268 | public void testTTSListValidator_withInvalidInput_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 269 | assertFalse( |
| 270 | SettingsValidators.TTS_LIST_VALIDATOR.validate( |
| 271 | "com.foo.ttsengine:eng-USA,INVALID")); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 272 | } |
| 273 | |
| 274 | @Test |
| 275 | public void testTTSListValidator_withEmptyInput_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 276 | assertFalse(SettingsValidators.TTS_LIST_VALIDATOR.validate("")); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 277 | } |
| 278 | |
| 279 | @Test |
| 280 | public void testTTSListValidator_withNullInput_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 281 | assertFalse(SettingsValidators.TTS_LIST_VALIDATOR.validate(null)); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 282 | } |
| 283 | |
| 284 | @Test |
| 285 | public void testTileListValidator_withValidInput_returnsTrue() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 286 | assertTrue(SettingsValidators.TILE_LIST_VALIDATOR.validate("1,2,3,4")); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 287 | } |
| 288 | |
| 289 | @Test |
| 290 | public void testTileListValidator_withMissingValue_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 291 | assertFalse(SettingsValidators.TILE_LIST_VALIDATOR.validate("1,,3")); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 292 | } |
| 293 | |
| 294 | @Test |
| 295 | public void testTileListValidator_withNullInput_returnsFalse() { |
Al Sutton | b0067fb | 2019-08-16 10:34:46 +0100 | [diff] [blame] | 296 | assertFalse(SettingsValidators.TILE_LIST_VALIDATOR.validate(null)); |
Al Sutton | 867ded2 | 2019-08-08 12:14:23 +0100 | [diff] [blame] | 297 | } |
| 298 | |
| 299 | @Test |
Rhed Jao | f211ff6 | 2019-11-27 22:53:44 +0800 | [diff] [blame^] | 300 | public void testAccessibilityShortcutTargetValidator() { |
| 301 | assertTrue(SettingsValidators.ACCESSIBILITY_SHORTCUT_TARGET_LIST_VALIDATOR.validate( |
| 302 | "com.google.android/.AccessibilityShortcutTarget")); |
| 303 | assertTrue(SettingsValidators.ACCESSIBILITY_SHORTCUT_TARGET_LIST_VALIDATOR.validate( |
| 304 | "com.google.android")); |
| 305 | assertTrue(SettingsValidators.ACCESSIBILITY_SHORTCUT_TARGET_LIST_VALIDATOR.validate( |
| 306 | "com.google.android/.AccessibilityShortcutTarget:com.google.android")); |
| 307 | assertFalse(SettingsValidators.ACCESSIBILITY_SHORTCUT_TARGET_LIST_VALIDATOR.validate( |
| 308 | "com.google.android/.AccessibilityShortcutTarget:com.google.@android")); |
| 309 | } |
| 310 | |
| 311 | @Test |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 312 | public void ensureAllBackedUpGlobalSettingsHaveValidators() { |
Al Sutton | 0833b2e | 2019-08-22 16:21:30 +0100 | [diff] [blame] | 313 | String offenders = getOffenders(concat(GlobalSettings.SETTINGS_TO_BACKUP, |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 314 | Settings.Global.LEGACY_RESTORE_SETTINGS), GlobalSettingsValidators.VALIDATORS); |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 315 | |
| 316 | failIfOffendersPresent(offenders, "Settings.Global"); |
| 317 | } |
| 318 | |
Michal Karpinski | 964943a | 2018-01-19 16:28:26 +0000 | [diff] [blame] | 319 | @Test |
| 320 | public void ensureAllBackedUpSecureSettingsHaveValidators() { |
Al Sutton | 0833b2e | 2019-08-22 16:21:30 +0100 | [diff] [blame] | 321 | String offenders = getOffenders(concat(SecureSettings.SETTINGS_TO_BACKUP, |
Al Sutton | 91f89d0 | 2019-08-16 12:56:57 +0100 | [diff] [blame] | 322 | Settings.Secure.LEGACY_RESTORE_SETTINGS), SecureSettingsValidators.VALIDATORS); |
Michal Karpinski | 964943a | 2018-01-19 16:28:26 +0000 | [diff] [blame] | 323 | |
| 324 | failIfOffendersPresent(offenders, "Settings.Secure"); |
| 325 | } |
| 326 | |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 327 | private void failIfOffendersPresent(String offenders, String settingsType) { |
| 328 | if (offenders.length() > 0) { |
| 329 | fail("All " + settingsType + " settings that are backed up have to have a non-null" |
| 330 | + " validator, but those don't: " + offenders); |
| 331 | } |
| 332 | } |
| 333 | |
| 334 | private String getOffenders(String[] settingsToBackup, Map<String, Validator> validators) { |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 335 | StringBuilder offenders = new StringBuilder(); |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 336 | for (String setting : settingsToBackup) { |
| 337 | if (validators.get(setting) == null) { |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 338 | offenders.append(setting).append(" "); |
| 339 | } |
| 340 | } |
Michal Karpinski | 5db1e43 | 2018-01-18 20:10:24 +0000 | [diff] [blame] | 341 | return offenders.toString(); |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 342 | } |
Michal Karpinski | 964943a | 2018-01-19 16:28:26 +0000 | [diff] [blame] | 343 | |
| 344 | private String[] concat(String[] first, String[] second) { |
| 345 | if (second == null || second.length == 0) { |
| 346 | return first; |
| 347 | } |
| 348 | final int firstLen = first.length; |
| 349 | final int secondLen = second.length; |
| 350 | String[] both = new String[firstLen + secondLen]; |
| 351 | System.arraycopy(first, 0, both, 0, firstLen); |
| 352 | System.arraycopy(second, 0, both, firstLen, secondLen); |
| 353 | return both; |
| 354 | } |
Michal Karpinski | 2c37b08 | 2018-01-18 16:14:27 +0000 | [diff] [blame] | 355 | } |