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