diff options
Diffstat (limited to 'tests/unit/src/com/android/tv/menu')
-rw-r--r-- | tests/unit/src/com/android/tv/menu/MenuTest.java | 20 | ||||
-rw-r--r-- | tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java | 83 |
2 files changed, 79 insertions, 24 deletions
diff --git a/tests/unit/src/com/android/tv/menu/MenuTest.java b/tests/unit/src/com/android/tv/menu/MenuTest.java index 35e2a0fe..e8cfdbef 100644 --- a/tests/unit/src/com/android/tv/menu/MenuTest.java +++ b/tests/unit/src/com/android/tv/menu/MenuTest.java @@ -15,11 +15,16 @@ */ package com.android.tv.menu; +import static android.support.test.InstrumentationRegistry.getTargetContext; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; import com.android.tv.menu.Menu.OnMenuVisibilityChangeListener; +import org.junit.Before; +import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -29,23 +34,23 @@ import org.mockito.stubbing.Answer; * Tests for {@link Menu}. */ @SmallTest -public class MenuTest extends AndroidTestCase { +public class MenuTest { private Menu mMenu; private IMenuView mMenuView; private OnMenuVisibilityChangeListener mVisibilityChangeListener; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() { mMenuView = Mockito.mock(IMenuView.class); MenuRowFactory factory = Mockito.mock(MenuRowFactory.class); Mockito.when(factory.createMenuRow(Mockito.any(Menu.class), Mockito.any(Class.class))) .thenReturn(null); mVisibilityChangeListener = Mockito.mock(OnMenuVisibilityChangeListener.class); - mMenu = new Menu(getContext(), mMenuView, factory, mVisibilityChangeListener); + mMenu = new Menu(getTargetContext(), mMenuView, factory, mVisibilityChangeListener); mMenu.disableAnimationForTest(); } + @Test public void testScheduleHide() { mMenu.show(Menu.REASON_NONE); setMenuVisible(true); @@ -67,6 +72,7 @@ public class MenuTest extends AndroidTestCase { assertFalse("Hide is scheduled", mMenu.isHideScheduled()); } + @Test public void testShowHide_ReasonNone() { // Show with REASON_NONE mMenu.show(Menu.REASON_NONE); @@ -87,6 +93,7 @@ public class MenuTest extends AndroidTestCase { Mockito.verify(mMenuView).onHide(); } + @Test public void testShowHide_ReasonGuide() { // Show with REASON_GUIDE mMenu.show(Menu.REASON_GUIDE); @@ -107,6 +114,7 @@ public class MenuTest extends AndroidTestCase { Mockito.verify(mMenuView).onHide(); } + @Test public void testShowHide_ReasonPlayControlsFastForward() { // Show with REASON_PLAY_CONTROLS_FAST_FORWARD mMenu.show(Menu.REASON_PLAY_CONTROLS_FAST_FORWARD); diff --git a/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java index 6b0726d9..49ba8514 100644 --- a/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java +++ b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java @@ -15,18 +15,24 @@ */ package com.android.tv.menu; +import static android.support.test.InstrumentationRegistry.getInstrumentation; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import android.media.tv.TvTrackInfo; import android.os.SystemClock; import android.support.test.filters.MediumTest; +import android.text.TextUtils; import com.android.tv.BaseMainActivityTestCase; -import com.android.tv.MainActivity; -import com.android.tv.customization.CustomAction; import com.android.tv.testing.Constants; -import com.android.tv.testing.Utils; +import com.android.tv.testing.testinput.ChannelState; import com.android.tv.testing.testinput.ChannelStateData; import com.android.tv.testing.testinput.TvTestInputConstants; +import org.junit.Before; +import org.junit.Test; + import java.util.Collections; import java.util.List; @@ -35,24 +41,22 @@ import java.util.List; */ @MediumTest public class TvOptionsRowAdapterTest extends BaseMainActivityTestCase { - private static final int WAIT_TRACK_SIZE_TIMEOUT_MS = 300; - public static final int TRACK_SIZE_CHECK_INTERVAL_MS = 10; + private static final int WAIT_TRACK_EVENT_TIMEOUT_MS = 300; + public static final int TRACK_CHECK_INTERVAL_MS = 10; // TODO: Refactor TvOptionsRowAdapter so it does not rely on MainActivity private TvOptionsRowAdapter mTvOptionsRowAdapter; - public TvOptionsRowAdapterTest() { - super(MainActivity.class); - } - @Override - protected void setUp() throws Exception { + @Before + public void setUp() { super.setUp(); mTvOptionsRowAdapter = new TvOptionsRowAdapter(mActivity, Collections.emptyList()); tuneToChannel(TvTestInputConstants.CH_1_DEFAULT_DONT_MODIFY); waitUntilAudioTracksHaveSize(1); + waitUntilAudioTrackSelected(ChannelState.DEFAULT.getSelectedAudioTrackId()); // update should be called on the main thread to avoid the multi-thread problem. - Utils.runOnMainSync(new Runnable() { + getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { mTvOptionsRowAdapter.update(); @@ -60,11 +64,13 @@ public class TvOptionsRowAdapterTest extends BaseMainActivityTestCase { }); } + @Test public void testUpdateAudioAction_2tracks() { ChannelStateData data = new ChannelStateData(); data.mTvTrackInfos.add(Constants.GENERIC_AUDIO_TRACK); updateThenTune(data, TvTestInputConstants.CH_2); waitUntilAudioTracksHaveSize(2); + waitUntilAudioTrackSelected(Constants.EN_STEREO_AUDIO_TRACK.getId()); boolean result = mTvOptionsRowAdapter.updateMultiAudioAction(); assertEquals("update Action had change", true, result); @@ -72,46 +78,87 @@ public class TvOptionsRowAdapterTest extends BaseMainActivityTestCase { MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); } + @Test public void testUpdateAudioAction_1track() { ChannelStateData data = new ChannelStateData(); data.mTvTrackInfos.clear(); data.mTvTrackInfos.add(Constants.GENERIC_AUDIO_TRACK); + data.mSelectedVideoTrackId = null; + data.mSelectedAudioTrackId = Constants.GENERIC_AUDIO_TRACK.getId(); updateThenTune(data, TvTestInputConstants.CH_2); waitUntilAudioTracksHaveSize(1); + waitUntilAudioTrackSelected(Constants.GENERIC_AUDIO_TRACK.getId()); boolean result = mTvOptionsRowAdapter.updateMultiAudioAction(); - assertEquals("update Action had change", false, result); + assertEquals("update Action had change", true, result); assertEquals("Multi Audio enabled", false, MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); } + @Test public void testUpdateAudioAction_noTracks() { ChannelStateData data = new ChannelStateData(); data.mTvTrackInfos.clear(); + data.mTvTrackInfos.add(ChannelState.DEFAULT_VIDEO_TRACK); + data.mSelectedVideoTrackId = ChannelState.DEFAULT_VIDEO_TRACK.getId(); + data.mSelectedAudioTrackId = null; updateThenTune(data, TvTestInputConstants.CH_2); - waitUntilAudioTracksHaveSize(0); + // Wait for the video tracks, because there's no audio track. + waitUntilVideoTracksHaveSize(1); + waitUntilVideoTrackSelected(data.mSelectedVideoTrackId); boolean result = mTvOptionsRowAdapter.updateMultiAudioAction(); - assertEquals("update Action had change", false, result); + assertEquals("update Action had change", true, result); assertEquals("Multi Audio enabled", false, MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); } private void waitUntilAudioTracksHaveSize(int expected) { + waitUntilTracksHaveSize(TvTrackInfo.TYPE_AUDIO, expected); + } + + private void waitUntilVideoTracksHaveSize(int expected) { + waitUntilTracksHaveSize(TvTrackInfo.TYPE_VIDEO, expected); + } + + private void waitUntilTracksHaveSize(int trackType, int expected) { long start = SystemClock.elapsedRealtime(); int size = -1; - while (SystemClock.elapsedRealtime() < start + WAIT_TRACK_SIZE_TIMEOUT_MS) { + while (SystemClock.elapsedRealtime() < start + WAIT_TRACK_EVENT_TIMEOUT_MS) { getInstrumentation().waitForIdleSync(); - List<TvTrackInfo> tracks = mActivity.getTracks(TvTrackInfo.TYPE_AUDIO); + List<TvTrackInfo> tracks = mActivity.getTracks(trackType); if (tracks != null) { size = tracks.size(); if (size == expected) { return; } } - SystemClock.sleep(TRACK_SIZE_CHECK_INTERVAL_MS); + SystemClock.sleep(TRACK_CHECK_INTERVAL_MS); } - fail("Waited for " + WAIT_TRACK_SIZE_TIMEOUT_MS + " milliseconds for track size to be " + fail("Waited for " + WAIT_TRACK_EVENT_TIMEOUT_MS + " milliseconds for track size to be " + expected + " but was " + size); } + + private void waitUntilAudioTrackSelected(String trackId) { + waitUntilTrackSelected(TvTrackInfo.TYPE_AUDIO, trackId); + } + + private void waitUntilVideoTrackSelected(String trackId) { + waitUntilTrackSelected(TvTrackInfo.TYPE_VIDEO, trackId); + } + + private void waitUntilTrackSelected(int trackType, String trackId) { + long start = SystemClock.elapsedRealtime(); + String selectedTrackId = null; + while (SystemClock.elapsedRealtime() < start + WAIT_TRACK_EVENT_TIMEOUT_MS) { + getInstrumentation().waitForIdleSync(); + selectedTrackId = mActivity.getSelectedTrack(trackType); + if (TextUtils.equals(selectedTrackId, trackId)) { + return; + } + SystemClock.sleep(TRACK_CHECK_INTERVAL_MS); + } + fail("Waited for " + WAIT_TRACK_EVENT_TIMEOUT_MS + " milliseconds for track ID to be " + + trackId + " but was " + selectedTrackId); + } } |