/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tv.util; import static android.support.test.InstrumentationRegistry.getContext; import android.content.pm.ResolveInfo; import android.media.tv.TvInputInfo; import android.support.test.filters.SmallTest; import com.android.tv.testing.ComparatorTester; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.junit.Test; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** Test for {@link TvInputManagerHelper} */ @SmallTest public class TvInputManagerHelperTest { final HashMap TEST_INPUT_MAP = new HashMap<>(); @Test public void testComparatorInternal() { ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); List inputs = new ArrayList<>(); inputs.add( createTvInputInfo( resolveInfo, "2_partner_input", null, 0, false, "2_partner_input", null, true)); inputs.add( createTvInputInfo( resolveInfo, "3_partner_input", null, 0, false, "3_partner_input", null, true)); inputs.add( createTvInputInfo( resolveInfo, "1_3rd_party_input", null, 0, false, "1_3rd_party_input", null, false)); inputs.add( createTvInputInfo( resolveInfo, "4_3rd_party_input", null, 0, false, "4_3rd_party_input", null, false)); TvInputManagerHelper manager = createMockTvInputManager(); ComparatorTester comparatorTester = ComparatorTester.withoutEqualsTest( new TvInputManagerHelper.InputComparatorInternal(manager)); for (TvInputInfo input : inputs) { comparatorTester.addComparableGroup(input); } comparatorTester.test(); } @Test public void testHardwareInputComparatorHdmi() { ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); TvInputInfo hdmi1 = createTvInputInfo( resolveInfo, "HDMI1", null, TvInputInfo.TYPE_HDMI, true, "HDMI1", null, false); TvInputInfo hdmi2 = createTvInputInfo( resolveInfo, "HDMI2", null, TvInputInfo.TYPE_HDMI, true, "HDMI2", "DVD", false); TvInputInfo hdmi3 = createTvInputInfo( resolveInfo, "HDMI3", null, TvInputInfo.TYPE_HDMI, true, "HDMI3", "Cable", false); TvInputInfo hdmi4 = createTvInputInfo( resolveInfo, "HDMI4", null, TvInputInfo.TYPE_HDMI, true, "HDMI4", null, false); TvInputManagerHelper manager = createMockTvInputManager(); ComparatorTester comparatorTester = ComparatorTester.withoutEqualsTest( new TvInputManagerHelper.HardwareInputComparator(getContext(), manager)); comparatorTester .addComparableGroup(hdmi3) .addComparableGroup(hdmi2) .addComparableGroup(hdmi1) .addComparableGroup(hdmi4) .test(); } @Test public void testHardwareInputComparatorCec() { ResolveInfo resolveInfo = TestUtils.createResolveInfo("test", "test"); TvInputInfo hdmi1 = createTvInputInfo( resolveInfo, "HDMI1", null, TvInputInfo.TYPE_HDMI, true, "HDMI1", null, false); TvInputInfo hdmi2 = createTvInputInfo( resolveInfo, "HDMI2", null, TvInputInfo.TYPE_HDMI, true, "HDMI2", null, false); TvInputInfo cec1 = createTvInputInfo( resolveInfo, "2_cec", "HDMI1", TvInputInfo.TYPE_HDMI, true, "2_cec", null, false); TvInputInfo cec2 = createTvInputInfo( resolveInfo, "1_cec", "HDMI2", TvInputInfo.TYPE_HDMI, true, "1_cec", null, false); TvInputManagerHelper manager = createMockTvInputManager(); ComparatorTester comparatorTester = ComparatorTester.withoutEqualsTest( new TvInputManagerHelper.HardwareInputComparator(getContext(), manager)); comparatorTester.addComparableGroup(cec1).addComparableGroup(cec2).test(); } private TvInputManagerHelper createMockTvInputManager() { TvInputManagerHelper manager = Mockito.mock(TvInputManagerHelper.class); Mockito.doAnswer( new Answer() { @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; return TEST_INPUT_MAP.get(info.getId()).mIsPartnerInput; } }) .when(manager) .isPartnerInput(Mockito.any()); Mockito.doAnswer( new Answer() { @Override public String answer(InvocationOnMock invocation) throws Throwable { TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; return TEST_INPUT_MAP.get(info.getId()).mLabel; } }) .when(manager) .loadLabel(Mockito.any()); Mockito.doAnswer( new Answer() { @Override public String answer(InvocationOnMock invocation) throws Throwable { TvInputInfo info = (TvInputInfo) invocation.getArguments()[0]; return TEST_INPUT_MAP.get(info.getId()).mCustomLabel; } }) .when(manager) .loadCustomLabel(Mockito.any()); Mockito.doAnswer( new Answer() { @Override public TvInputInfo answer(InvocationOnMock invocation) throws Throwable { String inputId = (String) invocation.getArguments()[0]; TvInputInfoWrapper inputWrapper = TEST_INPUT_MAP.get(inputId); return inputWrapper == null ? null : inputWrapper.mInput; } }) .when(manager) .getTvInputInfo(Mockito.any()); return manager; } private TvInputInfo createTvInputInfo( ResolveInfo service, String id, String parentId, int type, boolean isHardwareInput, String label, String customLabel, boolean isPartnerInput) { TvInputInfoWrapper inputWrapper = new TvInputInfoWrapper(); try { inputWrapper.mInput = TestUtils.createTvInputInfo(service, id, parentId, type, isHardwareInput); } catch (Exception e) { } inputWrapper.mLabel = label; inputWrapper.mIsPartnerInput = isPartnerInput; inputWrapper.mCustomLabel = customLabel; TEST_INPUT_MAP.put(id, inputWrapper); return inputWrapper.mInput; } private static class TvInputInfoWrapper { TvInputInfo mInput; String mLabel; String mCustomLabel; boolean mIsPartnerInput; } }