DashboardSummaryTest.java revision 9ca41dd89a7d6af79e80ab4293f2f650185a9e27
1e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang/* 2e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * Copyright (C) 2017 The Android Open Source Project 3e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * 4e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * you may not use this file except in compliance with the License. 6e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * You may obtain a copy of the License at 7e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * 8e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * http://www.apache.org/licenses/LICENSE-2.0 9e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * 10e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * Unless required by applicable law or agreed to in writing, software 11e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * See the License for the specific language governing permissions and 14e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang * limitations under the License. 15e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang */ 16e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 17e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangpackage com.android.settings.dashboard; 18e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 19e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport android.app.Activity; 200bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyuleiimport android.support.v7.widget.LinearLayoutManager; 21efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang 22e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport com.android.settings.SettingsRobolectricTestRunner; 23e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport com.android.settings.TestConfig; 240bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyuleiimport com.android.settings.dashboard.conditional.ConditionManager; 250bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyuleiimport com.android.settings.dashboard.conditional.FocusRecyclerView; 26e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport com.android.settingslib.drawer.CategoryKey; 27e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 28e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.junit.Before; 29e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.junit.Test; 30e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.junit.runner.RunWith; 31e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.mockito.Mock; 32e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.mockito.MockitoAnnotations; 33e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.robolectric.annotation.Config; 34e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport org.robolectric.util.ReflectionHelpers; 35e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 36efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhangimport static org.mockito.Matchers.anyList; 379ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryadimport static org.mockito.Mockito.doNothing; 38e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport static org.mockito.Mockito.doReturn; 39e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport static org.mockito.Mockito.mock; 400bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyuleiimport static org.mockito.Mockito.never; 41e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport static org.mockito.Mockito.spy; 42e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport static org.mockito.Mockito.verify; 43e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangimport static org.mockito.Mockito.when; 44e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 459ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad 46e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang@RunWith(SettingsRobolectricTestRunner.class) 47e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 48e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhangpublic class DashboardSummaryTest { 49e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 50e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang @Mock 51e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang private DashboardAdapter mAdapter; 52e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang @Mock 53e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang private DashboardFeatureProvider mDashboardFeatureProvider; 540bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei @Mock 550bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei private FocusRecyclerView mDashboard; 560bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei @Mock 570bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei private LinearLayoutManager mLayoutManager; 580bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei @Mock 590bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei private ConditionManager mConditionManager; 60e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 61e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang private DashboardSummary mSummary; 62e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 63e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang @Before 64e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang public void setUp() { 65e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang MockitoAnnotations.initMocks(this); 66e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang mSummary = spy(new DashboardSummary()); 67e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang ReflectionHelpers.setField(mSummary, "mAdapter", mAdapter); 68e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang ReflectionHelpers.setField(mSummary, "mDashboardFeatureProvider", 69e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang mDashboardFeatureProvider); 700bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei ReflectionHelpers.setField(mSummary, "mDashboard", mDashboard); 710bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei ReflectionHelpers.setField(mSummary, "mLayoutManager", mLayoutManager); 720bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei ReflectionHelpers.setField(mSummary, "mConditionManager", mConditionManager); 73e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang } 74e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang 75e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang @Test 76e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang public void updateCategoryAndSuggestion_shouldGetCategoryFromFeatureProvider() { 77e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang doReturn(mock(Activity.class)).when(mSummary).getActivity(); 78e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang when(mDashboardFeatureProvider.isEnabled()).thenReturn(true); 79e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang mSummary.updateCategoryAndSuggestion(null); 80e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang verify(mDashboardFeatureProvider).getTilesForCategory(CategoryKey.CATEGORY_HOMEPAGE); 81e8a77c551ed3296dfe7958d68bea5993f2e5404eFan Zhang } 820bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei 830bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei @Test 840bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei public void onConditionChanged_PositionAtTop_ScrollToTop() { 850bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(1); 860bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei mSummary.onConditionsChanged(); 870bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei verify(mDashboard).scrollToPosition(0); 880bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei } 890bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei 900bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei @Test 910bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei public void onConditionChanged_PositionNotTop_RemainPosition() { 920bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(2); 930bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei mSummary.onConditionsChanged(); 940bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei verify(mDashboard, never()).scrollToPosition(0); 950bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei } 96efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang 97efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang @Test 989ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad public void onCategoryChanged_noRebuildOnFirstCall() { 99efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang doReturn(mock(Activity.class)).when(mSummary).getActivity(); 1009ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad doNothing().when(mSummary).rebuildUI(); 1019ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad mSummary.onCategoriesChanged(); 1029ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad verify(mSummary, never()).rebuildUI(); 1039ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad } 104efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang 1059ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad @Test 1069ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad public void onCategoryChanged_rebuildOnSecondCall() { 1079ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad doReturn(mock(Activity.class)).when(mSummary).getActivity(); 1089ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad doNothing().when(mSummary).rebuildUI(); 1099ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad mSummary.onCategoriesChanged(); 110efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang mSummary.onCategoriesChanged(); 1119ca41dd89a7d6af79e80ab4293f2f650185a9e27Soroosh Mariooryad verify(mSummary).rebuildUI(); 112efba6b4e143fe834dc3ded2cae0abc1a3e4748f7Fan Zhang } 1130bb598c4d0c556ed509b8a0d1a365437e566348ejackqdyulei}