Home | History | Annotate | Download | only in testutils
      1 /*
      2  * Copyright (C) 2016 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 package com.android.settings.testutils;
     17 
     18 import static org.mockito.Matchers.anyString;
     19 import static org.mockito.Mockito.mock;
     20 import static org.mockito.Mockito.when;
     21 
     22 import android.content.Context;
     23 
     24 import com.android.settings.accounts.AccountFeatureProvider;
     25 import com.android.settings.applications.ApplicationFeatureProvider;
     26 import com.android.settings.bluetooth.BluetoothFeatureProvider;
     27 import com.android.settings.dashboard.DashboardFeatureProvider;
     28 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
     29 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
     30 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
     31 import com.android.settings.gestures.AssistGestureFeatureProvider;
     32 import com.android.settings.localepicker.LocaleFeatureProvider;
     33 import com.android.settings.overlay.DockUpdaterFeatureProvider;
     34 import com.android.settings.overlay.FeatureFactory;
     35 import com.android.settings.overlay.SupportFeatureProvider;
     36 import com.android.settings.overlay.SurveyFeatureProvider;
     37 import com.android.settings.search.DeviceIndexFeatureProvider;
     38 import com.android.settings.search.SearchFeatureProvider;
     39 import com.android.settings.security.SecurityFeatureProvider;
     40 import com.android.settings.slices.SlicesFeatureProvider;
     41 import com.android.settings.users.UserFeatureProvider;
     42 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
     43 
     44 import org.mockito.Answers;
     45 
     46 /**
     47  * Test util to provide fake FeatureFactory. To use this factory, call {@code setupForTest} in
     48  * {@code @Before} method of the test class.
     49  */
     50 public class FakeFeatureFactory extends FeatureFactory {
     51 
     52     public final SupportFeatureProvider supportFeatureProvider;
     53     public final MetricsFeatureProvider metricsFeatureProvider;
     54     public final PowerUsageFeatureProvider powerUsageFeatureProvider;
     55     public final DashboardFeatureProvider dashboardFeatureProvider;
     56     public final DockUpdaterFeatureProvider dockUpdaterFeatureProvider;
     57     public final LocaleFeatureProvider localeFeatureProvider;
     58     public final ApplicationFeatureProvider applicationFeatureProvider;
     59     public final EnterprisePrivacyFeatureProvider enterprisePrivacyFeatureProvider;
     60     public final SurveyFeatureProvider surveyFeatureProvider;
     61     public final SecurityFeatureProvider securityFeatureProvider;
     62     public final SuggestionFeatureProvider suggestionsFeatureProvider;
     63     public final UserFeatureProvider userFeatureProvider;
     64     public final AssistGestureFeatureProvider assistGestureFeatureProvider;
     65     public final BluetoothFeatureProvider bluetoothFeatureProvider;
     66     public final AccountFeatureProvider mAccountFeatureProvider;
     67     public final DeviceIndexFeatureProvider deviceIndexFeatureProvider;
     68 
     69     public SlicesFeatureProvider slicesFeatureProvider;
     70     public SearchFeatureProvider searchFeatureProvider;
     71 
     72     /**
     73      * Call this in {@code @Before} method of the test class to use fake factory.
     74      */
     75     public static FakeFeatureFactory setupForTest() {
     76         final Context context = mock(Context.class, Answers.RETURNS_DEEP_STUBS);
     77         sFactory = null;
     78         when(context.getString(com.android.settings.R.string.config_featureFactory))
     79                 .thenReturn(FakeFeatureFactory.class.getName());
     80         try {
     81             Class c = FakeFeatureFactory.class;
     82             when(context.getClassLoader().loadClass(anyString())).thenReturn(c);
     83         } catch (ClassNotFoundException e) {
     84             // Ignore.
     85         }
     86         return (FakeFeatureFactory) FakeFeatureFactory.getFactory(context);
     87     }
     88 
     89     /**
     90      * Used by reflection. Do not call directly.
     91      */
     92     public FakeFeatureFactory() {
     93         supportFeatureProvider = mock(SupportFeatureProvider.class);
     94         metricsFeatureProvider = mock(MetricsFeatureProvider.class);
     95         powerUsageFeatureProvider = mock(PowerUsageFeatureProvider.class);
     96         dashboardFeatureProvider = mock(DashboardFeatureProvider.class);
     97         dockUpdaterFeatureProvider = mock(DockUpdaterFeatureProvider.class);
     98         localeFeatureProvider = mock(LocaleFeatureProvider.class);
     99         applicationFeatureProvider = mock(ApplicationFeatureProvider.class);
    100         enterprisePrivacyFeatureProvider = mock(EnterprisePrivacyFeatureProvider.class);
    101         searchFeatureProvider = mock(SearchFeatureProvider.class);
    102         surveyFeatureProvider = mock(SurveyFeatureProvider.class);
    103         securityFeatureProvider = mock(SecurityFeatureProvider.class);
    104         suggestionsFeatureProvider = mock(SuggestionFeatureProvider.class);
    105         userFeatureProvider = mock(UserFeatureProvider.class);
    106         assistGestureFeatureProvider = mock(AssistGestureFeatureProvider.class);
    107         bluetoothFeatureProvider = mock(BluetoothFeatureProvider.class);
    108         slicesFeatureProvider = mock(SlicesFeatureProvider.class);
    109         mAccountFeatureProvider = mock(AccountFeatureProvider.class);
    110         deviceIndexFeatureProvider = mock(DeviceIndexFeatureProvider.class);
    111     }
    112 
    113     @Override
    114     public SuggestionFeatureProvider getSuggestionFeatureProvider(Context context) {
    115         return suggestionsFeatureProvider;
    116     }
    117 
    118     @Override
    119     public SupportFeatureProvider getSupportFeatureProvider(Context context) {
    120         return supportFeatureProvider;
    121     }
    122 
    123     @Override
    124     public MetricsFeatureProvider getMetricsFeatureProvider() {
    125         return metricsFeatureProvider;
    126     }
    127 
    128     @Override
    129     public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
    130         return powerUsageFeatureProvider;
    131     }
    132 
    133     @Override
    134     public DashboardFeatureProvider getDashboardFeatureProvider(Context context) {
    135         return dashboardFeatureProvider;
    136     }
    137 
    138     @Override
    139     public DockUpdaterFeatureProvider getDockUpdaterFeatureProvider() {
    140         return dockUpdaterFeatureProvider;
    141     }
    142 
    143     @Override
    144     public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
    145         return applicationFeatureProvider;
    146     }
    147 
    148     @Override
    149     public LocaleFeatureProvider getLocaleFeatureProvider() {
    150         return localeFeatureProvider;
    151     }
    152 
    153     @Override
    154     public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) {
    155         return enterprisePrivacyFeatureProvider;
    156     }
    157 
    158     @Override
    159     public SearchFeatureProvider getSearchFeatureProvider() {
    160         return searchFeatureProvider;
    161     }
    162 
    163     @Override
    164     public SurveyFeatureProvider getSurveyFeatureProvider(Context context) {
    165         return surveyFeatureProvider;
    166     }
    167 
    168     @Override
    169     public SecurityFeatureProvider getSecurityFeatureProvider() {
    170         return securityFeatureProvider;
    171     }
    172 
    173     @Override
    174     public UserFeatureProvider getUserFeatureProvider(Context context) {
    175         return userFeatureProvider;
    176     }
    177 
    178     @Override
    179     public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) {
    180         return bluetoothFeatureProvider;
    181     }
    182 
    183     @Override
    184     public AssistGestureFeatureProvider getAssistGestureFeatureProvider() {
    185         return assistGestureFeatureProvider;
    186     }
    187 
    188     @Override
    189     public SlicesFeatureProvider getSlicesFeatureProvider() {
    190         return slicesFeatureProvider;
    191     }
    192 
    193     @Override
    194     public AccountFeatureProvider getAccountFeatureProvider() {
    195         return mAccountFeatureProvider;
    196     }
    197 
    198     @Override
    199     public DeviceIndexFeatureProvider getDeviceIndexFeatureProvider() {
    200         return deviceIndexFeatureProvider;
    201     }
    202 }
    203