1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.util; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport static android.support.test.InstrumentationRegistry.getContext; 206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.pm.ResolveInfo; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.media.tv.TvInputInfo; 2365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.test.filters.SmallTest; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ComparatorTester; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport org.junit.Test; 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport org.mockito.Mockito; 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport org.mockito.invocation.InvocationOnMock; 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport org.mockito.stubbing.Answer; 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport java.util.ArrayList; 336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport java.util.HashMap; 346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport java.util.List; 3507b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/** 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Test for {@link TvInputManagerHelper} 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko@SmallTest 406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkopublic class TvInputManagerHelperTest { 416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko final HashMap<String, TvInputInfoWrapper> TEST_INPUT_MAP = new HashMap<>(); 426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public void testComparatorInternal() { 456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); 466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko List<TvInputInfo> inputs = new ArrayList<>(); 486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputs.add(createTvInputInfo(resolveInfo, "2_partner_input", null, 0, false, 496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko "2_partner_input", null, true)); 506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputs.add(createTvInputInfo(resolveInfo, "3_partner_input", null, 0, false, 516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko "3_partner_input", null, true)); 526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputs.add(createTvInputInfo(resolveInfo, "1_3rd_party_input", null, 0, false, 536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko "1_3rd_party_input", null, false)); 546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputs.add(createTvInputInfo(resolveInfo, "4_3rd_party_input", null, 0, false, 556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko "4_3rd_party_input", null, false)); 566ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputManagerHelper manager = createMockTvInputManager(); 586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ComparatorTester<TvInputInfo> comparatorTester = ComparatorTester.withoutEqualsTest( 606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko new TvInputManagerHelper.InputComparatorInternal(manager)); 616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko for (TvInputInfo input : inputs) { 626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko comparatorTester.addComparableGroup(input); 636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko comparatorTester.test(); 656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public void testHardwareInputComparatorHdmi() { 696ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); 706ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 716ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi1 = createTvInputInfo(resolveInfo, "HDMI1", null, TvInputInfo.TYPE_HDMI, 726ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI1", null, false); 736ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi2 = createTvInputInfo(resolveInfo, "HDMI2", null, TvInputInfo.TYPE_HDMI, 746ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI2", "DVD", false); 756ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi3 = createTvInputInfo(resolveInfo, "HDMI3", null, TvInputInfo.TYPE_HDMI, 766ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI3", "Cable", false); 776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi4 = createTvInputInfo(resolveInfo, "HDMI4", null, TvInputInfo.TYPE_HDMI, 786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI4", null, false); 796ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputManagerHelper manager = createMockTvInputManager(); 816ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 826ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ComparatorTester<TvInputInfo> comparatorTester = ComparatorTester.withoutEqualsTest( 836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko new TvInputManagerHelper.HardwareInputComparator(getContext(), manager)); 846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko comparatorTester.addComparableGroup(hdmi3) 856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .addComparableGroup(hdmi2) 866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .addComparableGroup(hdmi1) 876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .addComparableGroup(hdmi4) 886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .test(); 896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 926ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public void testHardwareInputComparatorCec() { 936ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); 946ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 956ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi1 = createTvInputInfo(resolveInfo, "HDMI1", null, TvInputInfo.TYPE_HDMI, 966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI1", null, false); 976ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo hdmi2 = createTvInputInfo(resolveInfo, "HDMI2", null, TvInputInfo.TYPE_HDMI, 986ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "HDMI2", null, false); 99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 1006ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo cec1 = createTvInputInfo(resolveInfo, "2_cec", "HDMI1", TvInputInfo.TYPE_HDMI, 1016ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "2_cec", null, false); 1026ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo cec2 = createTvInputInfo(resolveInfo, "1_cec", "HDMI2", TvInputInfo.TYPE_HDMI, 1036ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko true, "1_cec", null, false); 1046ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 1056ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputManagerHelper manager = createMockTvInputManager(); 1066ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 1076ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko ComparatorTester<TvInputInfo> comparatorTester = ComparatorTester.withoutEqualsTest( 1086ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko new TvInputManagerHelper.HardwareInputComparator(getContext(), manager)); 1096ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko comparatorTester.addComparableGroup(cec1) 1106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .addComparableGroup(cec2) 1116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko .test(); 1126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 1136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 1146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko private TvInputManagerHelper createMockTvInputManager() { 115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TvInputManagerHelper manager = Mockito.mock(TvInputManagerHelper.class); 116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Mockito.doAnswer(new Answer<Boolean>() { 117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public Boolean answer(InvocationOnMock invocation) throws Throwable { 119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; 1206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return TEST_INPUT_MAP.get(info.getId()).mIsPartnerInput; 121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }).when(manager).isPartnerInput(Mockito.<TvInputInfo>any()); 123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Mockito.doAnswer(new Answer<String>() { 124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public String answer(InvocationOnMock invocation) throws Throwable { 126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; 1276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return TEST_INPUT_MAP.get(info.getId()).mLabel; 128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }).when(manager).loadLabel(Mockito.<TvInputInfo>any()); 1306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko Mockito.doAnswer(new Answer<String>() { 1316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Override 1326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public String answer(InvocationOnMock invocation) throws Throwable { 1336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; 1346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return TEST_INPUT_MAP.get(info.getId()).mCustomLabel; 1356ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 1366ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko }).when(manager).loadCustomLabel(Mockito.<TvInputInfo>any()); 1376ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko Mockito.doAnswer(new Answer<TvInputInfo>() { 1386ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Override 1396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public TvInputInfo answer(InvocationOnMock invocation) throws Throwable { 1406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko String inputId = (String) invocation.getArguments()[0]; 1416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfoWrapper inputWrapper = TEST_INPUT_MAP.get(inputId); 1426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return inputWrapper == null ? null : inputWrapper.mInput; 1436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 1446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko }).when(manager).getTvInputInfo(Mockito.<String>any()); 1456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return manager; 1466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 1486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko private TvInputInfo createTvInputInfo(ResolveInfo service, String id, 1496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko String parentId, int type, boolean isHardwareInput, String label, String customLabel, 1506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko boolean isPartnerInput) { 1516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfoWrapper inputWrapper = new TvInputInfoWrapper(); 1526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko try { 1536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputWrapper.mInput = 1546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TestUtils.createTvInputInfo(service, id, parentId, type, isHardwareInput); 1556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } catch (Exception e) { 156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 1576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputWrapper.mLabel = label; 1586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputWrapper.mIsPartnerInput = isPartnerInput; 1596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko inputWrapper.mCustomLabel = customLabel; 1606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TEST_INPUT_MAP.put(id, inputWrapper); 1616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko return inputWrapper.mInput; 1626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko } 1636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 1646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko private static class TvInputInfoWrapper { 1656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko TvInputInfo mInput; 1666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko String mLabel; 1676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko String mCustomLabel; 1686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko boolean mIsPartnerInput; 169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 171