• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 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 
17 package com.android.tv.util;
18 
19 import static android.support.test.InstrumentationRegistry.getContext;
20 
21 import android.content.pm.ResolveInfo;
22 import android.media.tv.TvInputInfo;
23 import android.support.test.filters.SmallTest;
24 import android.support.test.runner.AndroidJUnit4;
25 import com.android.tv.testing.ComparatorTester;
26 import com.android.tv.testing.utils.TestUtils;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Mockito;
33 import org.mockito.invocation.InvocationOnMock;
34 import org.mockito.stubbing.Answer;
35 
36 /** Test for {@link TvInputManagerHelper} */
37 @SmallTest
38 @RunWith(AndroidJUnit4.class)
39 public class TvInputManagerHelperTest {
40     final HashMap<String, TvInputInfoWrapper> TEST_INPUT_MAP = new HashMap<>();
41 
42     @Test
testComparatorInternal()43     public void testComparatorInternal() {
44         ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test");
45 
46         List<TvInputInfo> inputs = new ArrayList<>();
47         inputs.add(
48                 createTvInputInfo(
49                         resolveInfo,
50                         "2_partner_input",
51                         null,
52                         0,
53                         false,
54                         "2_partner_input",
55                         null,
56                         true));
57         inputs.add(
58                 createTvInputInfo(
59                         resolveInfo,
60                         "3_partner_input",
61                         null,
62                         0,
63                         false,
64                         "3_partner_input",
65                         null,
66                         true));
67         inputs.add(
68                 createTvInputInfo(
69                         resolveInfo,
70                         "1_3rd_party_input",
71                         null,
72                         0,
73                         false,
74                         "1_3rd_party_input",
75                         null,
76                         false));
77         inputs.add(
78                 createTvInputInfo(
79                         resolveInfo,
80                         "4_3rd_party_input",
81                         null,
82                         0,
83                         false,
84                         "4_3rd_party_input",
85                         null,
86                         false));
87 
88         TvInputManagerHelper manager = createMockTvInputManager();
89 
90         ComparatorTester<TvInputInfo> comparatorTester =
91                 ComparatorTester.withoutEqualsTest(
92                         new TvInputManagerHelper.InputComparatorInternal(manager));
93         for (TvInputInfo input : inputs) {
94             comparatorTester.addComparableGroup(input);
95         }
96         comparatorTester.test();
97     }
98 
99     @Test
testHardwareInputComparatorHdmi()100     public void testHardwareInputComparatorHdmi() {
101         ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test");
102 
103         TvInputInfo hdmi1 =
104                 createTvInputInfo(
105                         resolveInfo,
106                         "HDMI1",
107                         null,
108                         TvInputInfo.TYPE_HDMI,
109                         true,
110                         "HDMI1",
111                         null,
112                         false);
113         TvInputInfo hdmi2 =
114                 createTvInputInfo(
115                         resolveInfo,
116                         "HDMI2",
117                         null,
118                         TvInputInfo.TYPE_HDMI,
119                         true,
120                         "HDMI2",
121                         "DVD",
122                         false);
123         TvInputInfo hdmi3 =
124                 createTvInputInfo(
125                         resolveInfo,
126                         "HDMI3",
127                         null,
128                         TvInputInfo.TYPE_HDMI,
129                         true,
130                         "HDMI3",
131                         "Cable",
132                         false);
133         TvInputInfo hdmi4 =
134                 createTvInputInfo(
135                         resolveInfo,
136                         "HDMI4",
137                         null,
138                         TvInputInfo.TYPE_HDMI,
139                         true,
140                         "HDMI4",
141                         null,
142                         false);
143 
144         TvInputManagerHelper manager = createMockTvInputManager();
145 
146         ComparatorTester<TvInputInfo> comparatorTester =
147                 ComparatorTester.withoutEqualsTest(
148                         new TvInputManagerHelper.HardwareInputComparator(getContext(), manager));
149         comparatorTester
150                 .addComparableGroup(hdmi3)
151                 .addComparableGroup(hdmi2)
152                 .addComparableGroup(hdmi1)
153                 .addComparableGroup(hdmi4)
154                 .test();
155     }
156 
157     @Test
testHardwareInputComparatorCec()158     public void testHardwareInputComparatorCec() {
159         ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test");
160 
161         TvInputInfo hdmi1 =
162                 createTvInputInfo(
163                         resolveInfo,
164                         "HDMI1",
165                         null,
166                         TvInputInfo.TYPE_HDMI,
167                         true,
168                         "HDMI1",
169                         null,
170                         false);
171         TvInputInfo hdmi2 =
172                 createTvInputInfo(
173                         resolveInfo,
174                         "HDMI2",
175                         null,
176                         TvInputInfo.TYPE_HDMI,
177                         true,
178                         "HDMI2",
179                         null,
180                         false);
181 
182         TvInputInfo cec1 =
183                 createTvInputInfo(
184                         resolveInfo,
185                         "2_cec",
186                         "HDMI1",
187                         TvInputInfo.TYPE_HDMI,
188                         true,
189                         "2_cec",
190                         null,
191                         false);
192         TvInputInfo cec2 =
193                 createTvInputInfo(
194                         resolveInfo,
195                         "1_cec",
196                         "HDMI2",
197                         TvInputInfo.TYPE_HDMI,
198                         true,
199                         "1_cec",
200                         null,
201                         false);
202 
203         TvInputManagerHelper manager = createMockTvInputManager();
204 
205         ComparatorTester<TvInputInfo> comparatorTester =
206                 ComparatorTester.withoutEqualsTest(
207                         new TvInputManagerHelper.HardwareInputComparator(getContext(), manager));
208         comparatorTester.addComparableGroup(cec1).addComparableGroup(cec2).test();
209     }
210 
createMockTvInputManager()211     private TvInputManagerHelper createMockTvInputManager() {
212         TvInputManagerHelper manager = Mockito.mock(TvInputManagerHelper.class);
213         Mockito.doAnswer(
214                         new Answer<Boolean>() {
215                             @Override
216                             public Boolean answer(InvocationOnMock invocation) throws Throwable {
217                                 TvInputInfo info = (TvInputInfo) invocation.getArguments()[0];
218                                 return TEST_INPUT_MAP.get(info.getId()).mIsPartnerInput;
219                             }
220                         })
221                 .when(manager)
222                 .isPartnerInput(Mockito.<TvInputInfo>any());
223         Mockito.doAnswer(
224                         new Answer<String>() {
225                             @Override
226                             public String answer(InvocationOnMock invocation) throws Throwable {
227                                 TvInputInfo info = (TvInputInfo) invocation.getArguments()[0];
228                                 return TEST_INPUT_MAP.get(info.getId()).mLabel;
229                             }
230                         })
231                 .when(manager)
232                 .loadLabel(Mockito.<TvInputInfo>any());
233         Mockito.doAnswer(
234                         new Answer<String>() {
235                             @Override
236                             public String answer(InvocationOnMock invocation) throws Throwable {
237                                 TvInputInfo info = (TvInputInfo) invocation.getArguments()[0];
238                                 return TEST_INPUT_MAP.get(info.getId()).mCustomLabel;
239                             }
240                         })
241                 .when(manager)
242                 .loadCustomLabel(Mockito.<TvInputInfo>any());
243         Mockito.doAnswer(
244                         new Answer<TvInputInfo>() {
245                             @Override
246                             public TvInputInfo answer(InvocationOnMock invocation)
247                                     throws Throwable {
248                                 String inputId = (String) invocation.getArguments()[0];
249                                 TvInputInfoWrapper inputWrapper = TEST_INPUT_MAP.get(inputId);
250                                 return inputWrapper == null ? null : inputWrapper.mInput;
251                             }
252                         })
253                 .when(manager)
254                 .getTvInputInfo(Mockito.<String>any());
255         return manager;
256     }
257 
createTvInputInfo( ResolveInfo service, String id, String parentId, int type, boolean isHardwareInput, String label, String customLabel, boolean isPartnerInput)258     private TvInputInfo createTvInputInfo(
259             ResolveInfo service,
260             String id,
261             String parentId,
262             int type,
263             boolean isHardwareInput,
264             String label,
265             String customLabel,
266             boolean isPartnerInput) {
267         TvInputInfoWrapper inputWrapper = new TvInputInfoWrapper();
268         try {
269             inputWrapper.mInput =
270                     TestUtils.createTvInputInfo(service, id, parentId, type, isHardwareInput);
271         } catch (Exception e) {
272         }
273         inputWrapper.mLabel = label;
274         inputWrapper.mIsPartnerInput = isPartnerInput;
275         inputWrapper.mCustomLabel = customLabel;
276         TEST_INPUT_MAP.put(id, inputWrapper);
277         return inputWrapper.mInput;
278     }
279 
280     private static class TvInputInfoWrapper {
281         TvInputInfo mInput;
282         String mLabel;
283         String mCustomLabel;
284         boolean mIsPartnerInput;
285     }
286 }
287