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 | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java new file mode 100644 index 00000000..4ffd9fa9 --- /dev/null +++ b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.tv.menu; + +import android.media.tv.TvTrackInfo; +import android.os.SystemClock; +import android.test.suitebuilder.annotation.SmallTest; + +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.testinput.ChannelStateData; +import com.android.tv.testing.testinput.TvTestInputConstants; + +import java.util.Collections; +import java.util.List; + +/** + * Tests for {@link TvOptionsRowAdapter}. + */ +@SmallTest +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; + + + // TODO: Refactor TvOptionsRowAdapter so it does not rely on MainActivity + private TvOptionsRowAdapter mTvOptionsRowAdapter; + + public TvOptionsRowAdapterTest() { + super(MainActivity.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + mTvOptionsRowAdapter = new TvOptionsRowAdapter(mActivity, + Collections.<CustomAction>emptyList()); + tuneToChannel(TvTestInputConstants.CH_1); + } + + public void testUpdateAudioAction_2tracks() { + mTvOptionsRowAdapter.update(); + ChannelStateData data = new ChannelStateData(); + data.mTvTrackInfos.add(Constants.GENERIC_AUDIO_TRACK); + updateThenTune(data, TvTestInputConstants.CH_2); + waitUntilTracksHaveSize(2); + + boolean result = mTvOptionsRowAdapter.updateActions(); + assertEquals("update Action had change", true, result); + assertEquals("Multi Audio enabled", true, + MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); + } + + public void testUpdateAudioAction_1track() { + mTvOptionsRowAdapter.update(); + ChannelStateData data = new ChannelStateData(); + data.mTvTrackInfos.clear(); + data.mTvTrackInfos.add(Constants.GENERIC_AUDIO_TRACK); + updateThenTune(data, TvTestInputConstants.CH_2); + waitUntilTracksHaveSize(1); + + boolean result = mTvOptionsRowAdapter.updateActions(); + assertEquals("update Action had change", true, result); + assertEquals("Multi Audio enabled", false, + MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); + } + + public void testUpdateAudioAction_noTracks() { + mTvOptionsRowAdapter.update(); + ChannelStateData data = new ChannelStateData(); + data.mTvTrackInfos.clear(); + updateThenTune(data, TvTestInputConstants.CH_2); + waitUntilTracksHaveSize(0); + + boolean result = mTvOptionsRowAdapter.updateActions(); + assertEquals("update Action had change", false, result); + assertEquals("Multi Audio enabled", false, + MenuAction.SELECT_AUDIO_LANGUAGE_ACTION.isEnabled()); + } + + private void waitUntilTracksHaveSize(int expected) { + long start = SystemClock.elapsedRealtime(); + while (SystemClock.elapsedRealtime() < start + WAIT_TRACK_SIZE_TIMEOUT_MS) { + getInstrumentation().waitForIdleSync(); + List<TvTrackInfo> tracks = mActivity.getTracks(TvTrackInfo.TYPE_AUDIO); + if (tracks != null && tracks.size() == expected) { + return; + } + SystemClock.sleep(TRACK_SIZE_CHECK_INTERVAL_MS); + } + fail("Waited for " + WAIT_TRACK_SIZE_TIMEOUT_MS + " milliseconds for track size to be " + + expected); + } +} |