diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 8ff5607a590..8b97f04e4b5 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -20,6 +20,7 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.os.Bundle; +import android.support.annotation.VisibleForTesting; import android.support.v7.util.DiffUtil; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; @@ -58,9 +59,10 @@ public class DashboardAdapter extends RecyclerView.Adapter> { diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java new file mode 100644 index 00000000000..187e2debb65 --- /dev/null +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.dashboard; + +import android.content.Context; +import android.view.View; +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; +import com.android.settings.core.instrumentation.MetricsFeatureProvider; +import com.android.settings.dashboard.conditional.Condition; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class DashboardAdapterTest { + @Mock + private Context mContext; + @Mock + private View mView; + @Mock + private Condition mCondition; + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; + private DashboardAdapter mDashboardAdapter; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mDashboardAdapter = new DashboardAdapter(mContext, null, mMetricsFeatureProvider, + null, null); + when(mView.getTag()).thenReturn(mCondition); + } + + @Test + public void testSetConditions_AfterSetConditions_ExpandedConditionNull() { + mDashboardAdapter.onExpandClick(mView); + assertThat(mDashboardAdapter.mDashboardData.getExpandedCondition()).isEqualTo(mCondition); + mDashboardAdapter.setConditions(null); + assertThat(mDashboardAdapter.mDashboardData.getExpandedCondition()).isNull(); + } +} diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java index 69836d8a365..9627e2ce045 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java @@ -18,8 +18,11 @@ package com.android.settings.dashboard; import android.app.Activity; +import android.support.v7.widget.LinearLayoutManager; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.dashboard.conditional.ConditionManager; +import com.android.settings.dashboard.conditional.FocusRecyclerView; import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; @@ -32,6 +35,7 @@ import org.robolectric.util.ReflectionHelpers; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -44,6 +48,12 @@ public class DashboardSummaryTest { private DashboardAdapter mAdapter; @Mock private DashboardFeatureProvider mDashboardFeatureProvider; + @Mock + private FocusRecyclerView mDashboard; + @Mock + private LinearLayoutManager mLayoutManager; + @Mock + private ConditionManager mConditionManager; private DashboardSummary mSummary; @@ -54,6 +64,9 @@ public class DashboardSummaryTest { ReflectionHelpers.setField(mSummary, "mAdapter", mAdapter); ReflectionHelpers.setField(mSummary, "mDashboardFeatureProvider", mDashboardFeatureProvider); + ReflectionHelpers.setField(mSummary, "mDashboard", mDashboard); + ReflectionHelpers.setField(mSummary, "mLayoutManager", mLayoutManager); + ReflectionHelpers.setField(mSummary, "mConditionManager", mConditionManager); } @Test @@ -63,4 +76,18 @@ public class DashboardSummaryTest { mSummary.updateCategoryAndSuggestion(null); verify(mDashboardFeatureProvider).getTilesForCategory(CategoryKey.CATEGORY_HOMEPAGE); } -} + + @Test + public void onConditionChanged_PositionAtTop_ScrollToTop() { + when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(1); + mSummary.onConditionsChanged(); + verify(mDashboard).scrollToPosition(0); + } + + @Test + public void onConditionChanged_PositionNotTop_RemainPosition() { + when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(2); + mSummary.onConditionsChanged(); + verify(mDashboard, never()).scrollToPosition(0); + } +} \ No newline at end of file