1 /*
2  * Copyright (C) 2018 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.tv.ui;
17 
18 import static com.google.common.truth.Truth.assertThat;
19 
20 import static org.robolectric.Shadows.shadowOf;
21 
22 import android.app.Activity;
23 import android.content.Context;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.widget.ImageView;
27 
28 import com.android.tv.R;
29 import com.android.tv.common.flags.impl.DefaultLegacyFlags;
30 import com.android.tv.common.singletons.HasSingletons;
31 import com.android.tv.data.api.Channel;
32 import com.android.tv.data.api.Program;
33 import com.android.tv.dvr.DvrManager;
34 import com.android.tv.testing.TvRobolectricTestRunner;
35 import com.android.tv.testing.constants.ConfigConstants;
36 import com.android.tv.ui.ChannelBannerView.MySingletons;
37 import com.android.tv.util.TvInputManagerHelper;
38 
39 import org.junit.Before;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.robolectric.Robolectric;
43 import org.robolectric.annotation.Config;
44 
45 import javax.inject.Provider;
46 
47 /** Tests for {@link ChannelBannerView}. */
48 @RunWith(TvRobolectricTestRunner.class)
49 @Config(sdk = ConfigConstants.SDK)
50 public class ChannelBannerViewTest {
51 
52     private TestActivity testActivity;
53     private ChannelBannerView mChannelBannerView;
54     private ImageView mChannelSignalStrengthView;
55 
56     @Before
setUp()57     public void setUp() {
58         testActivity = Robolectric.buildActivity(TestActivity.class).create().get();
59         mChannelBannerView =
60                 (ChannelBannerView)
61                         LayoutInflater.from(testActivity).inflate(R.layout.channel_banner, null);
62         mChannelSignalStrengthView = mChannelBannerView.findViewById(R.id.channel_signal_strength);
63     }
64 
65     @Test
updateChannelSignalStrengthView_valueIsNotValid()66     public void updateChannelSignalStrengthView_valueIsNotValid() {
67         mChannelBannerView.updateChannelSignalStrengthView(-1);
68         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.GONE);
69         mChannelBannerView.updateChannelSignalStrengthView(101);
70         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.GONE);
71     }
72 
73     @Test
updateChannelSignalStrengthView_20()74     public void updateChannelSignalStrengthView_20() {
75         mChannelBannerView.updateChannelSignalStrengthView(20);
76         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.VISIBLE);
77         assertThat(shadowOf(mChannelSignalStrengthView.getDrawable()).getCreatedFromResId())
78                 .isEqualTo(R.drawable.quantum_ic_signal_cellular_0_bar_white_24);
79     }
80 
81     @Test
updateChannelSignalStrengthView_40()82     public void updateChannelSignalStrengthView_40() {
83         mChannelBannerView.updateChannelSignalStrengthView(40);
84         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.VISIBLE);
85         assertThat(shadowOf(mChannelSignalStrengthView.getDrawable()).getCreatedFromResId())
86                 .isEqualTo(R.drawable.quantum_ic_signal_cellular_1_bar_white_24);
87     }
88 
89     @Test
updateChannelSignalStrengthView_60()90     public void updateChannelSignalStrengthView_60() {
91         mChannelBannerView.updateChannelSignalStrengthView(60);
92         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.VISIBLE);
93         assertThat(shadowOf(mChannelSignalStrengthView.getDrawable()).getCreatedFromResId())
94                 .isEqualTo(R.drawable.quantum_ic_signal_cellular_2_bar_white_24);
95     }
96 
97     @Test
updateChannelSignalStrengthView_80()98     public void updateChannelSignalStrengthView_80() {
99         mChannelBannerView.updateChannelSignalStrengthView(80);
100         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.VISIBLE);
101         assertThat(shadowOf(mChannelSignalStrengthView.getDrawable()).getCreatedFromResId())
102                 .isEqualTo(R.drawable.quantum_ic_signal_cellular_3_bar_white_24);
103     }
104 
105     @Test
updateChannelSignalStrengthView_100()106     public void updateChannelSignalStrengthView_100() {
107         mChannelBannerView.updateChannelSignalStrengthView(100);
108         assertThat(mChannelSignalStrengthView.getVisibility()).isEqualTo(View.VISIBLE);
109         assertThat(shadowOf(mChannelSignalStrengthView.getDrawable()).getCreatedFromResId())
110                 .isEqualTo(R.drawable.quantum_ic_signal_cellular_4_bar_white_24);
111     }
112 
113     /** An activity for {@link ChannelBannerViewTest}. */
114     public static class TestActivity extends Activity implements HasSingletons<MySingletons> {
115 
116         MySingletonsImpl mSingletons = new MySingletonsImpl();
117         Context mContext = this;
118 
119         @Override
singletons()120         public ChannelBannerView.MySingletons singletons() {
121             return mSingletons;
122         }
123 
124         /** MySingletons implementation needed for this class. */
125         public class MySingletonsImpl implements ChannelBannerView.MySingletons {
126 
127             @Override
getCurrentChannelProvider()128             public Provider<Channel> getCurrentChannelProvider() {
129                 return null;
130             }
131 
132             @Override
getCurrentProgramProvider()133             public Provider<Program> getCurrentProgramProvider() {
134                 return null;
135             }
136 
137             @Override
getOverlayManagerProvider()138             public Provider<TvOverlayManager> getOverlayManagerProvider() {
139                 return null;
140             }
141 
142             @Override
getTvInputManagerHelperSingleton()143             public TvInputManagerHelper getTvInputManagerHelperSingleton() {
144                 return new TvInputManagerHelper(mContext, DefaultLegacyFlags.DEFAULT);
145             }
146 
147             @Override
getCurrentPlayingPositionProvider()148             public Provider<Long> getCurrentPlayingPositionProvider() {
149                 return null;
150             }
151 
152             @Override
getDvrManagerSingleton()153             public DvrManager getDvrManagerSingleton() {
154                 return null;
155             }
156         }
157     }
158 }
159