Home | History | Annotate | Download | only in password
      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