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