Home | History | Annotate | Download | only in usb
      1 /*
      2  * Copyright (C) 2018 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.connecteddevice.usb;
     18 
     19 import static org.mockito.Mockito.verify;
     20 import static org.mockito.Mockito.when;
     21 
     22 import android.app.Activity;
     23 import android.arch.lifecycle.LifecycleOwner;
     24 import android.content.Context;
     25 import android.support.v14.preference.PreferenceFragment;
     26 import android.hardware.usb.UsbManager;
     27 import android.hardware.usb.UsbPort;
     28 import android.support.v7.preference.PreferenceManager;
     29 import android.support.v7.preference.PreferenceScreen;
     30 
     31 import com.android.settings.R;
     32 import com.android.settings.applications.LayoutPreference;
     33 import com.android.settings.testutils.SettingsRobolectricTestRunner;
     34 import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
     35 import com.android.settings.widget.EntityHeaderController;
     36 import com.android.settingslib.core.lifecycle.Lifecycle;
     37 
     38 import org.junit.After;
     39 import org.junit.Before;
     40 import org.junit.Test;
     41 import org.junit.runner.RunWith;
     42 import org.mockito.Answers;
     43 import org.mockito.Mock;
     44 import org.mockito.MockitoAnnotations;
     45 import org.robolectric.RuntimeEnvironment;
     46 import org.robolectric.annotation.Config;
     47 
     48 @RunWith(SettingsRobolectricTestRunner.class)
     49 @Config(shadows = ShadowEntityHeaderController.class)
     50 public class UsbDetailsHeaderControllerTest {
     51 
     52     private UsbDetailsHeaderController mDetailsHeaderController;
     53     private Context mContext;
     54     private Lifecycle mLifecycle;
     55     private LifecycleOwner mLifecycleOwner;
     56     private LayoutPreference mPreference;
     57     private PreferenceManager mPreferenceManager;
     58     private PreferenceScreen mScreen;
     59 
     60     @Mock
     61     private UsbBackend mUsbBackend;
     62     @Mock
     63     private UsbDetailsFragment mFragment;
     64     @Mock
     65     private Activity mActivity;
     66     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     67     private EntityHeaderController mHeaderController;
     68 
     69     @Before
     70     public void setUp() {
     71         MockitoAnnotations.initMocks(this);
     72 
     73         mContext = RuntimeEnvironment.application;
     74         mLifecycleOwner = () -> mLifecycle;
     75         mLifecycle = new Lifecycle(mLifecycleOwner);
     76         mPreferenceManager = new PreferenceManager(mContext);
     77         mScreen = mPreferenceManager.createPreferenceScreen(mContext);
     78 
     79         when(mFragment.getActivity()).thenReturn(mActivity);
     80         when(mActivity.getApplicationContext()).thenReturn(mContext);
     81         when(mFragment.getContext()).thenReturn(mContext);
     82         when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
     83         when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
     84 
     85         ShadowEntityHeaderController.setUseMock(mHeaderController);
     86         mDetailsHeaderController = new UsbDetailsHeaderController(mContext, mFragment, mUsbBackend);
     87         mPreference = new LayoutPreference(mContext, R.layout.settings_entity_header);
     88         mPreference.setKey(mDetailsHeaderController.getPreferenceKey());
     89         mScreen.addPreference(mPreference);
     90     }
     91 
     92     @After
     93     public void tearDown() {
     94         ShadowEntityHeaderController.reset();
     95     }
     96 
     97     @Test
     98     public void displayRefresh_charging_shouldSetHeader() {
     99         mDetailsHeaderController.displayPreference(mScreen);
    100         mDetailsHeaderController.refresh(true, UsbManager.FUNCTION_NONE, UsbPort.POWER_ROLE_SINK,
    101                 UsbPort.DATA_ROLE_DEVICE);
    102         verify(mHeaderController).setLabel(mContext.getString(R.string.usb_pref));
    103         verify(mHeaderController).setIcon(mContext.getDrawable(R.drawable.ic_usb));
    104         verify(mHeaderController).done(mActivity, true);
    105     }
    106 }
    107