aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java')
-rw-r--r--tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java83
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);
+ }
}