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 Chalkopackage com.android.tv; 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 186ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport static android.support.test.InstrumentationRegistry.getInstrumentation; 196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport static org.junit.Assert.assertEquals; 206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport static org.junit.Assert.assertTrue; 216ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 2265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.test.filters.MediumTest; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.widget.TextView; 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.Channel; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.testinput.TvTestInputConstants; 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.ChannelBannerView; 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport org.junit.Test; 316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/** 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Tests for {@link MainActivity}. 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko@MediumTest 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class MainActivityTest extends BaseMainActivityTestCase { 396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testInitialConditions() { 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko waitUntilChannelLoadingFinish(); 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<Channel> channelList = mActivity.getChannelDataManager().getChannelList(); 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertTrue("Expected at least one channel", channelList.size() > 0); 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public void testTuneToChannel() { 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko tuneToChannel(TvTestInputConstants.CH_2); 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertChannelBannerShown(true); 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertChannelName(TvTestInputConstants.CH_2.name); 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko @Test 546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko public void testShowProgramGuide() { 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko tuneToChannel(TvTestInputConstants.CH_2); 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko showProgramGuide(); 5707b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko getInstrumentation().waitForIdleSync(); 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertChannelBannerShown(false); 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramGuide(true); 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko private void showProgramGuide() { 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Run on UI thread so views can be modified 647d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko getInstrumentation().runOnMainSync(new Runnable() { 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void run() { 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mActivity.getOverlayManager().showProgramGuide(); 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }); 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void assertChannelName(String displayName) { 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TextView channelNameView = (TextView) mActivity.findViewById(R.id.channel_name); 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("Channel Name", displayName, channelNameView.getText()); 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 7707b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko private void assertProgramGuide(boolean isShown) { 7807b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko assertViewIsShown("Program Guide", R.id.program_guide, isShown); 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private ChannelBannerView assertChannelBannerShown(boolean isShown) { 82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko View v = assertExpectedBannerSceneClassShown(ChannelBannerView.class, isShown); 83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return (ChannelBannerView) v; 84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private View assertExpectedBannerSceneClassShown(Class<ChannelBannerView> expectedClass, 876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko boolean expectedShown) { 88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko View v = assertViewIsShown(expectedClass.getSimpleName(), R.id.scene_transition_common, 89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko expectedShown); 90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (v != null) { 91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals(expectedClass, v.getClass()); 92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return v; 94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko private View assertViewIsShown(String viewName, int viewId, boolean expected) { 97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko View view = mActivity.findViewById(viewId); 98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (view == null) { 99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (expected) { 100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko throw new AssertionError("View " + viewName + " not found"); 101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return null; 103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals(viewName + " shown", expected, view.isShown()); 106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return view; 107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 109