1 /* 2 * Copyright (C) 2017 The Android Open Source Project 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 17 package com.android.settings.password; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static org.robolectric.RuntimeEnvironment.application; 21 22 import android.app.admin.DevicePolicyManager; 23 import android.content.Intent; 24 import android.os.UserHandle; 25 26 import com.android.internal.widget.LockPatternUtils; 27 import com.android.settings.R; 28 import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment; 29 import com.android.settings.password.ChooseLockPassword.IntentBuilder; 30 import com.android.settings.testutils.SettingsRobolectricTestRunner; 31 import com.android.settings.testutils.shadow.SettingsShadowResources; 32 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; 33 import com.android.settings.testutils.shadow.ShadowUtils; 34 import com.android.setupwizardlib.GlifLayout; 35 36 import org.junit.After; 37 import org.junit.Before; 38 import org.junit.Test; 39 import org.junit.runner.RunWith; 40 import org.robolectric.Robolectric; 41 import org.robolectric.Shadows; 42 import org.robolectric.annotation.Config; 43 import org.robolectric.shadows.ShadowDrawable; 44 45 @RunWith(SettingsRobolectricTestRunner.class) 46 @Config(shadows = { 47 SettingsShadowResources.class, 48 SettingsShadowResourcesImpl.class, 49 SettingsShadowResources.SettingsShadowTheme.class, 50 ShadowUtils.class 51 }) 52 public class ChooseLockPasswordTest { 53 54 @Before 55 public void setUp() throws Exception { 56 SettingsShadowResources.overrideResource( 57 com.android.internal.R.string.config_headlineFontFamily, ""); 58 } 59 60 @After 61 public void tearDown() { 62 SettingsShadowResources.reset(); 63 } 64 65 @Test 66 public void intentBuilder_setPassword_shouldAddExtras() { 67 Intent intent = new IntentBuilder(application) 68 .setPassword("password") 69 .setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) 70 .setPasswordLengthRange(123, 456) 71 .setUserId(123) 72 .build(); 73 74 assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true)) 75 .named("EXTRA_KEY_HAS_CHALLENGE") 76 .isFalse(); 77 assertThat(intent.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD)) 78 .named("EXTRA_KEY_PASSWORD") 79 .isEqualTo("password"); 80 assertThat(intent.getIntExtra(ChooseLockPassword.PASSWORD_MIN_KEY, 0)) 81 .named("PASSWORD_MIN_KEY") 82 .isEqualTo(123); 83 assertThat(intent.getIntExtra(ChooseLockPassword.PASSWORD_MAX_KEY, 0)) 84 .named("PASSWORD_MAX_KEY") 85 .isEqualTo(456); 86 assertThat(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, 0)) 87 .named("PASSWORD_TYPE_KEY") 88 .isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC); 89 assertThat(intent.getIntExtra(Intent.EXTRA_USER_ID, 0)) 90 .named("EXTRA_USER_ID") 91 .isEqualTo(123); 92 } 93 94 @Test 95 public void intentBuilder_setChallenge_shouldAddExtras() { 96 Intent intent = new IntentBuilder(application) 97 .setChallenge(12345L) 98 .setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC) 99 .setPasswordLengthRange(123, 456) 100 .setUserId(123) 101 .build(); 102 103 assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false)) 104 .named("EXTRA_KEY_HAS_CHALLENGE") 105 .isTrue(); 106 assertThat(intent.getLongExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L)) 107 .named("EXTRA_KEY_CHALLENGE") 108 .isEqualTo(12345L); 109 assertThat(intent.getIntExtra(ChooseLockPassword.PASSWORD_MIN_KEY, 0)) 110 .named("PASSWORD_MIN_KEY") 111 .isEqualTo(123); 112 assertThat(intent.getIntExtra(ChooseLockPassword.PASSWORD_MAX_KEY, 0)) 113 .named("PASSWORD_MAX_KEY") 114 .isEqualTo(456); 115 assertThat(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, 0)) 116 .named("PASSWORD_TYPE_KEY") 117 .isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC); 118 assertThat(intent.getIntExtra(Intent.EXTRA_USER_ID, 0)) 119 .named("EXTRA_USER_ID") 120 .isEqualTo(123); 121 } 122 123 @Test 124 public void assertThat_chooseLockIconChanged_WhenFingerprintExtraSet() { 125 ShadowDrawable drawable = setActivityAndGetIconDrawable(true); 126 assertThat(drawable.getCreatedFromResId()).isEqualTo(R.drawable.ic_fingerprint_header); 127 } 128 129 @Test 130 public void assertThat_chooseLockIconNotChanged_WhenFingerprintExtraSet() { 131 ShadowDrawable drawable = setActivityAndGetIconDrawable(false); 132 assertThat(drawable.getCreatedFromResId()).isNotEqualTo(R.drawable.ic_fingerprint_header); 133 } 134 135 private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) { 136 return Robolectric.buildActivity(ChooseLockPassword.class, intent).setup().get(); 137 } 138 139 private ChooseLockPasswordFragment getChooseLockPasswordFragment(ChooseLockPassword activity) { 140 return (ChooseLockPasswordFragment) 141 activity.getFragmentManager().findFragmentById(R.id.main_content); 142 } 143 144 private ShadowDrawable setActivityAndGetIconDrawable(boolean addFingerprintExtra) { 145 ChooseLockPassword passwordActivity = buildChooseLockPasswordActivity( 146 new IntentBuilder(application) 147 .setUserId(UserHandle.myUserId()) 148 .setForFingerprint(addFingerprintExtra) 149 .build()); 150 ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(passwordActivity); 151 return Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon()); 152 } 153 } 154