1/*
2 * Copyright (C) 2017 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
17package androidx.preference.tests;
18
19import static org.mockito.Mockito.verify;
20import static org.mockito.Mockito.when;
21
22import android.graphics.Color;
23import android.graphics.drawable.ColorDrawable;
24import android.support.test.InstrumentationRegistry;
25import android.support.test.annotation.UiThreadTest;
26import android.support.test.filters.LargeTest;
27import android.support.test.filters.SdkSuppress;
28import android.support.test.runner.AndroidJUnit4;
29import android.view.View;
30import android.view.ViewGroup;
31import android.widget.ImageView;
32
33import androidx.preference.AndroidResources;
34import androidx.preference.Preference;
35import androidx.preference.PreferenceViewHolder;
36
37import org.junit.Before;
38import org.junit.Test;
39import org.junit.runner.RunWith;
40import org.mockito.Mock;
41import org.mockito.MockitoAnnotations;
42
43@SdkSuppress(maxSdkVersion = 27) // This test only works pre-P due to mocking final methods.
44@RunWith(AndroidJUnit4.class)
45@LargeTest
46public class PreferenceIconSpaceTest {
47
48    private Preference mPreference;
49
50    @Mock
51    private ViewGroup mViewGroup;
52    @Mock
53    private ImageView mIconView;
54    @Mock
55    private View mImageFrame;
56
57    @Before
58    public void setUp() {
59        MockitoAnnotations.initMocks(this);
60        when(mViewGroup.findViewById(AndroidResources.ANDROID_R_ICON_FRAME))
61                .thenReturn(mImageFrame);
62        when(mViewGroup.findViewById(android.R.id.icon))
63                .thenReturn(mIconView);
64
65        mPreference = new Preference(InstrumentationRegistry.getTargetContext());
66    }
67
68    @Test
69    @UiThreadTest
70    public void bindViewHolder_iconSpaceReserved_shouldReserveIconSpace() {
71        PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(mViewGroup);
72        mPreference.setIconSpaceReserved(true);
73        mPreference.onBindViewHolder(holder);
74
75        verify(mIconView).setVisibility(View.INVISIBLE);
76        verify(mImageFrame).setVisibility(View.INVISIBLE);
77    }
78
79    @LargeTest
80    @Test
81    @UiThreadTest
82    public void bindViewHolder_iconSpaceNotReserved_shouldNotReserveIconSpace() {
83        PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(mViewGroup);
84        mPreference.setIconSpaceReserved(false);
85        mPreference.onBindViewHolder(holder);
86
87        verify(mIconView).setVisibility(View.GONE);
88        verify(mImageFrame).setVisibility(View.GONE);
89    }
90
91    @Test
92    @UiThreadTest
93    public void bindViewHolder_hasIcon_shouldDisplayIcon() {
94        PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(mViewGroup);
95        mPreference.setIcon(new ColorDrawable(Color.BLACK));
96        mPreference.onBindViewHolder(holder);
97
98        verify(mIconView).setVisibility(View.VISIBLE);
99        verify(mImageFrame).setVisibility(View.VISIBLE);
100    }
101}
102