2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings.dashboard.suggestions;
19 import android.content.Context;
20 import android.support.v7.widget.RecyclerView;
21 import android.support.v7.widget.helper.ItemTouchHelper;
23 import com.android.settings.R;
24 import com.android.settings.SettingsRobolectricTestRunner;
25 import com.android.settings.TestConfig;
26 import com.android.settings.testutils.FakeFeatureFactory;
27 import com.android.settingslib.SuggestionParser;
28 import com.android.settingslib.drawer.Tile;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.mockito.Answers;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36 import org.robolectric.annotation.Config;
38 import static com.google.common.truth.Truth.assertThat;
39 import static org.mockito.Matchers.any;
40 import static org.mockito.Matchers.anyInt;
41 import static org.mockito.Matchers.eq;
42 import static org.mockito.Mockito.mock;
43 import static org.mockito.Mockito.verify;
44 import static org.mockito.Mockito.when;
46 @RunWith(SettingsRobolectricTestRunner.class)
47 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
48 public class SuggestionDismissControllerTest {
50 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
51 private Context mContext;
52 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
53 private RecyclerView mRecyclerView;
55 private SuggestionParser mSuggestionParser;
57 private SuggestionDismissController.Callback mCallback;
59 private FakeFeatureFactory mFactory;
60 private SuggestionDismissController mController;
64 MockitoAnnotations.initMocks(this);
65 FakeFeatureFactory.setupForTest(mContext);
66 mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
68 when(mRecyclerView.getResources().getDimension(anyInt())).thenReturn(50F);
70 mController = new SuggestionDismissController(mContext, mRecyclerView,
71 mSuggestionParser, mCallback);
75 public void onMove_alwaysReturnTrue() {
76 assertThat(mController.onMove(null, null, null)).isTrue();
80 public void getSwipeDirs_isSuggestionTile_shouldReturnDirection() {
81 final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
82 when(vh.getItemViewType()).thenReturn(R.layout.suggestion_tile);
84 assertThat(mController.getSwipeDirs(mRecyclerView, vh))
85 .isEqualTo(ItemTouchHelper.START | ItemTouchHelper.END);
89 public void getSwipeDirs_isSuggestionTileCard_shouldReturnDirection() {
90 final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
91 when(vh.getItemViewType()).thenReturn(R.layout.suggestion_tile_card);
93 assertThat(mController.getSwipeDirs(mRecyclerView, vh))
94 .isEqualTo(ItemTouchHelper.START | ItemTouchHelper.END);
98 public void getSwipeDirs_isNotSuggestionTile_shouldReturn0() {
99 final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
100 when(vh.getItemViewType()).thenReturn(R.layout.condition_card);
102 assertThat(mController.getSwipeDirs(mRecyclerView, vh))
107 public void onSwiped_shouldTriggerDismissSuggestion() {
108 final RecyclerView.ViewHolder vh = mock(RecyclerView.ViewHolder.class);
110 mController.onSwiped(vh, ItemTouchHelper.START);
112 verify(mFactory.suggestionsFeatureProvider).dismissSuggestion(
113 eq(mContext), eq(mSuggestionParser), any(Tile.class));
114 verify(mCallback).onSuggestionDismissed(any(Tile.class));