diff options
Diffstat (limited to 'tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java')
-rw-r--r-- | tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java | 83 |
1 files changed, 65 insertions, 18 deletions
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); + } } |