diff options
author | Live Channels Team <no-reply@google.com> | 2018-01-17 13:56:41 -0800 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2018-01-18 01:51:43 +0000 |
commit | 944779887775bd950cf1abf348d2df461593f6ab (patch) | |
tree | f3c8bd17c7874f5cccb44d39f7b11b99376dfd03 /tests/unit/src/com/android/tv | |
parent | 38fef3bf253578f518d1bc727da4afb263194398 (diff) | |
download | TV-944779887775bd950cf1abf348d2df461593f6ab.tar.gz |
Sync aosp code with internal version.
Project import generated by Copybara.
PiperOrigin-RevId: 182265045
Change-Id: I32cd1a70947fd245f8f70c19eb1713943c7af0bc
Diffstat (limited to 'tests/unit/src/com/android/tv')
45 files changed, 426 insertions, 4022 deletions
diff --git a/tests/unit/src/com/android/tv/BaseMainActivityTestCase.java b/tests/unit/src/com/android/tv/BaseMainActivityTestCase.java index 4e280d1a..84283d90 100644 --- a/tests/unit/src/com/android/tv/BaseMainActivityTestCase.java +++ b/tests/unit/src/com/android/tv/BaseMainActivityTestCase.java @@ -23,7 +23,7 @@ import android.support.test.rule.ActivityTestRule; import android.text.TextUtils; import com.android.tv.data.Channel; import com.android.tv.data.ChannelDataManager; -import com.android.tv.testing.ChannelInfo; +import com.android.tv.testing.data.ChannelInfo; import com.android.tv.testing.testinput.ChannelStateData; import com.android.tv.testing.testinput.TestInputControlConnection; import com.android.tv.testing.testinput.TestInputControlUtils; diff --git a/tests/unit/src/com/android/tv/CurrentPositionMediatorTest.java b/tests/unit/src/com/android/tv/CurrentPositionMediatorTest.java index 6a48e635..1c6a0e3b 100644 --- a/tests/unit/src/com/android/tv/CurrentPositionMediatorTest.java +++ b/tests/unit/src/com/android/tv/CurrentPositionMediatorTest.java @@ -18,15 +18,17 @@ package com.android.tv; import static com.android.tv.TimeShiftManager.INVALID_TIME; import static com.android.tv.TimeShiftManager.REQUEST_TIMEOUT_MS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotSame; +import static com.google.common.truth.Truth.assertWithMessage; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; @MediumTest +@RunWith(AndroidJUnit4.class) public class CurrentPositionMediatorTest extends BaseMainActivityTestCase { private TimeShiftManager.CurrentPositionMediator mMediator; @@ -50,8 +52,12 @@ public class CurrentPositionMediatorTest extends BaseMainActivityTestCase { public void testOnSeekRequested() { long seekToTimeMs = System.currentTimeMillis() - REQUEST_TIMEOUT_MS * 3; mMediator.onSeekRequested(seekToTimeMs); - assertNotSame("Seek request time", INVALID_TIME, mMediator.mSeekRequestTimeMs); - assertEquals("Current position", seekToTimeMs, mMediator.mCurrentPositionMs); + assertWithMessage("Seek request time") + .that(mMediator.mSeekRequestTimeMs) + .isNotSameAs(INVALID_TIME); + assertWithMessage("Current position") + .that(mMediator.mCurrentPositionMs) + .isEqualTo(seekToTimeMs); } @UiThreadTest @@ -61,9 +67,15 @@ public class CurrentPositionMediatorTest extends BaseMainActivityTestCase { long newCurrentTimeMs = seekToTimeMs + REQUEST_TIMEOUT_MS; mMediator.onSeekRequested(seekToTimeMs); mMediator.onCurrentPositionChanged(newCurrentTimeMs); - assertNotSame("Seek request time", INVALID_TIME, mMediator.mSeekRequestTimeMs); - assertNotSame("Current position", seekToTimeMs, mMediator.mCurrentPositionMs); - assertNotSame("Current position", newCurrentTimeMs, mMediator.mCurrentPositionMs); + assertWithMessage("Seek request time") + .that(mMediator.mSeekRequestTimeMs) + .isNotSameAs(INVALID_TIME); + assertWithMessage("Current position") + .that(mMediator.mCurrentPositionMs) + .isNotSameAs(seekToTimeMs); + assertWithMessage("Current position") + .that(mMediator.mCurrentPositionMs) + .isNotSameAs(newCurrentTimeMs); } @UiThreadTest @@ -78,7 +90,11 @@ public class CurrentPositionMediatorTest extends BaseMainActivityTestCase { private void assertCurrentPositionMediator( long expectedSeekRequestTimeMs, long expectedCurrentPositionMs) { - assertEquals("Seek request time", expectedSeekRequestTimeMs, mMediator.mSeekRequestTimeMs); - assertEquals("Current position", expectedCurrentPositionMs, mMediator.mCurrentPositionMs); + assertWithMessage("Seek request time") + .that(mMediator.mSeekRequestTimeMs) + .isEqualTo(expectedSeekRequestTimeMs); + assertWithMessage("Current position") + .that(mMediator.mCurrentPositionMs) + .isEqualTo(expectedCurrentPositionMs); } } diff --git a/tests/unit/src/com/android/tv/FeaturesTest.java b/tests/unit/src/com/android/tv/FeaturesTest.java index b6be6866..e19f4b7c 100644 --- a/tests/unit/src/com/android/tv/FeaturesTest.java +++ b/tests/unit/src/com/android/tv/FeaturesTest.java @@ -16,18 +16,21 @@ package com.android.tv; -import static org.junit.Assert.assertFalse; +import static com.google.common.truth.Truth.assertThat; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Test; +import org.junit.runner.RunWith; /** Test for features. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class FeaturesTest { @Test public void testPropertyFeatureKeyLength() { // This forces the class to be loaded and verifies all PropertyFeature key lengths. // If any keys are too long the test will fail to load. - assertFalse(Features.TEST_FEATURE.isEnabled(null)); + assertThat(TvFeatures.TEST_FEATURE.isEnabled(null)).isFalse(); } } diff --git a/tests/unit/src/com/android/tv/MainActivityTest.java b/tests/unit/src/com/android/tv/MainActivityTest.java index 00aa79d8..d28a8cd2 100644 --- a/tests/unit/src/com/android/tv/MainActivityTest.java +++ b/tests/unit/src/com/android/tv/MainActivityTest.java @@ -16,10 +16,11 @@ package com.android.tv; import static android.support.test.InstrumentationRegistry.getInstrumentation; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; import android.view.View; import android.widget.TextView; import com.android.tv.data.Channel; @@ -27,15 +28,17 @@ import com.android.tv.testing.testinput.TvTestInputConstants; import com.android.tv.ui.ChannelBannerView; import java.util.List; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link MainActivity}. */ @MediumTest +@RunWith(AndroidJUnit4.class) public class MainActivityTest extends BaseMainActivityTestCase { @Test public void testInitialConditions() { waitUntilChannelLoadingFinish(); List<Channel> channelList = mActivity.getChannelDataManager().getChannelList(); - assertTrue("Expected at least one channel", channelList.size() > 0); + assertWithMessage("Expected at least one channel").that(channelList.size() > 0).isTrue(); } @Test @@ -68,7 +71,7 @@ public class MainActivityTest extends BaseMainActivityTestCase { private void assertChannelName(String displayName) { TextView channelNameView = (TextView) mActivity.findViewById(R.id.channel_name); - assertEquals("Channel Name", displayName, channelNameView.getText()); + assertWithMessage("Channel Name").that(channelNameView.getText()).isEqualTo(displayName); } private void assertProgramGuide(boolean isShown) { @@ -86,7 +89,7 @@ public class MainActivityTest extends BaseMainActivityTestCase { assertViewIsShown( expectedClass.getSimpleName(), R.id.scene_transition_common, expectedShown); if (v != null) { - assertEquals(expectedClass, v.getClass()); + assertThat(v.getClass()).isEqualTo(expectedClass); } return v; } @@ -100,7 +103,7 @@ public class MainActivityTest extends BaseMainActivityTestCase { return null; } } - assertEquals(viewName + " shown", expected, view.isShown()); + assertWithMessage(viewName + " shown").that(view.isShown()).isEqualTo(expected); return view; } } diff --git a/tests/unit/src/com/android/tv/TimeShiftManagerTest.java b/tests/unit/src/com/android/tv/TimeShiftManagerTest.java index 7ad6bdbf..e30a9226 100644 --- a/tests/unit/src/com/android/tv/TimeShiftManagerTest.java +++ b/tests/unit/src/com/android/tv/TimeShiftManagerTest.java @@ -22,13 +22,16 @@ import static com.android.tv.TimeShiftManager.TIME_SHIFT_ACTION_ID_JUMP_TO_PREVI import static com.android.tv.TimeShiftManager.TIME_SHIFT_ACTION_ID_PAUSE; import static com.android.tv.TimeShiftManager.TIME_SHIFT_ACTION_ID_PLAY; import static com.android.tv.TimeShiftManager.TIME_SHIFT_ACTION_ID_REWIND; -import static org.junit.Assert.assertEquals; +import static com.google.common.truth.Truth.assertWithMessage; import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; @MediumTest +@RunWith(AndroidJUnit4.class) public class TimeShiftManagerTest extends BaseMainActivityTestCase { private TimeShiftManager mTimeShiftManager; @@ -91,29 +94,23 @@ public class TimeShiftManagerTest extends BaseMainActivityTestCase { boolean fastForwardEnabled, boolean jumpToPreviousEnabled, boolean jumpToNextEnabled) { - assertEquals( - "Play Action", - playEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_PLAY)); - assertEquals( - "Pause Action", - pauseEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_PAUSE)); - assertEquals( - "Rewind Action", - rewindEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_REWIND)); - assertEquals( - "Fast Forward Action", - fastForwardEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_FAST_FORWARD)); - assertEquals( - "Jump To Previous Action", - jumpToPreviousEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_JUMP_TO_PREVIOUS)); - assertEquals( - "Jump To Next Action", - jumpToNextEnabled, - mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_JUMP_TO_NEXT)); + assertWithMessage("Play Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_PLAY)) + .isEqualTo(playEnabled); + assertWithMessage("Pause Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_PAUSE)) + .isEqualTo(pauseEnabled); + assertWithMessage("Rewind Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_REWIND)) + .isEqualTo(rewindEnabled); + assertWithMessage("Fast Forward Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_FAST_FORWARD)) + .isEqualTo(fastForwardEnabled); + assertWithMessage("Jump To Previous Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_JUMP_TO_PREVIOUS)) + .isEqualTo(jumpToPreviousEnabled); + assertWithMessage("Jump To Next Action") + .that(mTimeShiftManager.isActionEnabled(TIME_SHIFT_ACTION_ID_JUMP_TO_NEXT)) + .isEqualTo(jumpToNextEnabled); } } diff --git a/tests/unit/src/com/android/tv/data/ChannelDataManagerTest.java b/tests/unit/src/com/android/tv/data/ChannelDataManagerTest.java index 0adfd1be..9b81f5d5 100644 --- a/tests/unit/src/com/android/tv/data/ChannelDataManagerTest.java +++ b/tests/unit/src/com/android/tv/data/ChannelDataManagerTest.java @@ -18,9 +18,8 @@ package com.android.tv.data; import static android.support.test.InstrumentationRegistry.getInstrumentation; import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import android.content.ContentProvider; import android.content.ContentUris; @@ -32,6 +31,7 @@ import android.media.tv.TvContract; import android.media.tv.TvContract.Channels; import android.net.Uri; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import android.test.MoreAsserts; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; @@ -39,8 +39,8 @@ import android.test.mock.MockCursor; import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; -import com.android.tv.testing.ChannelInfo; -import com.android.tv.testing.Constants; +import com.android.tv.testing.constants.Constants; +import com.android.tv.testing.data.ChannelInfo; import com.android.tv.util.TvInputManagerHelper; import java.util.ArrayList; import java.util.Arrays; @@ -50,6 +50,7 @@ import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Matchers; import org.mockito.Mockito; @@ -60,6 +61,7 @@ import org.mockito.Mockito; * the methods of {@link ChannelDataManager} should be called from the UI thread. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class ChannelDataManagerTest { private static final boolean DEBUG = false; private static final String TAG = "ChannelDataManagerTest"; @@ -77,7 +79,9 @@ public class ChannelDataManagerTest { @Before public void setUp() { - assertTrue("More than 2 channels to test", Constants.UNIT_TEST_CHANNEL_COUNT > 2); + assertWithMessage("More than 2 channels to test") + .that(Constants.UNIT_TEST_CHANNEL_COUNT > 2) + .isTrue(); mContentProvider = new FakeContentProvider(getTargetContext()); mContentResolver = new FakeContentResolver(); @@ -121,7 +125,8 @@ public class ChannelDataManagerTest { mChannelDataManager.start(); } }); - assertTrue(mListener.loadFinishedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); + assertThat(mListener.loadFinishedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); } private void restart() throws InterruptedException { @@ -140,7 +145,7 @@ public class ChannelDataManagerTest { @Test public void testIsDbLoadFinished() throws InterruptedException { startAndWaitForComplete(); - assertTrue(mChannelDataManager.isDbLoadFinished()); + assertThat(mChannelDataManager.isDbLoadFinished()).isTrue(); } /** @@ -152,7 +157,8 @@ public class ChannelDataManagerTest { startAndWaitForComplete(); // Test {@link ChannelDataManager#getChannelCount} - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT, mChannelDataManager.getChannelCount()); + assertThat(mChannelDataManager.getChannelCount()) + .isEqualTo(Constants.UNIT_TEST_CHANNEL_COUNT); // Test {@link ChannelDataManager#getChannelList} List<ChannelInfo> channelInfoList = new ArrayList<>(); @@ -163,19 +169,18 @@ public class ChannelDataManagerTest { for (Channel channel : channelList) { boolean found = false; for (ChannelInfo channelInfo : channelInfoList) { - if (TextUtils.equals(channelInfo.name, channel.getDisplayName()) - && TextUtils.equals(channelInfo.name, channel.getDisplayName())) { + if (TextUtils.equals(channelInfo.name, channel.getDisplayName())) { found = true; channelInfoList.remove(channelInfo); break; } } - assertTrue("Cannot find (" + channel + ")", found); + assertWithMessage("Cannot find (" + channel + ")").that(found).isTrue(); } // Test {@link ChannelDataManager#getChannelIndex()} for (Channel channel : channelList) { - assertEquals(channel, mChannelDataManager.getChannel(channel.getId())); + assertThat(mChannelDataManager.getChannel(channel.getId())).isEqualTo(channel); } } @@ -184,7 +189,7 @@ public class ChannelDataManagerTest { public void testGetChannels_noChannels() throws InterruptedException { mContentProvider.clear(); startAndWaitForComplete(); - assertEquals(0, mChannelDataManager.getChannelCount()); + assertThat(mChannelDataManager.getChannelCount()).isEqualTo(0); } /** @@ -200,9 +205,9 @@ public class ChannelDataManagerTest { List<Channel> browsableChannelList = mChannelDataManager.getBrowsableChannelList(); for (Channel browsableChannel : browsableChannelList) { boolean found = channelList.remove(browsableChannel); - assertTrue("Cannot find (" + browsableChannel + ")", found); + assertWithMessage("Cannot find (" + browsableChannel + ")").that(found).isTrue(); } - assertEquals(0, channelList.size()); + assertThat(channelList).isEmpty(); // Prepare for next tests. channelList = mChannelDataManager.getChannelList(); @@ -213,8 +218,8 @@ public class ChannelDataManagerTest { // Test {@link ChannelDataManager#updateBrowsable} & notification. mChannelDataManager.updateBrowsable(channel1.getId(), false, false); - assertTrue(mListener.channelBrowsableChangedCalled); - assertFalse(mChannelDataManager.getBrowsableChannelList().contains(channel1)); + assertThat(mListener.channelBrowsableChangedCalled).isTrue(); + assertThat(mChannelDataManager.getBrowsableChannelList()).doesNotContain(channel1); MoreAsserts.assertContentsInAnyOrder(channelListener.updatedChannels, channel1); channelListener.reset(); @@ -224,8 +229,8 @@ public class ChannelDataManagerTest { mChannelDataManager.applyUpdatedValuesToDb(); restart(); browsableChannelList = mChannelDataManager.getBrowsableChannelList(); - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT - 1, browsableChannelList.size()); - assertFalse(browsableChannelList.contains(channel1)); + assertThat(browsableChannelList).hasSize(Constants.UNIT_TEST_CHANNEL_COUNT - 1); + assertThat(browsableChannelList).doesNotContain(channel1); } /** @@ -249,10 +254,10 @@ public class ChannelDataManagerTest { mChannelDataManager.updateBrowsable(channel1.getId(), false, true); mChannelDataManager.updateBrowsable(channel2.getId(), false, true); mChannelDataManager.updateBrowsable(channel1.getId(), true, true); - assertFalse(mListener.channelBrowsableChangedCalled); + assertThat(mListener.channelBrowsableChangedCalled).isFalse(); List<Channel> browsableChannelList = mChannelDataManager.getBrowsableChannelList(); - assertTrue(browsableChannelList.contains(channel1)); - assertFalse(browsableChannelList.contains(channel2)); + assertThat(browsableChannelList).contains(channel1); + assertThat(browsableChannelList).doesNotContain(channel2); // Test {@link ChannelDataManager#applyUpdatedValuesToDb} // Disable the update notification to avoid the unwanted call of "onLoadFinished". @@ -260,8 +265,8 @@ public class ChannelDataManagerTest { mChannelDataManager.applyUpdatedValuesToDb(); restart(); browsableChannelList = mChannelDataManager.getBrowsableChannelList(); - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT - 1, browsableChannelList.size()); - assertFalse(browsableChannelList.contains(channel2)); + assertThat(browsableChannelList).hasSize(Constants.UNIT_TEST_CHANNEL_COUNT - 1); + assertThat(browsableChannelList).doesNotContain(channel2); } /** @@ -275,7 +280,7 @@ public class ChannelDataManagerTest { // Test if all channels aren't locked at the first time. List<Channel> channelList = mChannelDataManager.getChannelList(); for (Channel channel : channelList) { - assertFalse(channel + " is locked", channel.isLocked()); + assertWithMessage(channel + " is locked").that(channel.isLocked()).isFalse(); } // Prepare for next tests. @@ -283,14 +288,14 @@ public class ChannelDataManagerTest { // Test {@link ChannelDataManager#updateLocked} mChannelDataManager.updateLocked(channel.getId(), true); - assertTrue(mChannelDataManager.getChannel(channel.getId()).isLocked()); + assertThat(mChannelDataManager.getChannel(channel.getId()).isLocked()).isTrue(); // Test {@link ChannelDataManager#applyUpdatedValuesToDb}. // Disable the update notification to avoid the unwanted call of "onLoadFinished". mContentResolver.mNotifyDisabled = true; mChannelDataManager.applyUpdatedValuesToDb(); restart(); - assertTrue(mChannelDataManager.getChannel(channel.getId()).isLocked()); + assertThat(mChannelDataManager.getChannel(channel.getId()).isLocked()).isTrue(); // Cleanup mChannelDataManager.updateLocked(channel.getId(), false); @@ -307,9 +312,10 @@ public class ChannelDataManagerTest { ChannelInfo testChannelInfo = ChannelInfo.create(getTargetContext(), (int) testChannelId); testChannelId = Constants.UNIT_TEST_CHANNEL_COUNT + 1; mContentProvider.simulateInsert(testChannelInfo); - assertTrue( - mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT + 1, mChannelDataManager.getChannelCount()); + assertThat(mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat(mChannelDataManager.getChannelCount()) + .isEqualTo(Constants.UNIT_TEST_CHANNEL_COUNT + 1); // Test channel update mListener.reset(); @@ -318,35 +324,41 @@ public class ChannelDataManagerTest { mChannelDataManager.addChannelListener(testChannelId, channelListener); String newName = testChannelInfo.name + "_test"; mContentProvider.simulateUpdate(testChannelId, newName); - assertTrue( - mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertTrue( - channelListener.channelChangedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertEquals(0, channelListener.removedChannels.size()); - assertEquals(1, channelListener.updatedChannels.size()); + assertThat(mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat( + channelListener.channelChangedLatch.await( + WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat(channelListener.removedChannels).isEmpty(); + assertThat(channelListener.updatedChannels).hasSize(1); Channel updatedChannel = channelListener.updatedChannels.get(0); - assertEquals(testChannelId, updatedChannel.getId()); - assertEquals(testChannelInfo.number, updatedChannel.getDisplayNumber()); - assertEquals(newName, updatedChannel.getDisplayName()); - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT + 1, mChannelDataManager.getChannelCount()); + assertThat(updatedChannel.getId()).isEqualTo(testChannelId); + assertThat(updatedChannel.getDisplayNumber()).isEqualTo(testChannelInfo.number); + assertThat(updatedChannel.getDisplayName()).isEqualTo(newName); + assertThat(mChannelDataManager.getChannelCount()) + .isEqualTo(Constants.UNIT_TEST_CHANNEL_COUNT + 1); // Test channel remove. mListener.reset(); channelListener.reset(); mContentProvider.simulateDelete(testChannelId); - assertTrue( - mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertTrue( - channelListener.channelChangedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertEquals(1, channelListener.removedChannels.size()); - assertEquals(0, channelListener.updatedChannels.size()); + assertThat(mListener.channelListUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat( + channelListener.channelChangedLatch.await( + WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat(channelListener.removedChannels).hasSize(1); + assertThat(channelListener.updatedChannels).isEmpty(); Channel removedChannel = channelListener.removedChannels.get(0); - assertEquals(newName, removedChannel.getDisplayName()); - assertEquals(testChannelInfo.number, removedChannel.getDisplayNumber()); - assertEquals(Constants.UNIT_TEST_CHANNEL_COUNT, mChannelDataManager.getChannelCount()); + assertThat(removedChannel.getDisplayName()).isEqualTo(newName); + assertThat(removedChannel.getDisplayNumber()).isEqualTo(testChannelInfo.number); + assertThat(mChannelDataManager.getChannelCount()) + .isEqualTo(Constants.UNIT_TEST_CHANNEL_COUNT); } - private class ChannelInfoWrapper { + private static class ChannelInfoWrapper { public ChannelInfo channelInfo; public boolean browsable; public boolean locked; @@ -513,9 +525,9 @@ public class ChannelDataManagerTest { } private void assertChannelUri(Uri uri) { - assertTrue( - "Uri(" + uri + ") isn't channel uri", - uri.toString().startsWith(Channels.CONTENT_URI.toString())); + assertWithMessage("Uri(" + uri + ") isn't channel uri") + .that(uri.toString().startsWith(Channels.CONTENT_URI.toString())) + .isTrue(); } public void clear() { @@ -536,7 +548,7 @@ public class ChannelDataManagerTest { } private class FakeCursor extends MockCursor { - private final String[] ALL_COLUMNS = { + private final String[] allColumns = { Channels._ID, Channels.COLUMN_DISPLAY_NAME, Channels.COLUMN_DISPLAY_NUMBER, @@ -550,7 +562,7 @@ public class ChannelDataManagerTest { private int mPosition; public FakeCursor(String[] columns) { - mColumns = (columns == null) ? ALL_COLUMNS : columns; + mColumns = (columns == null) ? allColumns : columns; mPosition = -1; } @@ -575,6 +587,7 @@ public class ChannelDataManagerTest { switch (columnName) { case Channels._ID: return mContentProvider.keyAt(mPosition); + default: // fall out } if (DEBUG) { Log.d(TAG, "Column (" + columnName + ") is ignored in getLong()"); @@ -595,6 +608,7 @@ public class ChannelDataManagerTest { return DUMMY_INPUT_ID; case Channels.COLUMN_VIDEO_FORMAT: return channel.channelInfo.getVideoFormat(); + default: // fall out } if (DEBUG) { Log.d(TAG, "Column (" + columnName + ") is ignored in getString()"); @@ -613,6 +627,7 @@ public class ChannelDataManagerTest { return channel.browsable ? 1 : 0; case COLUMN_LOCKED: return channel.locked ? 1 : 0; + default: // fall out } if (DEBUG) { Log.d(TAG, "Column (" + columnName + ") is ignored in getInt()"); @@ -636,7 +651,7 @@ public class ChannelDataManagerTest { } } - private class TestChannelDataManagerListener implements ChannelDataManager.Listener { + private static class TestChannelDataManagerListener implements ChannelDataManager.Listener { public CountDownLatch loadFinishedLatch = new CountDownLatch(1); public CountDownLatch channelListUpdatedLatch = new CountDownLatch(1); public boolean channelBrowsableChangedCalled; @@ -663,7 +678,7 @@ public class ChannelDataManagerTest { } } - private class TestChannelDataManagerChannelListener + private static class TestChannelDataManagerChannelListener implements ChannelDataManager.ChannelListener { public CountDownLatch channelChangedLatch = new CountDownLatch(1); public final List<Channel> removedChannels = new ArrayList<>(); diff --git a/tests/unit/src/com/android/tv/data/ChannelNumberTest.java b/tests/unit/src/com/android/tv/data/ChannelNumberTest.java deleted file mode 100644 index 86d27efa..00000000 --- a/tests/unit/src/com/android/tv/data/ChannelNumberTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.data; - -import static com.android.tv.data.ChannelNumber.parseChannelNumber; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import android.support.test.filters.SmallTest; -import com.android.tv.testing.ComparableTester; -import org.junit.Test; - -/** Tests for {@link ChannelNumber}. */ -@SmallTest -public class ChannelNumberTest { - /** Test method for {@link ChannelNumber#ChannelNumber()}. */ - @Test - public void testChannelNumber() { - assertChannelEquals(new ChannelNumber(), "", false, ""); - } - - /** - * Test method for {@link - * com.android.tv.data.ChannelNumber#parseChannelNumber(java.lang.String)}. - */ - @Test - public void testParseChannelNumber() { - assertNull(parseChannelNumber("")); - assertNull(parseChannelNumber("-")); - assertNull(parseChannelNumber("abcd12")); - assertNull(parseChannelNumber("12abcd")); - assertNull(parseChannelNumber("-12")); - assertChannelEquals(parseChannelNumber("1"), "1", false, ""); - assertChannelEquals(parseChannelNumber("1234-4321"), "1234", true, "4321"); - assertChannelEquals(parseChannelNumber("3-4"), "3", true, "4"); - assertChannelEquals(parseChannelNumber("5-6"), "5", true, "6"); - } - - /** Test method for {@link ChannelNumber#compareTo(com.android.tv.data.ChannelNumber)}. */ - @Test - public void testCompareTo() { - new ComparableTester<ChannelNumber>() - .addEquivalentGroup(parseChannelNumber("1"), parseChannelNumber("1")) - .addEquivalentGroup(parseChannelNumber("2")) - .addEquivalentGroup(parseChannelNumber("2-1")) - .addEquivalentGroup(parseChannelNumber("2-2")) - .addEquivalentGroup(parseChannelNumber("2-10")) - .addEquivalentGroup(parseChannelNumber("3")) - .addEquivalentGroup(parseChannelNumber("4"), parseChannelNumber("4-0")) - .addEquivalentGroup(parseChannelNumber("10")) - .addEquivalentGroup(parseChannelNumber("100")) - .test(); - } - - /** Test method for {@link ChannelNumber#compare(java.lang.String, java.lang.String)}. */ - @Test - public void testCompare() { - // Only need to test nulls, the reset is tested by testCompareTo - assertEquals("compareTo(null,null)", 0, ChannelNumber.compare(null, null)); - assertEquals("compareTo(1,1)", 0, ChannelNumber.compare("1", "1")); - assertEquals("compareTo(null,1)<0", true, ChannelNumber.compare(null, "1") < 0); - assertEquals("compareTo(mal-formatted,1)<0", true, ChannelNumber.compare("abcd", "1") < 0); - assertEquals("compareTo(mal-formatted,1)<0", true, ChannelNumber.compare(".4", "1") < 0); - assertEquals("compareTo(1,null)>0", true, ChannelNumber.compare("1", null) > 0); - } - - private void assertChannelEquals( - ChannelNumber actual, - String expectedMajor, - boolean expectedHasDelimiter, - String expectedMinor) { - assertEquals(actual + " major", actual.majorNumber, expectedMajor); - assertEquals(actual + " hasDelimiter", actual.hasDelimiter, expectedHasDelimiter); - assertEquals(actual + " minor", actual.minorNumber, expectedMinor); - } -} diff --git a/tests/unit/src/com/android/tv/data/ChannelTest.java b/tests/unit/src/com/android/tv/data/ChannelTest.java index a7bac9fb..1f30a819 100644 --- a/tests/unit/src/com/android/tv/data/ChannelTest.java +++ b/tests/unit/src/com/android/tv/data/ChannelTest.java @@ -16,7 +16,8 @@ package com.android.tv.data; -import static org.junit.Assert.assertEquals; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import android.content.ComponentName; import android.content.Context; @@ -25,11 +26,13 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.testing.ComparatorTester; import com.android.tv.util.TvInputManagerHelper; import java.util.Comparator; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -37,17 +40,20 @@ import org.mockito.stubbing.Answer; /** Tests for {@link Channel}. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class ChannelTest { // Used for testing TV inputs with invalid input package. This could happen when a TV input is // uninstalled while drawing an app link card. - private static final String INVALID_TV_INPUT_PACKAGE_NAME = "com.android.tv.invalid_tv_input"; + private static final String INVALID_TV_INPUT_PACKAGE_NAME = + "com.android.tv.invalid_tv_input"; // Used for testing TV inputs defined inside of Live TV. private static final String LIVE_CHANNELS_PACKAGE_NAME = "com.android.tv"; // Used for testing a TV input which doesn't have its leanback launcher activity. private static final String NONE_LEANBACK_TV_INPUT_PACKAGE_NAME = "com.android.tv.none_leanback_tv_input"; // Used for testing a TV input which has its leanback launcher activity. - private static final String LEANBACK_TV_INPUT_PACKAGE_NAME = "com.android.tv.leanback_tv_input"; + private static final String LEANBACK_TV_INPUT_PACKAGE_NAME = + "com.android.tv.leanback_tv_input"; private static final String TEST_APP_LINK_TEXT = "test_app_link_text"; private static final String PARTNER_INPUT_ID = "partner"; private static final ActivityInfo TEST_ACTIVITY_INFO = new ActivityInfo(); @@ -127,6 +133,7 @@ public class ChannelTest { assertAppLinkType(Channel.APP_LINK_TYPE_APP, LEANBACK_TV_INPUT_PACKAGE_NAME, null, null); } + @Test public void testGetAppLinkType_NoText_InvalidIntent() { assertAppLinkType( Channel.APP_LINK_TYPE_NONE, INVALID_TV_INPUT_PACKAGE_NAME, null, mInvalidIntent); @@ -141,6 +148,7 @@ public class ChannelTest { Channel.APP_LINK_TYPE_APP, LEANBACK_TV_INPUT_PACKAGE_NAME, null, mInvalidIntent); } + @Test public void testGetAppLinkType_NoText_ValidIntent() { assertAppLinkType( Channel.APP_LINK_TYPE_NONE, INVALID_TV_INPUT_PACKAGE_NAME, null, mValidIntent); @@ -155,6 +163,7 @@ public class ChannelTest { Channel.APP_LINK_TYPE_APP, LEANBACK_TV_INPUT_PACKAGE_NAME, null, mValidIntent); } + @Test public void testGetAppLinkType_HasText_NoIntent() { assertAppLinkType( Channel.APP_LINK_TYPE_NONE, @@ -175,6 +184,7 @@ public class ChannelTest { null); } + @Test public void testGetAppLinkType_HasText_InvalidIntent() { assertAppLinkType( Channel.APP_LINK_TYPE_NONE, @@ -198,6 +208,7 @@ public class ChannelTest { mInvalidIntent); } + @Test public void testGetAppLinkType_HasText_ValidIntent() { assertAppLinkType( Channel.APP_LINK_TYPE_CHANNEL, @@ -234,14 +245,13 @@ public class ChannelTest { ? null : appLinkIntent.toUri(Intent.URI_INTENT_SCHEME)) .build(); - assertEquals( - "Unexpected app-link type for for " + testChannel, - expectedType, - testChannel.getAppLinkType(mMockContext)); + assertWithMessage("Unexpected app-link type for for " + testChannel) + .that(testChannel.getAppLinkType(mMockContext)) + .isEqualTo(expectedType); } + @Test public void testComparator() { - TvInputManagerHelper manager = Mockito.mock(TvInputManagerHelper.class); Mockito.when(manager.isPartnerInput(Matchers.anyString())) .thenAnswer( @@ -293,6 +303,7 @@ public class ChannelTest { * <p>Sort partner inputs first, then sort by input label, then by input id. See <a * href="http://b/23031603">b/23031603</a>. */ + @Test public void testComparatorLabel() { TvInputManagerHelper manager = Mockito.mock(TvInputManagerHelper.class); Mockito.when(manager.isPartnerInput(Matchers.anyString())) @@ -321,6 +332,7 @@ public class ChannelTest { comparatorTester.test(); } + @Test public void testNormalizeChannelNumber() { assertNormalizedDisplayNumber(null, null); assertNormalizedDisplayNumber("", ""); @@ -341,10 +353,10 @@ public class ChannelTest { } private void assertNormalizedDisplayNumber(String displayNumber, String normalized) { - assertEquals(normalized, Channel.normalizeDisplayNumber(displayNumber)); + assertThat(Channel.normalizeDisplayNumber(displayNumber)).isEqualTo(normalized); } - private class TestChannelComparator extends Channel.DefaultComparator { + private static final class TestChannelComparator extends Channel.DefaultComparator { public TestChannelComparator(TvInputManagerHelper manager) { super(null, manager); } @@ -355,7 +367,8 @@ public class ChannelTest { } } - private static class ChannelComparatorWithDescriptionAsLabel extends Channel.DefaultComparator { + private static final class ChannelComparatorWithDescriptionAsLabel + extends Channel.DefaultComparator { public ChannelComparatorWithDescriptionAsLabel(TvInputManagerHelper manager) { super(null, manager); } diff --git a/tests/unit/src/com/android/tv/data/GenreItemTest.java b/tests/unit/src/com/android/tv/data/GenreItemTest.java index dbf99eac..02bf4b30 100644 --- a/tests/unit/src/com/android/tv/data/GenreItemTest.java +++ b/tests/unit/src/com/android/tv/data/GenreItemTest.java @@ -17,18 +17,18 @@ package com.android.tv.data; import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; import android.media.tv.TvContract.Programs.Genres; import android.os.Build; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link Channel}. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class GenreItemTest { private static final String INVALID_GENRE = "INVALID GENRE"; @@ -41,17 +41,17 @@ public class GenreItemTest { @Test public void testGetCanonicalGenre() { int count = GenreItems.getGenreCount(); - assertNull(GenreItems.getCanonicalGenre(GenreItems.ID_ALL_CHANNELS)); + assertThat(GenreItems.getCanonicalGenre(GenreItems.ID_ALL_CHANNELS)).isNull(); for (int i = 1; i < count; ++i) { - assertNotNull(GenreItems.getCanonicalGenre(i)); + assertThat(GenreItems.getCanonicalGenre(i)).isNotNull(); } } @Test public void testGetId_base() { int count = GenreItems.getGenreCount(); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(null)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(INVALID_GENRE)); + assertThat(GenreItems.getId(null)).isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(INVALID_GENRE)).isEqualTo(GenreItems.ID_ALL_CHANNELS); assertInRange(GenreItems.getId(Genres.FAMILY_KIDS), 1, count - 1); assertInRange(GenreItems.getId(Genres.SPORTS), 1, count - 1); assertInRange(GenreItems.getId(Genres.SHOPPING), 1, count - 1); @@ -68,12 +68,13 @@ public class GenreItemTest { @Test public void testGetId_lmp_mr1() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.ARTS)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.ENTERTAINMENT)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.LIFE_STYLE)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.MUSIC)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.PREMIER)); - assertEquals(GenreItems.ID_ALL_CHANNELS, GenreItems.getId(Genres.TECH_SCIENCE)); + assertThat(GenreItems.getId(Genres.ARTS)).isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(Genres.ENTERTAINMENT)) + .isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(Genres.LIFE_STYLE)).isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(Genres.MUSIC)).isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(Genres.PREMIER)).isEqualTo(GenreItems.ID_ALL_CHANNELS); + assertThat(GenreItems.getId(Genres.TECH_SCIENCE)).isEqualTo(GenreItems.ID_ALL_CHANNELS); } else { int count = GenreItems.getGenreCount(); assertInRange(GenreItems.getId(Genres.ARTS), 1, count - 1); @@ -86,6 +87,6 @@ public class GenreItemTest { } private void assertInRange(int value, int lower, int upper) { - assertTrue(value >= lower && value <= upper); + assertThat(value >= lower && value <= upper).isTrue(); } } diff --git a/tests/unit/src/com/android/tv/data/ProgramDataManagerTest.java b/tests/unit/src/com/android/tv/data/ProgramDataManagerTest.java index 2b75ee4b..c1d670fe 100644 --- a/tests/unit/src/com/android/tv/data/ProgramDataManagerTest.java +++ b/tests/unit/src/com/android/tv/data/ProgramDataManagerTest.java @@ -17,10 +17,8 @@ package com.android.tv.data; import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import android.content.Context; import android.database.ContentObserver; @@ -30,14 +28,15 @@ import android.net.Uri; import android.os.HandlerThread; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; import android.test.mock.MockCursor; import android.util.Log; import android.util.SparseArray; -import com.android.tv.testing.Constants; import com.android.tv.testing.FakeClock; -import com.android.tv.testing.ProgramInfo; +import com.android.tv.testing.constants.Constants; +import com.android.tv.testing.data.ProgramInfo; import com.android.tv.util.Utils; import java.util.ArrayList; import java.util.Arrays; @@ -46,10 +45,14 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; +import org.junit.runner.RunWith; /** Test for {@link com.android.tv.data.ProgramDataManager} */ @SmallTest +@RunWith(AndroidJUnit4.class) +@Ignore("b/69836704") public class ProgramDataManagerTest { private static final boolean DEBUG = false; private static final String TAG = "ProgramDataManagerTest"; @@ -94,7 +97,8 @@ public class ProgramDataManagerTest { private void startAndWaitForComplete() throws InterruptedException { mProgramDataManager.start(); - assertTrue(mListener.programUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); + assertThat(mListener.programUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); } /** Test for {@link ProgramInfo#getIndex} and {@link ProgramInfo#getStartTimeMs}. */ @@ -105,8 +109,8 @@ public class ProgramDataManagerTest { int index = stub.getIndex(mClock.currentTimeMillis(), channelId); long startTimeMs = stub.getStartTimeMs(index, channelId); ProgramInfo programAt = stub.build(InstrumentationRegistry.getContext(), index); - assertTrue(startTimeMs <= mClock.currentTimeMillis()); - assertTrue(mClock.currentTimeMillis() < startTimeMs + programAt.durationMs); + assertThat(startTimeMs).isAtMost(mClock.currentTimeMillis()); + assertThat(mClock.currentTimeMillis()).isLessThan(startTimeMs + programAt.durationMs); } } @@ -130,9 +134,11 @@ public class ProgramDataManagerTest { for (long channelId = 1; channelId <= Constants.UNIT_TEST_CHANNEL_COUNT; channelId++) { Program currentProgram = mProgramDataManager.getCurrentProgram(channelId); // Test {@link ProgramDataManager#getCurrentProgram(long)}. - assertTrue( - currentProgram.getStartTimeUtcMillis() <= mClock.currentTimeMillis() - && mClock.currentTimeMillis() <= currentProgram.getEndTimeUtcMillis()); + assertThat( + currentProgram.getStartTimeUtcMillis() <= mClock.currentTimeMillis() + && mClock.currentTimeMillis() + <= currentProgram.getEndTimeUtcMillis()) + .isTrue(); // Test {@link ProgramDataManager#getPrograms(long)}. // Case #1: Normal case @@ -149,14 +155,14 @@ public class ProgramDataManagerTest { // Case #2: Corner cases where there's a program that starts at the start of the range. long startTimeMs = programs.get(0).getStartTimeUtcMillis(); programs = mProgramDataManager.getPrograms(channelId, startTimeMs); - assertEquals(startTimeMs, programs.get(0).getStartTimeUtcMillis()); + assertThat(programs.get(0).getStartTimeUtcMillis()).isEqualTo(startTimeMs); // Test {@link ProgramDataManager#setPrefetchTimeRange(long)}. programs = mProgramDataManager.getPrograms( channelId, prefetchTimeRangeStartMs - TimeUnit.HOURS.toMillis(1)); for (Program program : programs) { - assertTrue(program.getEndTimeUtcMillis() >= prefetchTimeRangeStartMs); + assertThat(program.getEndTimeUtcMillis()).isAtLeast(prefetchTimeRangeStartMs); } } } @@ -186,12 +192,14 @@ public class ProgramDataManagerTest { TestProgramDataManagerOnCurrentProgramUpdatedListener listener = new TestProgramDataManagerOnCurrentProgramUpdatedListener(); mProgramDataManager.addOnCurrentProgramUpdatedListener(testChannelId, listener); - assertTrue( - listener.currentProgramUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); - assertEquals(testChannelId, listener.updatedChannelId); + assertThat( + listener.currentProgramUpdatedLatch.await( + WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); + assertThat(listener.updatedChannelId).isEqualTo(testChannelId); Program currentProgram = mProgramDataManager.getCurrentProgram(testChannelId); assertProgramEquals(nextProgramStartTimeMs, nextProgramInfo, currentProgram); - assertEquals(listener.updatedProgram, currentProgram); + assertThat(currentProgram).isEqualTo(listener.updatedProgram); } /** Test if program data is refreshed after the program insertion. */ @@ -204,14 +212,15 @@ public class ProgramDataManagerTest { mListener.reset(); List<Program> programList = mProgramDataManager.getPrograms(testChannelId, mClock.currentTimeMillis()); - assertNotNull(programList); + assertThat(programList).isNotNull(); long lastProgramEndTime = programList.get(programList.size() - 1).getEndTimeUtcMillis(); // Make change in content provider mContentProvider.simulateAppend(testChannelId); - assertTrue(mListener.programUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)); + assertThat(mListener.programUpdatedLatch.await(WAIT_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isTrue(); programList = mProgramDataManager.getPrograms(testChannelId, mClock.currentTimeMillis()); - assertTrue( - lastProgramEndTime < programList.get(programList.size() - 1).getEndTimeUtcMillis()); + assertThat(lastProgramEndTime) + .isLessThan(programList.get(programList.size() - 1).getEndTimeUtcMillis()); } /** Test for {@link ProgramDataManager#setPauseProgramUpdate(boolean)}. */ @@ -224,23 +233,28 @@ public class ProgramDataManagerTest { mListener.reset(); mProgramDataManager.setPauseProgramUpdate(true); mContentProvider.simulateAppend(testChannelId); - assertFalse( - mListener.programUpdatedLatch.await(FAILURE_TIME_OUT_MS, TimeUnit.MILLISECONDS)); + assertThat(mListener.programUpdatedLatch.await(FAILURE_TIME_OUT_MS, TimeUnit.MILLISECONDS)) + .isFalse(); } public static void assertProgramEquals( long expectedStartTime, ProgramInfo expectedInfo, Program actualProgram) { - assertEquals("title", expectedInfo.title, actualProgram.getTitle()); - assertEquals("episode", expectedInfo.episode, actualProgram.getEpisodeTitle()); - assertEquals("description", expectedInfo.description, actualProgram.getDescription()); - assertEquals("startTime", expectedStartTime, actualProgram.getStartTimeUtcMillis()); - assertEquals( - "endTime", - expectedStartTime + expectedInfo.durationMs, - actualProgram.getEndTimeUtcMillis()); + assertWithMessage("title").that(actualProgram.getTitle()).isEqualTo(expectedInfo.title); + assertWithMessage("episode") + .that(actualProgram.getEpisodeTitle()) + .isEqualTo(expectedInfo.episode); + assertWithMessage("description") + .that(actualProgram.getDescription()) + .isEqualTo(expectedInfo.description); + assertWithMessage("startTime") + .that(actualProgram.getStartTimeUtcMillis()) + .isEqualTo(expectedStartTime); + assertWithMessage("endTime") + .that(actualProgram.getEndTimeUtcMillis()) + .isEqualTo(expectedStartTime + expectedInfo.durationMs); } - private class FakeContentResolver extends MockContentResolver { + private final class FakeContentResolver extends MockContentResolver { @Override public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) { super.notifyChange(uri, observer, syncToNetwork); @@ -255,7 +269,7 @@ public class ProgramDataManagerTest { } } - private static class ProgramInfoWrapper { + private static final class ProgramInfoWrapper { private final int index; private final long startTimeMs; private final ProgramInfo programInfo; @@ -269,7 +283,7 @@ public class ProgramDataManagerTest { // This implements the minimal methods in content resolver // and detailed assumptions are written in each method. - private class FakeContentProvider extends MockContentProvider { + private final class FakeContentProvider extends MockContentProvider { private final SparseArray<List<ProgramInfoWrapper>> mProgramInfoList = new SparseArray<>(); /** @@ -360,9 +374,9 @@ public class ProgramDataManagerTest { } private void assertProgramUri(Uri uri) { - assertTrue( - "Uri(" + uri + ") isn't channel uri", - uri.toString().startsWith(TvContract.Programs.CONTENT_URI.toString())); + assertWithMessage("Uri(" + uri + ") isn't channel uri") + .that(uri.toString().startsWith(TvContract.Programs.CONTENT_URI.toString())) + .isTrue(); } public ProgramInfoWrapper get(long channelId, int position) { @@ -374,8 +388,8 @@ public class ProgramDataManagerTest { } } - private class FakeCursor extends MockCursor { - private final String[] ALL_COLUMNS = { + private final class FakeCursor extends MockCursor { + private final String[] allColumns = { TvContract.Programs.COLUMN_CHANNEL_ID, TvContract.Programs.COLUMN_TITLE, TvContract.Programs.COLUMN_SHORT_DESCRIPTION, @@ -403,7 +417,7 @@ public class ProgramDataManagerTest { * @param endTimeMs end of the time range to query programs. */ public FakeCursor(String[] columns, long channelId, long startTimeMs, long endTimeMs) { - mColumns = (columns == null) ? ALL_COLUMNS : columns; + mColumns = (columns == null) ? allColumns : columns; mIsQueryForSingleChannel = (channelId > 0); mChannelId = channelId; mProgramPosition = -1; @@ -466,11 +480,12 @@ public class ProgramDataManagerTest { return mCurrentProgram.startTimeMs; case TvContract.Programs.COLUMN_END_TIME_UTC_MILLIS: return mCurrentProgram.startTimeMs + mCurrentProgram.programInfo.durationMs; + default: + if (DEBUG) { + Log.d(TAG, "Column (" + columnName + ") is ignored in getLong()"); + } + return 0; } - if (DEBUG) { - Log.d(TAG, "Column (" + columnName + ") is ignored in getLong()"); - } - return 0; } @Override @@ -483,11 +498,12 @@ public class ProgramDataManagerTest { return mCurrentProgram.programInfo.description; case TvContract.Programs.COLUMN_EPISODE_TITLE: return mCurrentProgram.programInfo.episode; + default: + if (DEBUG) { + Log.d(TAG, "Column (" + columnName + ") is ignored in getString()"); + } + return null; } - if (DEBUG) { - Log.d(TAG, "Column (" + columnName + ") is ignored in getString()"); - } - return null; } @Override diff --git a/tests/unit/src/com/android/tv/data/ProgramTest.java b/tests/unit/src/com/android/tv/data/ProgramTest.java index a69688d2..3f2a9f26 100644 --- a/tests/unit/src/com/android/tv/data/ProgramTest.java +++ b/tests/unit/src/com/android/tv/data/ProgramTest.java @@ -17,22 +17,24 @@ package com.android.tv.data; import static android.media.tv.TvContract.Programs.Genres.COMEDY; import static android.media.tv.TvContract.Programs.Genres.FAMILY_KIDS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import android.media.tv.TvContentRating; import android.media.tv.TvContract.Programs.Genres; import android.os.Parcel; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.data.Program.CriticScore; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link Program}. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class ProgramTest { private static final int NOT_FOUND_GENRE = 987; @@ -43,7 +45,7 @@ public class ProgramTest { @Test public void testBuild() { Program program = new Program.Builder().build(); - assertEquals("isValid", false, program.isValid()); + assertWithMessage("isValid").that(program.isValid()).isFalse(); } @Test @@ -127,7 +129,7 @@ public class ProgramTest { p2.unmarshall(bytes, 0, bytes.length); p2.setDataPosition(0); Program r2 = Program.fromParcel(p2); - assertEquals(p, r2); + assertThat(r2).isEqualTo(p); } finally { p1.recycle(); p2.recycle(); @@ -141,34 +143,36 @@ public class ProgramTest { .setTitle("MyTitle") .addCriticScore( new CriticScore( - "default source", "5/10", "https://testurl/testimage.jpg")) + "default source", "5/10", "http://testurl/testimage.jpg")) .build(); Parcel parcel = Parcel.obtain(); program.writeToParcel(parcel, 0); parcel.setDataPosition(0); Program programFromParcel = Program.CREATOR.createFromParcel(parcel); - assertNotNull(programFromParcel.getCriticScores()); - assertEquals(programFromParcel.getCriticScores().get(0).source, "default source"); - assertEquals(programFromParcel.getCriticScores().get(0).score, "5/10"); - assertEquals( - programFromParcel.getCriticScores().get(0).logoUrl, - "https://testurl/testimage.jpg"); + assertThat(programFromParcel.getCriticScores()).isNotNull(); + assertThat(programFromParcel.getCriticScores().get(0).source).isEqualTo("default source"); + assertThat(programFromParcel.getCriticScores().get(0).score).isEqualTo("5/10"); + assertThat(programFromParcel.getCriticScores().get(0).logoUrl) + .isEqualTo("http://testurl/testimage.jpg"); } private static void assertNullCanonicalGenres(Program program) { String[] actual = program.getCanonicalGenres(); - assertNull("Expected null canonical genres but was " + Arrays.toString(actual), actual); + assertWithMessage("Expected null canonical genres but was " + Arrays.toString(actual)) + .that(actual) + .isNull(); } private static void assertCanonicalGenres(Program program, String... expected) { - assertEquals( - "canonical genres", - Arrays.asList(expected), - Arrays.asList(program.getCanonicalGenres())); + assertWithMessage("canonical genres") + .that(Arrays.asList(program.getCanonicalGenres())) + .isEqualTo(Arrays.asList(expected)); } private static void assertHasGenre(Program program, int genreId, boolean expected) { - assertEquals("hasGenre(" + genreId + ")", expected, program.hasGenre(genreId)); + assertWithMessage("hasGenre(" + genreId + ")") + .that(program.hasGenre(genreId)) + .isEqualTo(expected); } } diff --git a/tests/unit/src/com/android/tv/data/TvInputNewComparatorTest.java b/tests/unit/src/com/android/tv/data/TvInputNewComparatorTest.java index 496d1018..8bf3efbc 100644 --- a/tests/unit/src/com/android/tv/data/TvInputNewComparatorTest.java +++ b/tests/unit/src/com/android/tv/data/TvInputNewComparatorTest.java @@ -19,6 +19,7 @@ package com.android.tv.data; import android.content.pm.ResolveInfo; import android.media.tv.TvInputInfo; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import android.util.Pair; import com.android.tv.testing.ComparatorTester; import com.android.tv.util.SetupUtils; @@ -27,6 +28,7 @@ import com.android.tv.util.TvInputManagerHelper; import java.util.Comparator; import java.util.LinkedHashMap; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -34,6 +36,7 @@ import org.mockito.stubbing.Answer; /** Test for {@link TvInputNewComparator} */ @SmallTest +@RunWith(AndroidJUnit4.class) public class TvInputNewComparatorTest { @Test public void testComparator() throws Exception { diff --git a/tests/unit/src/com/android/tv/data/WatchedHistoryManagerTest.java b/tests/unit/src/com/android/tv/data/WatchedHistoryManagerTest.java index e65a71fb..539698bf 100644 --- a/tests/unit/src/com/android/tv/data/WatchedHistoryManagerTest.java +++ b/tests/unit/src/com/android/tv/data/WatchedHistoryManagerTest.java @@ -17,16 +17,16 @@ package com.android.tv.data; import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; import android.os.Looper; import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.data.WatchedHistoryManager.WatchedRecord; import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; /** * Test for {@link com.android.tv.data.WatchedHistoryManagerTest} @@ -34,6 +34,7 @@ import org.junit.Test; * <p>This is a medium test because it load files which accessing SharedPreferences. */ @MediumTest +@RunWith(AndroidJUnit4.class) public class WatchedHistoryManagerTest { // Wait time for expected success. private static final int MAX_HISTORY_SIZE = 100; @@ -53,13 +54,13 @@ public class WatchedHistoryManagerTest { private void startAndWaitForComplete() throws InterruptedException { mWatchedHistoryManager.start(); - assertTrue(mListener.mLoadFinished); + assertThat(mListener.mLoadFinished).isTrue(); } @Test public void testIsLoaded() throws InterruptedException { startAndWaitForComplete(); - assertTrue(mWatchedHistoryManager.isLoaded()); + assertThat(mWatchedHistoryManager.isLoaded()).isTrue(); } @Test @@ -74,10 +75,10 @@ public class WatchedHistoryManagerTest { WatchedRecord record = mWatchedHistoryManager.getRecord(0); WatchedRecord recordFromSharedPreferences = mWatchedHistoryManager.getRecordFromSharedPreferences(0); - assertEquals(record.channelId, fakeId); - assertEquals(record.watchedStartTime, time - duration); - assertEquals(record.duration, duration); - assertEquals(record, recordFromSharedPreferences); + assertThat(fakeId).isEqualTo(record.channelId); + assertThat(time - duration).isEqualTo(record.watchedStartTime); + assertThat(duration).isEqualTo(record.duration); + assertThat(recordFromSharedPreferences).isEqualTo(record); } @Test @@ -96,22 +97,21 @@ public class WatchedHistoryManagerTest { WatchedRecord record = mWatchedHistoryManager.getRecord(i); WatchedRecord recordFromSharedPreferences = mWatchedHistoryManager.getRecordFromSharedPreferences(i); - assertEquals(record, recordFromSharedPreferences); - assertEquals(record.channelId, startChannelId + size - 1 - i); + assertThat(recordFromSharedPreferences).isEqualTo(record); + assertThat(startChannelId + size - 1 - i).isEqualTo(record.channelId); } // Since the WatchedHistory is a circular queue, the value for 0 and maxHistorySize // are same. - assertEquals( - mWatchedHistoryManager.getRecordFromSharedPreferences(0), - mWatchedHistoryManager.getRecordFromSharedPreferences(MAX_HISTORY_SIZE)); + assertThat(mWatchedHistoryManager.getRecordFromSharedPreferences(MAX_HISTORY_SIZE)) + .isEqualTo(mWatchedHistoryManager.getRecordFromSharedPreferences(0)); } @Test public void testWatchedRecordEquals() { - assertTrue(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 2, 3))); - assertFalse(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 2, 4))); - assertFalse(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 4, 3))); - assertFalse(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(4, 2, 3))); + assertThat(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 2, 3))).isTrue(); + assertThat(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 2, 4))).isFalse(); + assertThat(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(1, 4, 3))).isFalse(); + assertThat(new WatchedRecord(1, 2, 3).equals(new WatchedRecord(4, 2, 3))).isFalse(); } @Test @@ -122,10 +122,11 @@ public class WatchedHistoryManagerTest { WatchedRecord record = new WatchedRecord(fakeId, time, duration); WatchedRecord sameRecord = mWatchedHistoryManager.decode(mWatchedHistoryManager.encode(record)); - assertEquals(record, sameRecord); + assertThat(sameRecord).isEqualTo(record); } - private class TestWatchedHistoryManagerListener implements WatchedHistoryManager.Listener { + private static final class TestWatchedHistoryManagerListener + implements WatchedHistoryManager.Listener { boolean mLoadFinished; @Override diff --git a/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java b/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java deleted file mode 100644 index c9c76a5a..00000000 --- a/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr; - -import static android.support.test.InstrumentationRegistry.getContext; - -import android.os.Build; -import android.support.annotation.NonNull; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.FakeClock; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.List; -import java.util.concurrent.TimeUnit; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** Tests for {@link BaseDvrDataManager} using {@link DvrDataManagerInMemoryImpl}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class BaseDvrDataManagerTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - private DvrDataManagerInMemoryImpl mDvrDataManager; - private FakeClock mFakeClock; - - @Before - public void setUp() { - mDvrFeature.enableForTest(); - mFakeClock = FakeClock.createWithCurrentTime(); - mDvrDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); - } - - @After - public void tearDown() { - mDvrFeature.resetForTests(); - } - - @Test - public void testGetNonStartedScheduledRecordings() { - ScheduledRecording recording = - mDvrDataManager.addScheduledRecordingInternal( - createNewScheduledRecordingStartingNow()); - List<ScheduledRecording> result = mDvrDataManager.getNonStartedScheduledRecordings(); - MoreAsserts.assertContentsInAnyOrder(result, recording); - } - - @Test - public void testGetNonStartedScheduledRecordings_past() { - mDvrDataManager.addScheduledRecordingInternal(createNewScheduledRecordingStartingNow()); - mFakeClock.increment(TimeUnit.MINUTES, 6); - List<ScheduledRecording> result = mDvrDataManager.getNonStartedScheduledRecordings(); - MoreAsserts.assertContentsInAnyOrder(result); - } - - @NonNull - private ScheduledRecording createNewScheduledRecordingStartingNow() { - return ScheduledRecording.buildFrom( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - ScheduledRecording.ID_NOT_SET, - INPUT_ID, - CHANNEL_ID, - mFakeClock.currentTimeMillis(), - mFakeClock.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5))) - .setState(ScheduledRecording.STATE_RECORDING_NOT_STARTED) - .build(); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java deleted file mode 100644 index 8a5dfabd..00000000 --- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.dvr; - -import static org.junit.Assert.assertEquals; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.ArrayList; -import java.util.List; -import org.junit.Test; - -/** Tests for {@link DvrDataManagerImpl} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class DvrDataManagerImplTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - - @Test - public void testGetNextScheduledStartTimeAfter() { - long id = 1; - List<ScheduledRecording> scheduledRecordings = new ArrayList<>(); - assertNextStartTime(scheduledRecordings, 0L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 10L, 20L)); - assertNextStartTime(scheduledRecordings, 9L, 10L); - assertNextStartTime(scheduledRecordings, 10L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 20L, 30L)); - assertNextStartTime(scheduledRecordings, 9L, 10L); - assertNextStartTime(scheduledRecordings, 10L, 20L); - assertNextStartTime(scheduledRecordings, 20L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 30L, 40L)); - assertNextStartTime(scheduledRecordings, 9L, 10L); - assertNextStartTime(scheduledRecordings, 10L, 20L); - assertNextStartTime(scheduledRecordings, 20L, 30L); - assertNextStartTime(scheduledRecordings, 30L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); - scheduledRecordings.clear(); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 10L, 20L)); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 10L, 20L)); - scheduledRecordings.add( - RecordingTestUtils.createTestRecordingWithIdAndPeriod( - id++, INPUT_ID, CHANNEL_ID, 10L, 20L)); - assertNextStartTime(scheduledRecordings, 9L, 10L); - assertNextStartTime(scheduledRecordings, 10L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); - } - - private void assertNextStartTime( - List<ScheduledRecording> scheduledRecordings, long startTime, long expected) { - assertEquals( - "getNextScheduledStartTimeAfter()", - expected, - DvrDataManagerImpl.getNextStartTimeAfter(scheduledRecordings, startTime)); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java deleted file mode 100644 index a16f7acc..00000000 --- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * 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.dvr; - -import android.content.Context; -import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.test.filters.SdkSuppress; -import android.text.TextUtils; -import android.util.Log; -import android.util.Range; -import com.android.tv.common.SoftPreconditions; -import com.android.tv.dvr.data.RecordedProgram; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.dvr.data.ScheduledRecording.RecordingState; -import com.android.tv.dvr.data.SeriesRecording; -import com.android.tv.util.Clock; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; - -/** A DVR Data manager that stores values in memory suitable for testing. */ -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public final class DvrDataManagerInMemoryImpl extends BaseDvrDataManager { - private static final String TAG = "DvrDataManagerInMemory"; - private final AtomicLong mNextId = new AtomicLong(1); - private final Map<Long, ScheduledRecording> mScheduledRecordings = new HashMap<>(); - private final Map<Long, RecordedProgram> mRecordedPrograms = new HashMap<>(); - private final Map<Long, SeriesRecording> mSeriesRecordings = new HashMap<>(); - - public DvrDataManagerInMemoryImpl(Context context, Clock clock) { - super(context, clock); - } - - @Override - public boolean isInitialized() { - return true; - } - - @Override - public boolean isDvrScheduleLoadFinished() { - return true; - } - - @Override - public boolean isRecordedProgramLoadFinished() { - return true; - } - - private List<ScheduledRecording> getScheduledRecordingsPrograms() { - return new ArrayList<>(mScheduledRecordings.values()); - } - - @Override - public List<RecordedProgram> getRecordedPrograms() { - return new ArrayList<>(mRecordedPrograms.values()); - } - - @Override - public List<ScheduledRecording> getAllScheduledRecordings() { - return new ArrayList<>(mScheduledRecordings.values()); - } - - public List<SeriesRecording> getSeriesRecordings() { - return new ArrayList<>(mSeriesRecordings.values()); - } - - @Override - public List<SeriesRecording> getSeriesRecordings(String inputId) { - List<SeriesRecording> result = new ArrayList<>(); - for (SeriesRecording r : mSeriesRecordings.values()) { - if (TextUtils.equals(r.getInputId(), inputId)) { - result.add(r); - } - } - return result; - } - - @Override - public long getNextScheduledStartTimeAfter(long startTime) { - - List<ScheduledRecording> temp = getNonStartedScheduledRecordings(); - Collections.sort(temp, ScheduledRecording.START_TIME_COMPARATOR); - for (ScheduledRecording r : temp) { - if (r.getStartTimeMs() > startTime) { - return r.getStartTimeMs(); - } - } - return DvrDataManager.NEXT_START_TIME_NOT_FOUND; - } - - @Override - public List<ScheduledRecording> getScheduledRecordings( - Range<Long> period, @RecordingState int state) { - List<ScheduledRecording> temp = getScheduledRecordingsPrograms(); - List<ScheduledRecording> result = new ArrayList<>(); - for (ScheduledRecording r : temp) { - if (r.isOverLapping(period) && r.getState() == state) { - result.add(r); - } - } - return result; - } - - @Override - public List<ScheduledRecording> getScheduledRecordings(long seriesRecordingId) { - List<ScheduledRecording> result = new ArrayList<>(); - for (ScheduledRecording r : mScheduledRecordings.values()) { - if (r.getSeriesRecordingId() == seriesRecordingId) { - result.add(r); - } - } - return result; - } - - @Override - public List<ScheduledRecording> getScheduledRecordings(String inputId) { - List<ScheduledRecording> result = new ArrayList<>(); - for (ScheduledRecording r : mScheduledRecordings.values()) { - if (TextUtils.equals(r.getInputId(), inputId)) { - result.add(r); - } - } - return result; - } - - /** Add a new scheduled recording. */ - @Override - public void addScheduledRecording(ScheduledRecording... scheduledRecordings) { - for (ScheduledRecording r : scheduledRecordings) { - addScheduledRecordingInternal(r); - } - } - - public void addRecordedProgram(RecordedProgram recordedProgram) { - addRecordedProgramInternal(recordedProgram); - } - - public void updateRecordedProgram(RecordedProgram r) { - long id = r.getId(); - if (mRecordedPrograms.containsKey(id)) { - mRecordedPrograms.put(id, r); - notifyRecordedProgramsChanged(r); - } else { - throw new IllegalArgumentException("Recording not found:" + r); - } - } - - public void removeRecordedProgram(RecordedProgram scheduledRecording) { - mRecordedPrograms.remove(scheduledRecording.getId()); - notifyRecordedProgramsRemoved(scheduledRecording); - } - - public ScheduledRecording addScheduledRecordingInternal(ScheduledRecording scheduledRecording) { - SoftPreconditions.checkState( - scheduledRecording.getId() == ScheduledRecording.ID_NOT_SET, - TAG, - "expected id of " - + ScheduledRecording.ID_NOT_SET - + " but was " - + scheduledRecording); - scheduledRecording = - ScheduledRecording.buildFrom(scheduledRecording) - .setId(mNextId.incrementAndGet()) - .build(); - mScheduledRecordings.put(scheduledRecording.getId(), scheduledRecording); - notifyScheduledRecordingAdded(scheduledRecording); - return scheduledRecording; - } - - public RecordedProgram addRecordedProgramInternal(RecordedProgram recordedProgram) { - SoftPreconditions.checkState( - recordedProgram.getId() == RecordedProgram.ID_NOT_SET, - TAG, - "expected id of " + RecordedProgram.ID_NOT_SET + " but was " + recordedProgram); - recordedProgram = - RecordedProgram.buildFrom(recordedProgram).setId(mNextId.incrementAndGet()).build(); - mRecordedPrograms.put(recordedProgram.getId(), recordedProgram); - notifyRecordedProgramsAdded(recordedProgram); - return recordedProgram; - } - - @Override - public void addSeriesRecording(SeriesRecording... seriesRecordings) { - for (SeriesRecording r : seriesRecordings) { - mSeriesRecordings.put(r.getId(), r); - } - notifySeriesRecordingAdded(seriesRecordings); - } - - @Override - public void removeScheduledRecording(ScheduledRecording... scheduledRecordings) { - for (ScheduledRecording r : scheduledRecordings) { - mScheduledRecordings.remove(r.getId()); - } - notifyScheduledRecordingRemoved(scheduledRecordings); - } - - @Override - public void removeScheduledRecording(boolean forceRemove, ScheduledRecording... schedule) { - removeScheduledRecording(schedule); - } - - @Override - public void removeSeriesRecording(SeriesRecording... seriesRecordings) { - for (SeriesRecording r : seriesRecordings) { - mSeriesRecordings.remove(r.getId()); - } - notifySeriesRecordingRemoved(seriesRecordings); - } - - @Override - public void updateScheduledRecording(ScheduledRecording... scheduledRecordings) { - for (ScheduledRecording r : scheduledRecordings) { - long id = r.getId(); - if (mScheduledRecordings.containsKey(id)) { - mScheduledRecordings.put(id, r); - } else { - Log.d(TAG, "Recording not found:" + r); - } - } - notifyScheduledRecordingStatusChanged(scheduledRecordings); - } - - @Override - public void updateSeriesRecording(SeriesRecording... seriesRecordings) { - for (SeriesRecording r : seriesRecordings) { - long id = r.getId(); - if (mSeriesRecordings.containsKey(id)) { - mSeriesRecordings.put(id, r); - } else { - throw new IllegalArgumentException("Recording not found:" + r); - } - } - notifySeriesRecordingChanged(seriesRecordings); - } - - @Nullable - @Override - public ScheduledRecording getScheduledRecording(long id) { - return mScheduledRecordings.get(id); - } - - @Nullable - @Override - public ScheduledRecording getScheduledRecordingForProgramId(long programId) { - for (ScheduledRecording r : mScheduledRecordings.values()) { - if (r.getProgramId() == programId) { - return r; - } - } - return null; - } - - @Nullable - @Override - public SeriesRecording getSeriesRecording(long seriesRecordingId) { - return mSeriesRecordings.get(seriesRecordingId); - } - - @Nullable - @Override - public SeriesRecording getSeriesRecording(String seriesId) { - for (SeriesRecording r : mSeriesRecordings.values()) { - if (r.getSeriesId().equals(seriesId)) { - return r; - } - } - return null; - } - - @Nullable - @Override - public RecordedProgram getRecordedProgram(long recordingId) { - return mRecordedPrograms.get(recordingId); - } - - @Override - @NonNull - protected List<ScheduledRecording> getRecordingsWithState(int... states) { - ArrayList<ScheduledRecording> result = new ArrayList<>(); - for (ScheduledRecording r : mScheduledRecordings.values()) { - for (int state : states) { - if (r.getState() == state) { - result.add(r); - break; - } - } - } - return result; - } -} diff --git a/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java b/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java deleted file mode 100644 index ab464b18..00000000 --- a/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java +++ /dev/null @@ -1,831 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import android.util.Range; -import com.android.tv.dvr.DvrScheduleManager.ConflictInfo; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import org.junit.Test; - -/** Tests for {@link DvrScheduleManager} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class DvrScheduleManagerTest { - private static final String INPUT_ID = "input_id"; - - @Test - public void testGetConflictingSchedules_emptySchedule() { - List<ScheduledRecording> schedules = new ArrayList<>(); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); - } - - @Test - public void testGetConflictingSchedules_noConflict() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - } - - @Test - public void testGetConflictingSchedules_noTuner() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 0)); - - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L)); - assertEquals(schedules, DvrScheduleManager.getConflictingSchedules(schedules, 0)); - schedules.add( - 0, - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L)); - assertEquals(schedules, DvrScheduleManager.getConflictingSchedules(schedules, 0)); - } - - @Test - public void testGetConflictingSchedules_conflict() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); - - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r3); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - ScheduledRecording r4 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r4); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - - ScheduledRecording r5 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r5); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - - ScheduledRecording r6 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 10L, 90L); - schedules.add(r6); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); - - ScheduledRecording r7 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 110L, 190L); - schedules.add(r7); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r5, r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); - - ScheduledRecording r8 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 50L, 150L); - schedules.add(r8); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), - r7, - r6, - r5, - r4, - r3, - r2, - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r5, r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 4), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); - } - - @Test - public void testGetConflictingSchedules_conflict2() { - // The case when there is a long schedule. - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 1000L); - schedules.add(r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); - - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r3); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - } - - @Test - public void testGetConflictingSchedules_reverseOrder() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(0, r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); - - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(0, r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(0, r3); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); - - ScheduledRecording r4 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(0, r4); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - - ScheduledRecording r5 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(0, r5); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - - ScheduledRecording r6 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 10L, 90L); - schedules.add(0, r6); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); - - ScheduledRecording r7 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 110L, 190L); - schedules.add(0, r7); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r5, r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); - - ScheduledRecording r8 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 50L, 150L); - schedules.add(0, r8); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), - r7, - r6, - r5, - r4, - r3, - r2, - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 2), r5, r4, r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 3), r3, r2, r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 4), r1); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); - } - - @Test - public void testGetConflictingSchedules_period1() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(10L, 20L))), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(110L, 120L))), - r1); - } - - @Test - public void testGetConflictingSchedules_period2() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(10L, 20L))), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(110L, 120L))), - r1); - } - - @Test - public void testGetConflictingSchedules_period3() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r2); - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r3); - ScheduledRecording r4 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r4); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(10L, 20L))), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(110L, 120L))), - r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - schedules, 1, Collections.singletonList(new Range<>(50L, 150L))), - r2, - r1); - List<Range<Long>> ranges = new ArrayList<>(); - ranges.add(new Range<>(10L, 20L)); - ranges.add(new Range<>(110L, 120L)); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1, ranges), r2, r1); - } - - @Test - public void testGetConflictingSchedules_addSchedules1() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 100L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - Collections.singletonList( - ScheduledRecording.builder(INPUT_ID, ++channelId, 10L, 20L) - .setPriority(++priority) - .build()), - schedules, - 1), - r2, - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - Collections.singletonList( - ScheduledRecording.builder(INPUT_ID, ++channelId, 110L, 120L) - .setPriority(++priority) - .build()), - schedules, - 1), - r1); - } - - @Test - public void testGetConflictingSchedules_addSchedules2() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - Collections.singletonList( - ScheduledRecording.builder(INPUT_ID, ++channelId, 10L, 20L) - .setPriority(++priority) - .build()), - schedules, - 1), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - Collections.singletonList( - ScheduledRecording.builder(INPUT_ID, ++channelId, 110L, 120L) - .setPriority(++priority) - .build()), - schedules, - 1), - r2, - r1); - } - - @Test - public void testGetConflictingSchedules_addLowestPriority() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 400L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r2); - // Returning r1 even though r1 has the higher priority than the new one. That's because r1 - // starts at 0 and stops at 100, and the new one will be recorded successfully. - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules( - Collections.singletonList( - ScheduledRecording.builder(INPUT_ID, ++channelId, 200L, 300L) - .setPriority(0) - .build()), - schedules, - 1), - r1); - } - - @Test - public void testGetConflictingSchedules_sameChannel() { - long priority = 0; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelId, ++priority, 0L, 200L)); - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelId, ++priority, 0L, 200L)); - MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); - } - - @Test - public void testGetConflictingSchedule_startEarlyAndFail() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 200L, 300L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 400L); - schedules.add(r2); - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 200L); - schedules.add(r3); - // r2 starts recording and fails when r3 starts. r1 is recorded successfully. - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r2); - } - - @Test - public void testGetConflictingSchedule_startLate() { - long priority = 0; - long channelId = 0; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 200L, 400L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 100L, 300L); - schedules.add(r2); - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r3); - // r2 and r1 are clipped. - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedules(schedules, 1), r2, r1); - } - - @Test - public void testGetConflictingSchedulesForTune_canTune() { - // Can tune to the recorded channel if tuner count is 1. - long priority = 0; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelId, ++priority, 0L, 200L)); - MoreAsserts.assertEmpty( - DvrScheduleManager.getConflictingSchedulesForTune( - INPUT_ID, channelId, 0L, priority + 1, schedules, 1)); - } - - @Test - public void testGetConflictingSchedulesForTune_cannotTune() { - // Can't tune to a channel if other channel is recording and tuner count is 1. - long priority = 0; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - schedules.add( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelId, ++priority, 0L, 200L)); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForTune( - INPUT_ID, channelId + 1, 0L, priority + 1, schedules, 1), - schedules.get(0)); - } - - @Test - public void testGetConflictingSchedulesForWatching_otherChannels() { - // The other channels are to be recorded. - long priority = 0; - long channelToWatch = 1; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r2); - MoreAsserts.assertEmpty( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3)); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), - r1); - } - - @Test - public void testGetConflictingSchedulesForWatching_sameChannel1() { - long priority = 0; - long channelToWatch = 1; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r2); - MoreAsserts.assertEmpty( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2)); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), - r2); - } - - @Test - public void testGetConflictingSchedulesForWatching_sameChannel2() { - long priority = 0; - long channelToWatch = 1; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r2); - MoreAsserts.assertEmpty( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2)); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), - r1); - } - - @Test - public void testGetConflictingSchedulesForWatching_sameChannelConflict1() { - long priority = 0; - long channelToWatch = 1; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r2); - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r3); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3), - r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), - r2); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), - r2, - r1); - } - - @Test - public void testGetConflictingSchedulesForWatching_sameChannelConflict2() { - long priority = 0; - long channelToWatch = 1; - long channelId = 1; - List<ScheduledRecording> schedules = new ArrayList<>(); - ScheduledRecording r1 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r1); - ScheduledRecording r2 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - channelToWatch, ++priority, 0L, 200L); - schedules.add(r2); - ScheduledRecording r3 = - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, ++priority, 0L, 200L); - schedules.add(r3); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), - r1); - MoreAsserts.assertContentsInOrder( - DvrScheduleManager.getConflictingSchedulesForWatching( - INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), - r3, - r1); - } - - @Test - public void testPartiallyConflictingSchedules() { - long priority = 100; - long channelId = 0; - List<ScheduledRecording> schedules = - new ArrayList<>( - Arrays.asList( - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 0L, 400L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 0L, 200L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 200L, 500L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 400L, 600L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 700L, 800L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 600L, 900L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 800L, 900L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 800L, 900L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 750L, 850L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 300L, 450L), - RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( - ++channelId, --priority, 50L, 900L))); - List<ConflictInfo> conflicts = DvrScheduleManager.getConflictingSchedulesInfo(schedules, 1); - - assertNotInList(schedules.get(0), conflicts); - assertFullConflict(schedules.get(1), conflicts); - assertPartialConflict(schedules.get(2), conflicts); - assertPartialConflict(schedules.get(3), conflicts); - assertNotInList(schedules.get(4), conflicts); - assertPartialConflict(schedules.get(5), conflicts); - assertNotInList(schedules.get(6), conflicts); - assertFullConflict(schedules.get(7), conflicts); - assertFullConflict(schedules.get(8), conflicts); - assertFullConflict(schedules.get(9), conflicts); - assertFullConflict(schedules.get(10), conflicts); - - conflicts = DvrScheduleManager.getConflictingSchedulesInfo(schedules, 2); - - assertNotInList(schedules.get(0), conflicts); - assertNotInList(schedules.get(1), conflicts); - assertNotInList(schedules.get(2), conflicts); - assertNotInList(schedules.get(3), conflicts); - assertNotInList(schedules.get(4), conflicts); - assertNotInList(schedules.get(5), conflicts); - assertNotInList(schedules.get(6), conflicts); - assertFullConflict(schedules.get(7), conflicts); - assertFullConflict(schedules.get(8), conflicts); - assertFullConflict(schedules.get(9), conflicts); - assertPartialConflict(schedules.get(10), conflicts); - - conflicts = DvrScheduleManager.getConflictingSchedulesInfo(schedules, 3); - - assertNotInList(schedules.get(0), conflicts); - assertNotInList(schedules.get(1), conflicts); - assertNotInList(schedules.get(2), conflicts); - assertNotInList(schedules.get(3), conflicts); - assertNotInList(schedules.get(4), conflicts); - assertNotInList(schedules.get(5), conflicts); - assertNotInList(schedules.get(6), conflicts); - assertNotInList(schedules.get(7), conflicts); - assertPartialConflict(schedules.get(8), conflicts); - assertNotInList(schedules.get(9), conflicts); - assertPartialConflict(schedules.get(10), conflicts); - } - - private void assertNotInList(ScheduledRecording schedule, List<ConflictInfo> conflicts) { - for (ConflictInfo conflictInfo : conflicts) { - if (conflictInfo.schedule.equals(schedule)) { - fail(schedule + " conflicts with others."); - } - } - } - - private void assertPartialConflict(ScheduledRecording schedule, List<ConflictInfo> conflicts) { - for (ConflictInfo conflictInfo : conflicts) { - if (conflictInfo.schedule.equals(schedule)) { - if (conflictInfo.partialConflict) { - return; - } else { - fail(schedule + " fully conflicts with others."); - } - } - } - fail(schedule + " doesn't conflict"); - } - - private void assertFullConflict(ScheduledRecording schedule, List<ConflictInfo> conflicts) { - for (ConflictInfo conflictInfo : conflicts) { - if (conflictInfo.schedule.equals(schedule)) { - if (!conflictInfo.partialConflict) { - return; - } else { - fail(schedule + " partially conflicts with others."); - } - } - } - fail(schedule + " doesn't conflict"); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java b/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java deleted file mode 100644 index bf1b4d38..00000000 --- a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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.dvr; - -import static com.android.tv.testing.dvr.RecordingTestUtils.createTestRecordingWithIdAndPeriod; -import static com.android.tv.testing.dvr.RecordingTestUtils.normalizePriority; -import static junit.framework.TestCase.assertEquals; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import android.util.Range; -import com.android.tv.data.Channel; -import com.android.tv.data.Program; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import org.junit.Test; - -/** Tests for {@link ScheduledRecordingTest} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class ScheduledRecordingTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - - @Test - public void testIsOverLapping() { - ScheduledRecording r = - createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L); - assertOverLapping(false, 1L, 9L, r); - - assertOverLapping(true, 1L, 20L, r); - assertOverLapping(false, 1L, 10L, r); - assertOverLapping(true, 10L, 19L, r); - assertOverLapping(true, 10L, 20L, r); - assertOverLapping(true, 11L, 20L, r); - assertOverLapping(true, 11L, 21L, r); - assertOverLapping(false, 20L, 21L, r); - - assertOverLapping(false, 21L, 29L, r); - } - - @Test - public void testBuildProgram() { - Channel c = new Channel.Builder().build(); - Program p = new Program.Builder().build(); - ScheduledRecording actual = - ScheduledRecording.builder(INPUT_ID, p).setChannelId(c.getId()).build(); - assertEquals("type", ScheduledRecording.TYPE_PROGRAM, actual.getType()); - } - - @Test - public void testBuildTime() { - ScheduledRecording actual = - createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L); - assertEquals("type", ScheduledRecording.TYPE_TIMED, actual.getType()); - } - - @Test - public void testBuildFrom() { - ScheduledRecording expected = - createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L); - ScheduledRecording actual = ScheduledRecording.buildFrom(expected).build(); - RecordingTestUtils.assertRecordingEquals(expected, actual); - } - - @Test - public void testBuild_priority() { - ScheduledRecording a = - normalizePriority( - createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L)); - ScheduledRecording b = - normalizePriority( - createTestRecordingWithIdAndPeriod(2, INPUT_ID, CHANNEL_ID, 10L, 20L)); - ScheduledRecording c = - normalizePriority( - createTestRecordingWithIdAndPeriod(3, INPUT_ID, CHANNEL_ID, 10L, 20L)); - - // default priority - MoreAsserts.assertContentsInOrder(sortByPriority(c, b, a), a, b, c); - - // make A preferred over B - a = ScheduledRecording.buildFrom(a).setPriority(b.getPriority() + 2).build(); - MoreAsserts.assertContentsInOrder(sortByPriority(a, b, c), b, c, a); - } - - public Collection<ScheduledRecording> sortByPriority( - ScheduledRecording a, ScheduledRecording b, ScheduledRecording c) { - List<ScheduledRecording> list = Arrays.asList(a, b, c); - Collections.sort(list, ScheduledRecording.PRIORITY_COMPARATOR); - return list; - } - - private void assertOverLapping(boolean expected, long lower, long upper, ScheduledRecording r) { - assertEquals( - "isOverlapping(Range(" + lower + "," + upper + "), recording " + r, - expected, - r.isOverLapping(new Range<>(lower, upper))); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java b/tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java deleted file mode 100644 index 68929e95..00000000 --- a/tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.data; - -import static org.junit.Assert.assertEquals; - -import android.os.Build; -import android.os.Parcel; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.data.Program; -import org.junit.Test; - -/** Tests for {@link SeriesRecording}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SeriesRecordingTest { - private static final String PROGRAM_TITLE = "MyProgram"; - private static final long CHANNEL_ID = 123; - private static final long OTHER_CHANNEL_ID = 321; - private static final String SERIES_ID = "SERIES_ID"; - private static final String OTHER_SERIES_ID = "OTHER_SERIES_ID"; - - private final SeriesRecording mBaseSeriesRecording = - new SeriesRecording.Builder() - .setTitle(PROGRAM_TITLE) - .setChannelId(CHANNEL_ID) - .setSeriesId(SERIES_ID) - .build(); - private final SeriesRecording mSeriesRecordingSeason2 = - SeriesRecording.buildFrom(mBaseSeriesRecording).setStartFromSeason(2).build(); - private final SeriesRecording mSeriesRecordingSeason2Episode5 = - SeriesRecording.buildFrom(mSeriesRecordingSeason2).setStartFromEpisode(5).build(); - private final Program mBaseProgram = - new Program.Builder() - .setTitle(PROGRAM_TITLE) - .setChannelId(CHANNEL_ID) - .setSeriesId(SERIES_ID) - .build(); - - @Test - public void testParcelable() { - SeriesRecording r1 = - new SeriesRecording.Builder() - .setId(1) - .setChannelId(2) - .setPriority(3) - .setTitle("4") - .setDescription("5") - .setLongDescription("5-long") - .setSeriesId("6") - .setStartFromEpisode(7) - .setStartFromSeason(8) - .setChannelOption(SeriesRecording.OPTION_CHANNEL_ALL) - .setCanonicalGenreIds(new int[] {9, 10}) - .setPosterUri("11") - .setPhotoUri("12") - .build(); - Parcel p1 = Parcel.obtain(); - Parcel p2 = Parcel.obtain(); - try { - r1.writeToParcel(p1, 0); - byte[] bytes = p1.marshall(); - p2.unmarshall(bytes, 0, bytes.length); - p2.setDataPosition(0); - SeriesRecording r2 = SeriesRecording.fromParcel(p2); - assertEquals(r1, r2); - } finally { - p1.recycle(); - p2.recycle(); - } - } - - @Test - public void testDoesProgramMatch_simpleMatch() { - assertDoesProgramMatch(mBaseProgram, mBaseSeriesRecording, true); - } - - @Test - public void testDoesProgramMatch_differentSeriesId() { - Program program = new Program.Builder(mBaseProgram).setSeriesId(OTHER_SERIES_ID).build(); - assertDoesProgramMatch(program, mBaseSeriesRecording, false); - } - - @Test - public void testDoesProgramMatch_differentChannel() { - Program program = new Program.Builder(mBaseProgram).setChannelId(OTHER_CHANNEL_ID).build(); - assertDoesProgramMatch(program, mBaseSeriesRecording, false); - } - - @Test - public void testDoesProgramMatch_startFromSeason2() { - Program program = mBaseProgram; - assertDoesProgramMatch(program, mSeriesRecordingSeason2, true); - program = new Program.Builder(program).setSeasonNumber("1").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2, false); - program = new Program.Builder(program).setSeasonNumber("2").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2, true); - program = new Program.Builder(program).setSeasonNumber("3").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2, true); - } - - @Test - public void testDoesProgramMatch_startFromSeason2episode5() { - Program program = mBaseProgram; - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); - program = new Program.Builder(program).setSeasonNumber("2").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); - program = new Program.Builder(program).setEpisodeNumber("4").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, false); - program = new Program.Builder(program).setEpisodeNumber("5").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); - program = new Program.Builder(program).setEpisodeNumber("6").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); - program = new Program.Builder(program).setSeasonNumber("3").setEpisodeNumber("1").build(); - assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); - } - - private void assertDoesProgramMatch( - Program p, SeriesRecording seriesRecording, boolean expected) { - assertEquals( - seriesRecording + " doesProgramMatch " + p, - expected, - seriesRecording.matchProgram(p)); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java b/tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java deleted file mode 100644 index 10a882f6..00000000 --- a/tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.provider; - -import static android.support.test.InstrumentationRegistry.getContext; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.data.ChannelDataManager; -import com.android.tv.data.Program; -import com.android.tv.dvr.DvrDataManagerImpl; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.dvr.data.SeriesRecording; -import com.android.tv.dvr.recorder.SeriesRecordingScheduler; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -/** Tests for {@link com.android.tv.dvr.DvrScheduleManager} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class DvrDbSyncTest { - private static final String INPUT_ID = "input_id"; - private static final long BASE_PROGRAM_ID = 1; - private static final long BASE_START_TIME_MS = 0; - private static final long BASE_END_TIME_MS = 1; - private static final String BASE_SEASON_NUMBER = "2"; - private static final String BASE_EPISODE_NUMBER = "3"; - private static final Program BASE_PROGRAM = - new Program.Builder() - .setId(BASE_PROGRAM_ID) - .setStartTimeUtcMillis(BASE_START_TIME_MS) - .setEndTimeUtcMillis(BASE_END_TIME_MS) - .build(); - private static final Program BASE_SERIES_PROGRAM = - new Program.Builder() - .setId(BASE_PROGRAM_ID) - .setStartTimeUtcMillis(BASE_START_TIME_MS) - .setEndTimeUtcMillis(BASE_END_TIME_MS) - .setSeasonNumber(BASE_SEASON_NUMBER) - .setEpisodeNumber(BASE_EPISODE_NUMBER) - .build(); - private static final ScheduledRecording BASE_SCHEDULE = - ScheduledRecording.builder(INPUT_ID, BASE_PROGRAM).build(); - private static final ScheduledRecording BASE_SERIES_SCHEDULE = - ScheduledRecording.builder(INPUT_ID, BASE_SERIES_PROGRAM).build(); - - private DvrDbSync mDbSync; - @Mock private DvrManager mDvrManager; - @Mock private DvrDataManagerImpl mDataManager; - @Mock private ChannelDataManager mChannelDataManager; - @Mock private SeriesRecordingScheduler mSeriesRecordingScheduler; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - when(mChannelDataManager.isDbLoadFinished()).thenReturn(true); - when(mDvrManager.addSeriesRecording(anyObject(), anyObject(), anyInt())) - .thenReturn(SeriesRecording.builder(INPUT_ID, BASE_PROGRAM).build()); - mDbSync = - new DvrDbSync( - getContext(), - mDataManager, - mChannelDataManager, - mDvrManager, - mSeriesRecordingScheduler); - } - - @Test - public void testHandleUpdateProgram_null() { - addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE); - mDbSync.handleUpdateProgram(null, BASE_PROGRAM_ID); - verify(mDataManager).removeScheduledRecording(BASE_SCHEDULE); - } - - @Test - public void testHandleUpdateProgram_changeTimeNotStarted() { - addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE); - long startTimeMs = BASE_START_TIME_MS + 1; - long endTimeMs = BASE_END_TIME_MS + 1; - Program program = - new Program.Builder(BASE_PROGRAM) - .setStartTimeUtcMillis(startTimeMs) - .setEndTimeUtcMillis(endTimeMs) - .build(); - mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID); - assertUpdateScheduleCalled(program); - } - - @Test - public void testHandleUpdateProgram_changeTimeInProgressNotCalled() { - addSchedule( - BASE_PROGRAM_ID, - ScheduledRecording.buildFrom(BASE_SCHEDULE) - .setState(ScheduledRecording.STATE_RECORDING_IN_PROGRESS) - .build()); - long startTimeMs = BASE_START_TIME_MS + 1; - Program program = - new Program.Builder(BASE_PROGRAM).setStartTimeUtcMillis(startTimeMs).build(); - mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID); - verify(mDataManager, never()).updateScheduledRecording(anyObject()); - } - - @Test - public void testHandleUpdateProgram_changeSeason() { - addSchedule(BASE_PROGRAM_ID, BASE_SERIES_SCHEDULE); - String seasonNumber = BASE_SEASON_NUMBER + "1"; - String episodeNumber = BASE_EPISODE_NUMBER + "1"; - Program program = - new Program.Builder(BASE_SERIES_PROGRAM) - .setSeasonNumber(seasonNumber) - .setEpisodeNumber(episodeNumber) - .build(); - mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID); - assertUpdateScheduleCalled(program); - } - - @Test - public void testHandleUpdateProgram_finished() { - addSchedule( - BASE_PROGRAM_ID, - ScheduledRecording.buildFrom(BASE_SERIES_SCHEDULE) - .setState(ScheduledRecording.STATE_RECORDING_FINISHED) - .build()); - String seasonNumber = BASE_SEASON_NUMBER + "1"; - String episodeNumber = BASE_EPISODE_NUMBER + "1"; - Program program = - new Program.Builder(BASE_SERIES_PROGRAM) - .setSeasonNumber(seasonNumber) - .setEpisodeNumber(episodeNumber) - .build(); - mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID); - verify(mDataManager, never()).updateScheduledRecording(anyObject()); - } - - private void addSchedule(long programId, ScheduledRecording schedule) { - when(mDataManager.getScheduledRecordingForProgramId(programId)).thenReturn(schedule); - } - - private void assertUpdateScheduleCalled(Program program) { - verify(mDataManager) - .updateScheduledRecording( - eq(ScheduledRecording.builder(INPUT_ID, program).build())); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java b/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java deleted file mode 100644 index a586fd9e..00000000 --- a/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.provider; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.dvr.data.SeasonEpisodeNumber; -import java.util.ArrayList; -import java.util.List; -import org.junit.Test; - -/** Tests for {@link EpisodicProgramLoadTask} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class EpisodicProgramLoadTaskTest { - private static final long SERIES_RECORDING_ID1 = 1; - private static final long SERIES_RECORDING_ID2 = 2; - private static final String SEASON_NUMBER1 = "SEASON NUMBER1"; - private static final String SEASON_NUMBER2 = "SEASON NUMBER2"; - private static final String EPISODE_NUMBER1 = "EPISODE NUMBER1"; - private static final String EPISODE_NUMBER2 = "EPISODE NUMBER2"; - - @Test - public void testEpisodeAlreadyScheduled_true() { - List<SeasonEpisodeNumber> seasonEpisodeNumbers = new ArrayList<>(); - SeasonEpisodeNumber seasonEpisodeNumber = - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER1); - seasonEpisodeNumbers.add(seasonEpisodeNumber); - assertTrue( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber( - SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER1))); - } - - @Test - public void testEpisodeAlreadyScheduled_false() { - List<SeasonEpisodeNumber> seasonEpisodeNumbers = new ArrayList<>(); - SeasonEpisodeNumber seasonEpisodeNumber = - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER1); - seasonEpisodeNumbers.add(seasonEpisodeNumber); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber( - SERIES_RECORDING_ID2, SEASON_NUMBER1, EPISODE_NUMBER1))); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber( - SERIES_RECORDING_ID1, SEASON_NUMBER2, EPISODE_NUMBER1))); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber( - SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER2))); - } - - @Test - public void testEpisodeAlreadyScheduled_null() { - List<SeasonEpisodeNumber> seasonEpisodeNumbers = new ArrayList<>(); - SeasonEpisodeNumber seasonEpisodeNumber = - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER1); - seasonEpisodeNumbers.add(seasonEpisodeNumber); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, null, EPISODE_NUMBER1))); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, SEASON_NUMBER1, null))); - assertFalse( - seasonEpisodeNumbers.contains( - new SeasonEpisodeNumber(SERIES_RECORDING_ID1, null, null))); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java deleted file mode 100644 index f4e6cdf9..00000000 --- a/tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.recorder; - -import static android.support.test.InstrumentationRegistry.getContext; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.app.AlarmManager; -import android.media.tv.TvInputInfo; -import android.os.Build; -import android.os.Looper; -import android.os.SystemClock; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.InputSessionManager; -import com.android.tv.data.Channel; -import com.android.tv.data.ChannelDataManager; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.WritableDvrDataManager; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.dvr.recorder.InputTaskScheduler.RecordingTaskFactory; -import com.android.tv.testing.FakeClock; -import com.android.tv.testing.dvr.RecordingTestUtils; -import com.android.tv.util.Clock; -import com.android.tv.util.TestUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -/** Tests for {@link InputTaskScheduler}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class InputTaskSchedulerTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 1; - private static final long LISTENER_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(1); - private static final int TUNER_COUNT_ONE = 1; - private static final int TUNER_COUNT_TWO = 2; - private static final long LOW_PRIORITY = 1; - private static final long HIGH_PRIORITY = 2; - - private FakeClock mFakeClock; - private InputTaskScheduler mScheduler; - @Mock private DvrManager mDvrManager; - @Mock private WritableDvrDataManager mDataManager; - @Mock private InputSessionManager mSessionManager; - @Mock private AlarmManager mMockAlarmManager; - @Mock private ChannelDataManager mChannelDataManager; - private List<RecordingTask> mRecordingTasks; - - @Before - public void setUp() throws Exception { - if (Looper.myLooper() == null) { - Looper.prepare(); - } - mRecordingTasks = new ArrayList(); - MockitoAnnotations.initMocks(this); - mFakeClock = FakeClock.createWithCurrentTime(); - TvInputInfo input = createTvInputInfo(TUNER_COUNT_ONE); - mScheduler = - new InputTaskScheduler( - getContext(), - input, - Looper.myLooper(), - mChannelDataManager, - mDvrManager, - mDataManager, - mSessionManager, - mFakeClock, - new RecordingTaskFactory() { - @Override - public RecordingTask createRecordingTask( - ScheduledRecording scheduledRecording, - Channel channel, - DvrManager dvrManager, - InputSessionManager sessionManager, - WritableDvrDataManager dataManager, - Clock clock) { - RecordingTask task = mock(RecordingTask.class); - when(task.getPriority()) - .thenReturn(scheduledRecording.getPriority()); - when(task.getEndTimeMs()) - .thenReturn(scheduledRecording.getEndTimeMs()); - mRecordingTasks.add(task); - return task; - } - }); - } - - @Test - public void testAddSchedule_past() { - ScheduledRecording r = - RecordingTestUtils.createTestRecordingWithPeriod(INPUT_ID, CHANNEL_ID, 0L, 1L); - when(mDataManager.getScheduledRecording(anyLong())).thenReturn(r); - mScheduler.handleAddSchedule(r); - mScheduler.handleBuildSchedule(); - verify(mDataManager, timeout((int) LISTENER_TIMEOUT_MS).times(1)) - .changeState( - any(ScheduledRecording.class), - eq(ScheduledRecording.STATE_RECORDING_FAILED)); - } - - @Test - public void testAddSchedule_start() { - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, - CHANNEL_ID, - mFakeClock.currentTimeMillis(), - mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(1))); - mScheduler.handleBuildSchedule(); - verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - } - - @Test - public void testAddSchedule_consecutiveNoStop() { - long startTimeMs = mFakeClock.currentTimeMillis(); - long endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - long id = 0; - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, LOW_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - startTimeMs = endTimeMs; - endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, HIGH_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - // The first schedule should not be stopped because the second one should wait for the end - // of the first schedule. - SystemClock.sleep(LISTENER_TIMEOUT_MS); - verify(mRecordingTasks.get(0), never()).stop(); - } - - @Test - public void testAddSchedule_consecutiveNoFail() { - long startTimeMs = mFakeClock.currentTimeMillis(); - long endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - long id = 0; - when(mDataManager.getScheduledRecording(anyLong())) - .thenReturn(ScheduledRecording.builder(INPUT_ID, CHANNEL_ID, 0L, 0L).build()); - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, HIGH_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - startTimeMs = endTimeMs; - endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, LOW_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - SystemClock.sleep(LISTENER_TIMEOUT_MS); - verify(mRecordingTasks.get(0), never()).stop(); - // The second schedule should not fail because it can starts after the first one finishes. - SystemClock.sleep(LISTENER_TIMEOUT_MS); - verify(mDataManager, never()) - .changeState( - any(ScheduledRecording.class), - eq(ScheduledRecording.STATE_RECORDING_FAILED)); - } - - @Test - public void testAddSchedule_consecutiveUseLessSession() throws Exception { - TvInputInfo input = createTvInputInfo(TUNER_COUNT_TWO); - mScheduler.updateTvInputInfo(input); - long startTimeMs = mFakeClock.currentTimeMillis(); - long endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - long id = 0; - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, LOW_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - startTimeMs = endTimeMs; - endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); - mScheduler.handleAddSchedule( - RecordingTestUtils.createTestRecordingWithIdAndPriorityAndPeriod( - ++id, CHANNEL_ID, HIGH_PRIORITY, startTimeMs, endTimeMs)); - mScheduler.handleBuildSchedule(); - verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - SystemClock.sleep(LISTENER_TIMEOUT_MS); - verify(mRecordingTasks.get(0), never()).stop(); - // The second schedule should wait until the first one finishes rather than creating a new - // session even though there are available tuners. - assertTrue(mRecordingTasks.size() == 1); - } - - @Test - public void testUpdateSchedule_noCancel() { - ScheduledRecording r = - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, - CHANNEL_ID, - mFakeClock.currentTimeMillis(), - mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(1)); - mScheduler.handleAddSchedule(r); - mScheduler.handleBuildSchedule(); - mScheduler.handleUpdateSchedule(r); - SystemClock.sleep(LISTENER_TIMEOUT_MS); - verify(mRecordingTasks.get(0), never()).cancel(); - } - - @Test - public void testUpdateSchedule_cancel() { - ScheduledRecording r = - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, - CHANNEL_ID, - mFakeClock.currentTimeMillis(), - mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(2)); - mScheduler.handleAddSchedule(r); - mScheduler.handleBuildSchedule(); - mScheduler.handleUpdateSchedule( - ScheduledRecording.buildFrom(r) - .setStartTimeMs(mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(1)) - .build()); - verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).cancel(); - } - - private TvInputInfo createTvInputInfo(int tunerCount) throws Exception { - return TestUtils.createTvInputInfo(null, null, null, 0, false, true, tunerCount); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java b/tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java deleted file mode 100644 index 03a4fe50..00000000 --- a/tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * 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.dvr.recorder; - -import static android.support.test.InstrumentationRegistry.getContext; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.when; - -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.InputSessionManager; -import com.android.tv.InputSessionManager.RecordingSession; -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.data.Channel; -import com.android.tv.dvr.DvrDataManagerInMemoryImpl; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.dvr.recorder.RecordingTask.State; -import com.android.tv.testing.FakeClock; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.concurrent.TimeUnit; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -/** Tests for {@link RecordingTask}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class RecordingTaskTest { - private static final long DURATION = TimeUnit.MINUTES.toMillis(30); - private static final long START_OFFSET_MS = RecordingScheduler.MS_TO_WAKE_BEFORE_START; - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - - private FakeClock mFakeClock; - private DvrDataManagerInMemoryImpl mDataManager; - @Mock Handler mMockHandler; - @Mock DvrManager mDvrManager; - @Mock InputSessionManager mMockSessionManager; - @Mock RecordingSession mMockRecordingSession; - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - - @Before - public void setUp() { - mDvrFeature.enableForTest(); - if (Looper.myLooper() == null) { - Looper.prepare(); - } - MockitoAnnotations.initMocks(this); - mFakeClock = FakeClock.createWithCurrentTime(); - mDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); - } - - @After - public void tearDown() { - mDvrFeature.resetForTests(); - } - - @Test - public void testHandle_init() { - Channel channel = createTestChannel(); - ScheduledRecording r = createRecording(channel); - RecordingTask task = createRecordingTask(r, channel); - String inputId = channel.getInputId(); - when(mMockSessionManager.createRecordingSession( - eq(inputId), anyString(), eq(task), eq(mMockHandler), anyLong())) - .thenReturn(mMockRecordingSession); - when(mMockHandler.sendMessageAtTime(anyObject(), anyLong())).thenReturn(true); - assertTrue(task.handleMessage(createMessage(RecordingTask.MSG_INITIALIZE))); - assertEquals(State.CONNECTION_PENDING, task.getState()); - verify(mMockSessionManager) - .createRecordingSession( - eq(inputId), anyString(), eq(task), eq(mMockHandler), anyLong()); - verify(mMockRecordingSession).tune(eq(inputId), eq(channel.getUri())); - verifyNoMoreInteractions(mMockHandler, mMockRecordingSession, mMockSessionManager); - } - - private static Channel createTestChannel() { - return new Channel.Builder() - .setInputId(INPUT_ID) - .setId(CHANNEL_ID) - .setDisplayName("Test Ch " + CHANNEL_ID) - .build(); - } - - @Test - public void testOnConnected() { - Channel channel = createTestChannel(); - ScheduledRecording r = createRecording(channel); - mDataManager.addScheduledRecording(r); - RecordingTask task = createRecordingTask(r, channel); - String inputId = channel.getInputId(); - when(mMockSessionManager.createRecordingSession( - eq(inputId), anyString(), eq(task), eq(mMockHandler), anyLong())) - .thenReturn(mMockRecordingSession); - when(mMockHandler.sendMessageAtTime(anyObject(), anyLong())).thenReturn(true); - task.handleMessage(createMessage(RecordingTask.MSG_INITIALIZE)); - task.onTuned(channel.getUri()); - assertEquals(State.CONNECTED, task.getState()); - } - - private ScheduledRecording createRecording(Channel c) { - long startTime = mFakeClock.currentTimeMillis() + START_OFFSET_MS; - long endTime = startTime + DURATION; - return RecordingTestUtils.createTestRecordingWithPeriod( - c.getInputId(), c.getId(), startTime, endTime); - } - - private RecordingTask createRecordingTask(ScheduledRecording r, Channel channel) { - RecordingTask recordingTask = - new RecordingTask( - getContext(), - r, - channel, - mDvrManager, - mMockSessionManager, - mDataManager, - mFakeClock); - recordingTask.setHandler(mMockHandler); - return recordingTask; - } - - private Message createMessage(int what) { - Message msg = new Message(); - msg.setTarget(mMockHandler); - msg.what = what; - return msg; - } -} diff --git a/tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java b/tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java deleted file mode 100644 index dc47fc86..00000000 --- a/tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.recorder; - -import static android.support.test.InstrumentationRegistry.getContext; -import static org.junit.Assert.assertTrue; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.dvr.DvrDataManagerInMemoryImpl; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.FakeClock; -import com.android.tv.testing.dvr.RecordingTestUtils; -import java.util.concurrent.TimeUnit; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -/** Tests for {@link ScheduledProgramReaper}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class ScheduledProgramReaperTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - private static final long DURATION = TimeUnit.HOURS.toMillis(1); - - private ScheduledProgramReaper mReaper; - private FakeClock mFakeClock; - private DvrDataManagerInMemoryImpl mDvrDataManager; - @Mock private DvrManager mDvrManager; - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mDvrFeature.enableForTest(); - mFakeClock = FakeClock.createWithTimeOne(); - mDvrDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); - mReaper = new ScheduledProgramReaper(mDvrDataManager, mFakeClock); - } - - @After - public void tearDown() { - mDvrFeature.resetForTests(); - } - - @Test - public void testRun_noRecordings() { - assertTrue(mDvrDataManager.getAllScheduledRecordings().isEmpty()); - mReaper.run(); - assertTrue(mDvrDataManager.getAllScheduledRecordings().isEmpty()); - } - - @Test - public void testRun_oneRecordingsTomorrow() { - ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - mReaper.run(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - } - - @Test - public void testRun_oneRecordingsStarted() { - ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - mFakeClock.increment(TimeUnit.DAYS); - mReaper.run(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - } - - @Test - public void testRun_oneRecordingsFinished() { - ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - mFakeClock.increment(TimeUnit.DAYS); - mFakeClock.increment(TimeUnit.MINUTES, 2); - mReaper.run(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - } - - @Test - public void testRun_oneRecordingsExpired() { - ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); - MoreAsserts.assertContentsInAnyOrder( - mDvrDataManager.getAllScheduledRecordings(), recording); - mFakeClock.increment(TimeUnit.DAYS, 1 + ScheduledProgramReaper.DAYS); - mFakeClock.increment(TimeUnit.MILLISECONDS, DURATION); - // After the cutoff and enough so we can see on the clock - mFakeClock.increment(TimeUnit.SECONDS, 1); - - mReaper.run(); - assertTrue( - "Recordings after reaper at " - + com.android.tv.util.Utils.toIsoDateTimeString( - mFakeClock.currentTimeMillis()), - mDvrDataManager.getAllScheduledRecordings().isEmpty()); - } - - private ScheduledRecording addNewScheduledRecordingForTomorrow() { - long startTime = mFakeClock.currentTimeMillis() + TimeUnit.DAYS.toMillis(1); - ScheduledRecording recording = - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, CHANNEL_ID, startTime, startTime + DURATION); - return mDvrDataManager.addScheduledRecordingInternal( - ScheduledRecording.buildFrom(recording) - .setState(ScheduledRecording.STATE_RECORDING_FINISHED) - .build()); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java deleted file mode 100644 index 008e43f1..00000000 --- a/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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.dvr.recorder; - -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.os.Build; -import android.os.Looper; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import com.android.tv.InputSessionManager; -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.data.ChannelDataManager; -import com.android.tv.dvr.DvrDataManagerInMemoryImpl; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.data.ScheduledRecording; -import com.android.tv.testing.FakeClock; -import com.android.tv.testing.dvr.RecordingTestUtils; -import com.android.tv.util.TvInputManagerHelper; -import java.util.concurrent.TimeUnit; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; - -/** Tests for {@link RecordingScheduler}. */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SchedulerTest { - private static final String INPUT_ID = "input_id"; - private static final int CHANNEL_ID = 273; - - private FakeClock mFakeClock; - private DvrDataManagerInMemoryImpl mDataManager; - private RecordingScheduler mScheduler; - @Mock DvrManager mDvrManager; - @Mock InputSessionManager mSessionManager; - @Mock AlarmManager mMockAlarmManager; - @Mock ChannelDataManager mChannelDataManager; - @Mock TvInputManagerHelper mInputManager; - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mDvrFeature.enableForTest(); - mFakeClock = FakeClock.createWithCurrentTime(); - mDataManager = new DvrDataManagerInMemoryImpl(getTargetContext(), mFakeClock); - Mockito.when(mChannelDataManager.isDbLoadFinished()).thenReturn(true); - mScheduler = - new RecordingScheduler( - Looper.myLooper(), - mDvrManager, - mSessionManager, - mDataManager, - mChannelDataManager, - mInputManager, - getTargetContext(), - mFakeClock, - mMockAlarmManager); - } - - @After - public void tearDown() { - mDvrFeature.resetForTests(); - } - - @Test - public void testUpdate_none() { - mScheduler.updateAndStartServiceIfNeeded(); - verifyZeroInteractions(mMockAlarmManager); - } - - @Test - public void testUpdate_nextIn12Hours() { - long now = mFakeClock.currentTimeMillis(); - long startTime = now + TimeUnit.HOURS.toMillis(12); - ScheduledRecording r = - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, CHANNEL_ID, startTime, startTime + TimeUnit.HOURS.toMillis(1)); - mDataManager.addScheduledRecording(r); - verify(mMockAlarmManager) - .setExactAndAllowWhileIdle( - eq(AlarmManager.RTC_WAKEUP), - eq(startTime - RecordingScheduler.MS_TO_WAKE_BEFORE_START), - any(PendingIntent.class)); - Mockito.reset(mMockAlarmManager); - mScheduler.updateAndStartServiceIfNeeded(); - verify(mMockAlarmManager) - .setExactAndAllowWhileIdle( - eq(AlarmManager.RTC_WAKEUP), - eq(startTime - RecordingScheduler.MS_TO_WAKE_BEFORE_START), - any(PendingIntent.class)); - } - - @Test - public void testStartsWithin() { - long now = mFakeClock.currentTimeMillis(); - long startTime = now + 3; - ScheduledRecording r = - RecordingTestUtils.createTestRecordingWithPeriod( - INPUT_ID, CHANNEL_ID, startTime, startTime + 100); - assertFalse(mScheduler.startsWithin(r, 2)); - assertTrue(mScheduler.startsWithin(r, 3)); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java deleted file mode 100644 index c7cbff55..00000000 --- a/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.recorder; - -import static android.support.test.InstrumentationRegistry.getContext; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import android.util.LongSparseArray; -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.data.Program; -import com.android.tv.dvr.DvrDataManagerInMemoryImpl; -import com.android.tv.dvr.data.SeriesRecording; -import com.android.tv.testing.FakeClock; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** Tests for {@link SeriesRecordingScheduler} */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SeriesRecordingSchedulerTest { - private static final String PROGRAM_TITLE = "MyProgram"; - private static final long CHANNEL_ID = 123; - private static final long SERIES_RECORDING_ID1 = 1; - private static final String SERIES_ID = "SERIES_ID"; - private static final String SEASON_NUMBER1 = "SEASON NUMBER1"; - private static final String SEASON_NUMBER2 = "SEASON NUMBER2"; - private static final String EPISODE_NUMBER1 = "EPISODE NUMBER1"; - private static final String EPISODE_NUMBER2 = "EPISODE NUMBER2"; - - private final SeriesRecording mBaseSeriesRecording = - new SeriesRecording.Builder() - .setTitle(PROGRAM_TITLE) - .setChannelId(CHANNEL_ID) - .setSeriesId(SERIES_ID) - .build(); - private final Program mBaseProgram = - new Program.Builder() - .setTitle(PROGRAM_TITLE) - .setChannelId(CHANNEL_ID) - .setSeriesId(SERIES_ID) - .build(); - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - - private DvrDataManagerInMemoryImpl mDataManager; - - @Before - public void setUp() { - mDvrFeature.enableForTest(); - FakeClock fakeClock = FakeClock.createWithCurrentTime(); - mDataManager = new DvrDataManagerInMemoryImpl(getContext(), fakeClock); - } - - @After - public void tearDown() { - mDvrFeature.resetForTests(); - } - - @Test - public void testPickOneProgramPerEpisode_onePerEpisode() { - SeriesRecording seriesRecording = - SeriesRecording.buildFrom(mBaseSeriesRecording).setId(SERIES_RECORDING_ID1).build(); - mDataManager.addSeriesRecording(seriesRecording); - List<Program> programs = new ArrayList<>(); - Program program1 = - new Program.Builder(mBaseProgram) - .setSeasonNumber(SEASON_NUMBER1) - .setEpisodeNumber(EPISODE_NUMBER1) - .build(); - programs.add(program1); - Program program2 = - new Program.Builder(mBaseProgram) - .setSeasonNumber(SEASON_NUMBER2) - .setEpisodeNumber(EPISODE_NUMBER2) - .build(); - programs.add(program2); - LongSparseArray<List<Program>> result = - SeriesRecordingScheduler.pickOneProgramPerEpisode( - mDataManager, Collections.singletonList(seriesRecording), programs); - MoreAsserts.assertContentsInAnyOrder(result.get(SERIES_RECORDING_ID1), program1, program2); - } - - @Test - public void testPickOneProgramPerEpisode_manyPerEpisode() { - SeriesRecording seriesRecording = - SeriesRecording.buildFrom(mBaseSeriesRecording).setId(SERIES_RECORDING_ID1).build(); - mDataManager.addSeriesRecording(seriesRecording); - List<Program> programs = new ArrayList<>(); - Program program1 = - new Program.Builder(mBaseProgram) - .setSeasonNumber(SEASON_NUMBER1) - .setEpisodeNumber(EPISODE_NUMBER1) - .setStartTimeUtcMillis(0) - .build(); - programs.add(program1); - Program program2 = new Program.Builder(program1).setStartTimeUtcMillis(1).build(); - programs.add(program2); - Program program3 = - new Program.Builder(mBaseProgram) - .setSeasonNumber(SEASON_NUMBER2) - .setEpisodeNumber(EPISODE_NUMBER2) - .build(); - programs.add(program3); - Program program4 = new Program.Builder(program1).setStartTimeUtcMillis(1).build(); - programs.add(program4); - LongSparseArray<List<Program>> result = - SeriesRecordingScheduler.pickOneProgramPerEpisode( - mDataManager, Collections.singletonList(seriesRecording), programs); - MoreAsserts.assertContentsInAnyOrder(result.get(SERIES_RECORDING_ID1), program1, program3); - } - - @Test - public void testPickOneProgramPerEpisode_nullEpisode() { - SeriesRecording seriesRecording = - SeriesRecording.buildFrom(mBaseSeriesRecording).setId(SERIES_RECORDING_ID1).build(); - mDataManager.addSeriesRecording(seriesRecording); - List<Program> programs = new ArrayList<>(); - Program program1 = new Program.Builder(mBaseProgram).setStartTimeUtcMillis(0).build(); - programs.add(program1); - Program program2 = new Program.Builder(mBaseProgram).setStartTimeUtcMillis(1).build(); - programs.add(program2); - LongSparseArray<List<Program>> result = - SeriesRecordingScheduler.pickOneProgramPerEpisode( - mDataManager, Collections.singletonList(seriesRecording), programs); - MoreAsserts.assertContentsInAnyOrder(result.get(SERIES_RECORDING_ID1), program1, program2); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java b/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java deleted file mode 100644 index 2a1b5667..00000000 --- a/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2016 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.dvr.ui; - -import android.support.test.filters.SmallTest; -import android.support.v17.leanback.widget.ClassPresenterSelector; -import android.support.v17.leanback.widget.ObjectAdapter; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Objects; -import junit.framework.TestCase; -import org.junit.Before; -import org.junit.Test; - -/** Tests for {@link SortedArrayAdapter}. */ -@SmallTest -public class SortedArrayAdapterTest extends TestCase { - public static final TestData P1 = TestData.create(1, "c"); - public static final TestData P2 = TestData.create(2, "b"); - public static final TestData P3 = TestData.create(3, "a"); - public static final TestData EXTRA = TestData.create(4, "k"); - private TestSortedArrayAdapter mAdapter; - - @Before - public void setUp() { - mAdapter = new TestSortedArrayAdapter(Integer.MAX_VALUE, null); - } - - @Test - public void testContents_empty() { - assertEmpty(); - } - - @Test - public void testAdd_one() { - mAdapter.add(P1); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P1); - } - - @Test - public void testAdd_two() { - mAdapter.add(P1); - mAdapter.add(P2); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P2, P1); - } - - @Test - public void testSetInitialItems_two() { - mAdapter.setInitialItems(Arrays.asList(P1, P2)); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P2, P1); - } - - @Test - public void testMaxInitialCount() { - mAdapter = new TestSortedArrayAdapter(1, null); - mAdapter.setInitialItems(Arrays.asList(P1, P2)); - assertNotEmpty(); - assertEquals(mAdapter.size(), 1); - assertEquals(mAdapter.get(0), P2); - } - - @Test - public void testExtraItem() { - mAdapter = new TestSortedArrayAdapter(Integer.MAX_VALUE, EXTRA); - mAdapter.setInitialItems(Arrays.asList(P1, P2)); - assertNotEmpty(); - assertEquals(mAdapter.size(), 3); - assertEquals(mAdapter.get(0), P2); - assertEquals(mAdapter.get(2), EXTRA); - mAdapter.remove(P2); - mAdapter.remove(P1); - assertEquals(mAdapter.size(), 1); - assertEquals(mAdapter.get(0), EXTRA); - } - - @Test - public void testExtraItemWithMaxCount() { - mAdapter = new TestSortedArrayAdapter(1, EXTRA); - mAdapter.setInitialItems(Arrays.asList(P1, P2)); - assertNotEmpty(); - assertEquals(mAdapter.size(), 2); - assertEquals(mAdapter.get(0), P2); - assertEquals(mAdapter.get(1), EXTRA); - mAdapter.remove(P2); - assertEquals(mAdapter.size(), 1); - assertEquals(mAdapter.get(0), EXTRA); - } - - @Test - public void testRemove() { - mAdapter.add(P1); - mAdapter.add(P2); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P2, P1); - mAdapter.remove(P3); - assertContentsInOrder(mAdapter, P2, P1); - mAdapter.remove(P2); - assertContentsInOrder(mAdapter, P1); - mAdapter.remove(P1); - assertEmpty(); - mAdapter.add(P1); - mAdapter.add(P2); - mAdapter.add(P3); - assertContentsInOrder(mAdapter, P3, P2, P1); - mAdapter.removeItems(0, 2); - assertContentsInOrder(mAdapter, P1); - mAdapter.add(P2); - mAdapter.add(P3); - mAdapter.addExtraItem(EXTRA); - assertContentsInOrder(mAdapter, P3, P2, P1, EXTRA); - mAdapter.removeItems(1, 1); - assertContentsInOrder(mAdapter, P3, P1, EXTRA); - mAdapter.removeItems(1, 2); - assertContentsInOrder(mAdapter, P3); - mAdapter.addExtraItem(EXTRA); - mAdapter.addExtraItem(P2); - mAdapter.add(P1); - assertContentsInOrder(mAdapter, P3, P1, EXTRA, P2); - mAdapter.removeItems(1, 2); - assertContentsInOrder(mAdapter, P3, P2); - mAdapter.add(P1); - assertContentsInOrder(mAdapter, P3, P1, P2); - } - - @Test - public void testReplace() { - mAdapter.add(P1); - mAdapter.add(P2); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P2, P1); - mAdapter.replace(1, P3); - assertContentsInOrder(mAdapter, P3, P2); - mAdapter.replace(0, P1); - assertContentsInOrder(mAdapter, P2, P1); - mAdapter.addExtraItem(EXTRA); - assertContentsInOrder(mAdapter, P2, P1, EXTRA); - mAdapter.replace(2, P3); - assertContentsInOrder(mAdapter, P2, P1, P3); - } - - @Test - public void testChange_sorting() { - TestData p2_changed = TestData.create(2, "z changed"); - mAdapter.add(P1); - mAdapter.add(P2); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P2, P1); - mAdapter.change(p2_changed); - assertContentsInOrder(mAdapter, P1, p2_changed); - } - - @Test - public void testChange_new() { - mAdapter.change(P1); - assertNotEmpty(); - assertContentsInOrder(mAdapter, P1); - } - - private void assertEmpty() { - assertEquals("empty", true, mAdapter.isEmpty()); - } - - private void assertNotEmpty() { - assertEquals("empty", false, mAdapter.isEmpty()); - } - - private static void assertContentsInOrder(ObjectAdapter adapter, Object... contents) { - int ex = contents.length; - assertEquals("size", ex, adapter.size()); - for (int i = 0; i < ex; i++) { - assertEquals("element " + 1, contents[i], adapter.get(i)); - } - } - - private static class TestData { - @Override - public String toString() { - return "TestData[" + mId + "]{" + mText + '}'; - } - - static TestData create(long first, String text) { - return new TestData(first, text); - } - - private final long mId; - private final String mText; - - private TestData(long id, String second) { - this.mId = id; - this.mText = second; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TestData)) return false; - TestData that = (TestData) o; - return mId == that.mId && Objects.equals(mText, that.mText); - } - - @Override - public int hashCode() { - return Objects.hash(mId, mText); - } - } - - private static class TestSortedArrayAdapter extends SortedArrayAdapter<TestData> { - - private static final Comparator<TestData> TEXT_COMPARATOR = - new Comparator<TestData>() { - @Override - public int compare(TestData lhs, TestData rhs) { - return lhs.mText.compareTo(rhs.mText); - } - }; - - TestSortedArrayAdapter(int maxInitialCount, Object extra) { - super(new ClassPresenterSelector(), TEXT_COMPARATOR, maxInitialCount); - if (extra != null) { - addExtraItem((TestData) extra); - } - } - - @Override - protected long getId(TestData item) { - return item.mId; - } - } -} diff --git a/tests/unit/src/com/android/tv/experiments/ExperimentsTest.java b/tests/unit/src/com/android/tv/experiments/ExperimentsTest.java deleted file mode 100644 index f5fb353c..00000000 --- a/tests/unit/src/com/android/tv/experiments/ExperimentsTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2016 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.experiments; - -import static org.junit.Assert.assertEquals; - -import android.support.test.filters.SmallTest; -import com.android.tv.common.BuildConfig; -import org.junit.Before; -import org.junit.Test; - -/** Tests for {@link Experiments}. */ -@SmallTest -public class ExperimentsTest { - @Before - public void setUp() { - ExperimentFlag.initForTest(); - } - - @Test - public void testEngOnlyDefault() { - assertEquals( - "ENABLE_DEVELOPER_FEATURES", - Boolean.valueOf(BuildConfig.ENG), - Experiments.ENABLE_DEVELOPER_FEATURES.get()); - } -} diff --git a/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java index 4faca569..04d86bfc 100644 --- a/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java +++ b/tests/unit/src/com/android/tv/menu/TvOptionsRowAdapterTest.java @@ -24,7 +24,7 @@ import android.os.SystemClock; import android.support.test.filters.MediumTest; import android.text.TextUtils; import com.android.tv.BaseMainActivityTestCase; -import com.android.tv.testing.Constants; +import com.android.tv.testing.constants.Constants; import com.android.tv.testing.testinput.ChannelState; import com.android.tv.testing.testinput.ChannelStateData; import com.android.tv.testing.testinput.TvTestInputConstants; diff --git a/tests/unit/src/com/android/tv/recommendation/ChannelRecordTest.java b/tests/unit/src/com/android/tv/recommendation/ChannelRecordTest.java index d868d3f8..c2f0d0c5 100644 --- a/tests/unit/src/com/android/tv/recommendation/ChannelRecordTest.java +++ b/tests/unit/src/com/android/tv/recommendation/ChannelRecordTest.java @@ -20,7 +20,7 @@ import static android.support.test.InstrumentationRegistry.getContext; import static org.junit.Assert.assertEquals; import android.support.test.filters.SmallTest; -import com.android.tv.testing.Utils; +import com.android.tv.testing.utils.Utils; import java.util.Random; import java.util.concurrent.TimeUnit; import org.junit.Before; diff --git a/tests/unit/src/com/android/tv/recommendation/EvaluatorTestCase.java b/tests/unit/src/com/android/tv/recommendation/EvaluatorTestCase.java index af941177..6e76bf36 100644 --- a/tests/unit/src/com/android/tv/recommendation/EvaluatorTestCase.java +++ b/tests/unit/src/com/android/tv/recommendation/EvaluatorTestCase.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; import com.android.tv.data.Channel; import com.android.tv.recommendation.RecommendationUtils.ChannelRecordSortedMapHelper; import com.android.tv.recommendation.Recommender.Evaluator; -import com.android.tv.testing.Utils; +import com.android.tv.testing.utils.Utils; import java.util.ArrayList; import java.util.List; import org.junit.Before; diff --git a/tests/unit/src/com/android/tv/recommendation/RecommendationUtils.java b/tests/unit/src/com/android/tv/recommendation/RecommendationUtils.java index eea42bf5..2fc4bb1c 100644 --- a/tests/unit/src/com/android/tv/recommendation/RecommendationUtils.java +++ b/tests/unit/src/com/android/tv/recommendation/RecommendationUtils.java @@ -18,7 +18,7 @@ package com.android.tv.recommendation; import android.content.Context; import com.android.tv.data.Channel; -import com.android.tv.testing.Utils; +import com.android.tv.testing.utils.Utils; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java b/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java index 062633a5..e2b0b249 100644 --- a/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java +++ b/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java @@ -25,7 +25,7 @@ import android.support.test.filters.SmallTest; import android.test.MoreAsserts; import com.android.tv.data.Channel; import com.android.tv.recommendation.RecommendationUtils.ChannelRecordSortedMapHelper; -import com.android.tv.testing.Utils; +import com.android.tv.testing.utils.Utils; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -46,7 +46,7 @@ public class RecommenderTest { System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); private static final long DEFAULT_MAX_WATCH_DURATION_MS = TimeUnit.HOURS.toMillis(1); - private final Comparator<Channel> CHANNEL_SORT_KEY_COMPARATOR = + private final Comparator<Channel> mChannelSortKeyComparator = new Comparator<Channel>() { @Override public int compare(Channel lhs, Channel rhs) { @@ -55,7 +55,7 @@ public class RecommenderTest { .compareTo(mRecommender.getChannelSortKey(rhs.getId())); } }; - private final Runnable START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS = + private final Runnable mStartDatamanagerRunnableAddFourChannels = new Runnable() { @Override public void run() { @@ -89,7 +89,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_includeRecommendedOnly_allChannelsHaveNoScore() { - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); // Recommender doesn't recommend any channels because all channels are not recommended. assertEquals(0, mRecommender.recommendChannels().size()); @@ -102,7 +102,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_notIncludeRecommendedOnly_allChannelsHaveNoScore() { - createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(false, mStartDatamanagerRunnableAddFourChannels); // Recommender recommends every channel because it recommends not-recommended channels too. assertEquals(4, mRecommender.recommendChannels().size()); @@ -115,7 +115,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_includeRecommendedOnly_allChannelsHaveScore() { - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); setChannelScores_scoreIncreasesAsChannelIdIncreases(); @@ -135,7 +135,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_notIncludeRecommendedOnly_allChannelsHaveScore() { - createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(false, mStartDatamanagerRunnableAddFourChannels); setChannelScores_scoreIncreasesAsChannelIdIncreases(); @@ -155,7 +155,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_includeRecommendedOnly_fewChannelsHaveScore() { - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); mEvaluator.setChannelScore(mChannel_1.getId(), 1.0); mEvaluator.setChannelScore(mChannel_2.getId(), 1.0); @@ -175,7 +175,7 @@ public class RecommenderTest { @Test public void testRecommendChannels_notIncludeRecommendedOnly_fewChannelsHaveScore() { - createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(false, mStartDatamanagerRunnableAddFourChannels); mEvaluator.setChannelScore(mChannel_1.getId(), 1.0); mEvaluator.setChannelScore(mChannel_2.getId(), 1.0); @@ -202,13 +202,13 @@ public class RecommenderTest { @Test public void testGetChannelSortKey_recommendAllChannels() { - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); setChannelScores_scoreIncreasesAsChannelIdIncreases(); List<Channel> expectedChannelList = mRecommender.recommendChannels(); List<Channel> channelList = Arrays.asList(mChannel_1, mChannel_2, mChannel_3, mChannel_4); - Collections.sort(channelList, CHANNEL_SORT_KEY_COMPARATOR); + Collections.sort(channelList, mChannelSortKeyComparator); // Recommended channel list and channel list sorted by sort key must be the same. MoreAsserts.assertContentsInOrder(channelList, expectedChannelList.toArray()); @@ -218,7 +218,7 @@ public class RecommenderTest { @Test public void testGetChannelSortKey_recommendFewChannels() { // Test with recommending 3 channels. - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); setChannelScores_scoreIncreasesAsChannelIdIncreases(); @@ -229,7 +229,7 @@ public class RecommenderTest { mRecommender.getChannelSortKey(mChannel_1.getId())); List<Channel> channelList = Arrays.asList(mChannel_2, mChannel_3, mChannel_4); - Collections.sort(channelList, CHANNEL_SORT_KEY_COMPARATOR); + Collections.sort(channelList, mChannelSortKeyComparator); MoreAsserts.assertContentsInOrder(channelList, expectedChannelList.toArray()); assertSortKeyNotInvalid(channelList); @@ -237,7 +237,7 @@ public class RecommenderTest { @Test public void testListener_onRecommendationChanged() { - createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS); + createRecommender(true, mStartDatamanagerRunnableAddFourChannels); // FakeEvaluator doesn't recommend a channel with empty watch log. As every channel // doesn't have a watch log, nothing is recommended and recommendation isn't changed. assertFalse(mOnRecommendationChanged); diff --git a/tests/unit/src/com/android/tv/recommendation/RoutineWatchEvaluatorTest.java b/tests/unit/src/com/android/tv/recommendation/RoutineWatchEvaluatorTest.java index 3c972e93..a675df85 100644 --- a/tests/unit/src/com/android/tv/recommendation/RoutineWatchEvaluatorTest.java +++ b/tests/unit/src/com/android/tv/recommendation/RoutineWatchEvaluatorTest.java @@ -124,47 +124,47 @@ public class RoutineWatchEvaluatorTest extends EvaluatorTestCase<RoutineWatchEva int tomorrowDayOfWeek = (todayDayOfWeek % 7) + 1; // Today 00:00 - 01:00. - ProgramTime programTimeToday0000_0100 = + ProgramTime programTimeToday0000to0100 = ProgramTime.createFromProgram( createDummyProgram(todayAtHourMin(0, 0), TimeUnit.HOURS.toMillis(1))); assertProgramTime( todayDayOfWeek, hourMinuteToSec(0, 0), hourMinuteToSec(1, 0), - programTimeToday0000_0100); + programTimeToday0000to0100); // Today 23:30 - 24:30. - ProgramTime programTimeToday2330_2430 = + ProgramTime programTimeToday2330to2430 = ProgramTime.createFromProgram( createDummyProgram(todayAtHourMin(23, 30), TimeUnit.HOURS.toMillis(1))); assertProgramTime( todayDayOfWeek, hourMinuteToSec(23, 30), hourMinuteToSec(24, 30), - programTimeToday2330_2430); + programTimeToday2330to2430); // Tomorrow 00:00 - 01:00. - ProgramTime programTimeTomorrow0000_0100 = + ProgramTime programTimeTomorrow0000to0100 = ProgramTime.createFromProgram( createDummyProgram(tomorrowAtHourMin(0, 0), TimeUnit.HOURS.toMillis(1))); assertProgramTime( tomorrowDayOfWeek, hourMinuteToSec(0, 0), hourMinuteToSec(1, 0), - programTimeTomorrow0000_0100); + programTimeTomorrow0000to0100); // Tomorrow 23:30 - 24:30. - ProgramTime programTimeTomorrow2330_2430 = + ProgramTime programTimeTomorrow2330to2430 = ProgramTime.createFromProgram( createDummyProgram(tomorrowAtHourMin(23, 30), TimeUnit.HOURS.toMillis(1))); assertProgramTime( tomorrowDayOfWeek, hourMinuteToSec(23, 30), hourMinuteToSec(24, 30), - programTimeTomorrow2330_2430); + programTimeTomorrow2330to2430); // Today 18:00 - Tomorrow 12:00. - ProgramTime programTimeToday1800_3600 = + ProgramTime programTimeToday1800to3600 = ProgramTime.createFromProgram( createDummyProgram(todayAtHourMin(18, 0), TimeUnit.HOURS.toMillis(18))); // Maximum duration of ProgramTime is 12 hours. @@ -173,42 +173,42 @@ public class RoutineWatchEvaluatorTest extends EvaluatorTestCase<RoutineWatchEva todayDayOfWeek, hourMinuteToSec(18, 0), hourMinuteToSec(30, 0), - programTimeToday1800_3600); + programTimeToday1800to3600); } @Test public void testCalculateOverlappedIntervalScore() { // Today 21:00 - 24:00. - ProgramTime programTimeToday2100_2400 = + ProgramTime programTimeToday2100to2400 = ProgramTime.createFromProgram( createDummyProgram(todayAtHourMin(21, 0), TimeUnit.HOURS.toMillis(3))); // Today 22:00 - 01:00. - ProgramTime programTimeToday2200_0100 = + ProgramTime programTimeToday2200to0100 = ProgramTime.createFromProgram( createDummyProgram(todayAtHourMin(22, 0), TimeUnit.HOURS.toMillis(3))); // Tomorrow 00:00 - 03:00. - ProgramTime programTimeTomorrow0000_0300 = + ProgramTime programTimeTomorrow0000to0300 = ProgramTime.createFromProgram( createDummyProgram(tomorrowAtHourMin(0, 0), TimeUnit.HOURS.toMillis(3))); // Tomorrow 20:00 - Tomorrow 23:00. - ProgramTime programTimeTomorrow2000_2300 = + ProgramTime programTimeTomorrow2000to2300 = ProgramTime.createFromProgram( createDummyProgram(tomorrowAtHourMin(20, 0), TimeUnit.HOURS.toMillis(3))); // Check intersection time and commutative law in all cases. int oneHourInSec = hourMinuteToSec(1, 0); assertOverlappedIntervalScore( - 2 * oneHourInSec, true, programTimeToday2100_2400, programTimeToday2200_0100); + 2 * oneHourInSec, true, programTimeToday2100to2400, programTimeToday2200to0100); assertOverlappedIntervalScore( - 0, false, programTimeToday2100_2400, programTimeTomorrow0000_0300); + 0, false, programTimeToday2100to2400, programTimeTomorrow0000to0300); assertOverlappedIntervalScore( - 2 * oneHourInSec, false, programTimeToday2100_2400, programTimeTomorrow2000_2300); + 2 * oneHourInSec, false, programTimeToday2100to2400, programTimeTomorrow2000to2300); assertOverlappedIntervalScore( - oneHourInSec, true, programTimeToday2200_0100, programTimeTomorrow0000_0300); + oneHourInSec, true, programTimeToday2200to0100, programTimeTomorrow0000to0300); assertOverlappedIntervalScore( - oneHourInSec, false, programTimeToday2200_0100, programTimeTomorrow2000_2300); + oneHourInSec, false, programTimeToday2200to0100, programTimeTomorrow2000to2300); assertOverlappedIntervalScore( - 0, false, programTimeTomorrow0000_0300, programTimeTomorrow2000_2300); + 0, false, programTimeTomorrow0000to0300, programTimeTomorrow2000to2300); } @Test diff --git a/tests/unit/src/com/android/tv/search/LocalSearchProviderTest.java b/tests/unit/src/com/android/tv/search/LocalSearchProviderTest.java index 9ac81301..2bc5f05a 100644 --- a/tests/unit/src/com/android/tv/search/LocalSearchProviderTest.java +++ b/tests/unit/src/com/android/tv/search/LocalSearchProviderTest.java @@ -25,10 +25,10 @@ import android.database.Cursor; import android.net.Uri; import android.support.test.filters.SmallTest; import android.test.ProviderTestCase2; -import com.android.tv.ApplicationSingletons; import com.android.tv.TvApplication; +import com.android.tv.common.BaseSingletons; import com.android.tv.perf.PerformanceMonitor; -import com.android.tv.util.MockApplicationSingletons; +import com.android.tv.util.MockTvSingletons; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -37,6 +37,7 @@ import org.mockito.MockitoAnnotations; /** Unit test for {@link LocalSearchProvider}. */ @SmallTest +@SuppressWarnings("TryWithResources") // TODO(b/62143348): remove when error prone check fixed public class LocalSearchProviderTest extends ProviderTestCase2<LocalSearchProvider> { private static final String AUTHORITY = "com.android.tv.search"; private static final String KEYWORD = "keyword"; @@ -48,11 +49,11 @@ public class LocalSearchProviderTest extends ProviderTestCase2<LocalSearchProvid + SearchManager.SUGGEST_URI_PATH_QUERY + "/" + KEYWORD); - private static final Uri WRONG_SERACH_URI = + private static final Uri WRONG_SEARCH_URI = Uri.parse("content://" + AUTHORITY + "/wrong_path/" + KEYWORD); - private ApplicationSingletons mOldAppSingletons; - MockApplicationSingletons mMockAppSingletons; + private BaseSingletons mOldTvSingletons; + MockTvSingletons mMockTvSingletons; @Mock PerformanceMonitor mMockPerformanceMointor; @Mock SearchInterface mMockSearchInterface; @@ -65,10 +66,10 @@ public class LocalSearchProviderTest extends ProviderTestCase2<LocalSearchProvid public void setUp() throws Exception { MockitoAnnotations.initMocks(this); setContext(getTargetContext()); - mOldAppSingletons = TvApplication.sAppSingletons; - mMockAppSingletons = new MockApplicationSingletons(getTargetContext()); - mMockAppSingletons.setPerformanceMonitor(mMockPerformanceMointor); - TvApplication.sAppSingletons = mMockAppSingletons; + mOldTvSingletons = TvApplication.sSingletons; + mMockTvSingletons = new MockTvSingletons(getTargetContext()); + mMockTvSingletons.setPerformanceMonitor(mMockPerformanceMointor); + TvApplication.sSingletons = mMockTvSingletons; super.setUp(); getProvider().setSearchInterface(mMockSearchInterface); } @@ -76,7 +77,7 @@ public class LocalSearchProviderTest extends ProviderTestCase2<LocalSearchProvid @After @Override public void tearDown() throws Exception { - TvApplication.sAppSingletons = mOldAppSingletons; + TvApplication.sSingletons = mOldTvSingletons; super.tearDown(); } @@ -90,7 +91,7 @@ public class LocalSearchProviderTest extends ProviderTestCase2<LocalSearchProvid @Test public void testQuery_invalidUri() { - try (Cursor c = getProvider().query(WRONG_SERACH_URI, null, null, null, null)) { + try (Cursor c = getProvider().query(WRONG_SEARCH_URI, null, null, null, null)) { fail("Query with invalid URI should fail."); } catch (IllegalArgumentException e) { // Success. diff --git a/tests/unit/src/com/android/tv/tests/TvActivityTest.java b/tests/unit/src/com/android/tv/tests/TvActivityTest.java index 346b9787..30663e9a 100644 --- a/tests/unit/src/com/android/tv/tests/TvActivityTest.java +++ b/tests/unit/src/com/android/tv/tests/TvActivityTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; import android.support.test.filters.MediumTest; import android.support.test.rule.ActivityTestRule; import com.android.tv.TvActivity; -import com.android.tv.testing.Utils; +import com.android.tv.testing.utils.Utils; import org.junit.Rule; import org.junit.Test; diff --git a/tests/unit/src/com/android/tv/util/ImageCacheTest.java b/tests/unit/src/com/android/tv/util/ImageCacheTest.java index 8352f7dc..cd34895e 100644 --- a/tests/unit/src/com/android/tv/util/ImageCacheTest.java +++ b/tests/unit/src/com/android/tv/util/ImageCacheTest.java @@ -21,12 +21,15 @@ import static org.junit.Assert.assertSame; import android.graphics.Bitmap; import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.util.BitmapUtils.ScaledBitmapInfo; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link ImageCache}. */ @MediumTest +@RunWith(AndroidJUnit4.class) public class ImageCacheTest { private static final Bitmap ORIG = Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565); diff --git a/tests/unit/src/com/android/tv/util/MockApplicationSingletons.java b/tests/unit/src/com/android/tv/util/MockTvSingletons.java index 4eb0c4d7..3a74f917 100644 --- a/tests/unit/src/com/android/tv/util/MockApplicationSingletons.java +++ b/tests/unit/src/com/android/tv/util/MockTvSingletons.java @@ -17,31 +17,40 @@ package com.android.tv.util; import android.content.Context; -import com.android.tv.ApplicationSingletons; +import android.content.Intent; import com.android.tv.InputSessionManager; import com.android.tv.MainActivityWrapper; import com.android.tv.TvApplication; +import com.android.tv.TvSingletons; import com.android.tv.analytics.Analytics; import com.android.tv.analytics.Tracker; -import com.android.tv.config.RemoteConfig; +import com.android.tv.common.config.api.RemoteConfig; +import com.android.tv.common.experiments.ExperimentLoader; +import com.android.tv.common.recording.RecordingStorageStatusManager; +import com.android.tv.common.util.Clock; import com.android.tv.data.ChannelDataManager; import com.android.tv.data.PreviewDataManager; import com.android.tv.data.ProgramDataManager; +import com.android.tv.data.epg.EpgFetcher; +import com.android.tv.data.epg.EpgReader; import com.android.tv.dvr.DvrDataManager; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.DvrScheduleManager; -import com.android.tv.dvr.DvrStorageStatusManager; import com.android.tv.dvr.DvrWatchedPositionManager; import com.android.tv.dvr.recorder.RecordingScheduler; import com.android.tv.perf.PerformanceMonitor; +import com.android.tv.testing.FakeClock; +import com.android.tv.tuner.TunerInputController; +import javax.inject.Provider; -/** Mock {@link ApplicationSingletons} class. */ -public class MockApplicationSingletons implements ApplicationSingletons { - private final TvApplication mApp; +/** Mock {@link TvSingletons} class. */ +public class MockTvSingletons implements TvSingletons { + public final FakeClock fakeClock = FakeClock.createWithCurrentTime(); + private final TvApplication mApp; private PerformanceMonitor mPerformanceMonitor; - public MockApplicationSingletons(Context context) { + public MockTvSingletons(Context context) { mApp = (TvApplication) context.getApplicationContext(); } @@ -51,6 +60,9 @@ public class MockApplicationSingletons implements ApplicationSingletons { } @Override + public void handleInputCountChanged() {} + + @Override public ChannelDataManager getChannelDataManager() { return mApp.getChannelDataManager(); } @@ -81,8 +93,13 @@ public class MockApplicationSingletons implements ApplicationSingletons { } @Override - public DvrStorageStatusManager getDvrStorageStatusManager() { - return mApp.getDvrStorageStatusManager(); + public Clock getClock() { + return fakeClock; + } + + @Override + public RecordingStorageStatusManager getRecordingStorageStatusManager() { + return mApp.getRecordingStorageStatusManager(); } @Override @@ -121,12 +138,37 @@ public class MockApplicationSingletons implements ApplicationSingletons { } @Override + public Provider<EpgReader> providesEpgReader() { + return mApp.providesEpgReader(); + } + + @Override + public EpgFetcher getEpgFetcher() { + return mApp.getEpgFetcher(); + } + + @Override + public SetupUtils getSetupUtils() { + return mApp.getSetupUtils(); + } + + @Override + public TunerInputController getTunerInputController() { + return mApp.getTunerInputController(); + } + + @Override + public ExperimentLoader getExperimentLoader() { + return mApp.getExperimentLoader(); + } + + @Override public MainActivityWrapper getMainActivityWrapper() { return mApp.getMainActivityWrapper(); } @Override - public AccountHelper getAccountHelper() { + public com.android.tv.util.account.AccountHelper getAccountHelper() { return mApp.getAccountHelper(); } @@ -136,6 +178,11 @@ public class MockApplicationSingletons implements ApplicationSingletons { } @Override + public Intent getTunerSetupIntent(Context context) { + return mApp.getTunerSetupIntent(context); + } + + @Override public boolean isRunningInMainProcess() { return mApp.isRunningInMainProcess(); } @@ -148,4 +195,9 @@ public class MockApplicationSingletons implements ApplicationSingletons { public void setPerformanceMonitor(PerformanceMonitor performanceMonitor) { mPerformanceMonitor = performanceMonitor; } + + @Override + public String getEmbeddedTunerInputId() { + return "com.android.tv/.tuner.tvinput.LiveTvTunerTvInputService"; + } } diff --git a/tests/unit/src/com/android/tv/util/MultiLongSparseArrayTest.java b/tests/unit/src/com/android/tv/util/MultiLongSparseArrayTest.java deleted file mode 100644 index 42325c83..00000000 --- a/tests/unit/src/com/android/tv/util/MultiLongSparseArrayTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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.util; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; - -import android.support.test.filters.SmallTest; -import android.test.MoreAsserts; -import java.util.Collections; -import org.junit.Test; - -/** Tests for {@link MultiLongSparseArray}. */ -@SmallTest -public class MultiLongSparseArrayTest { - @Test - public void testEmpty() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - assertSame(Collections.EMPTY_SET, sparseArray.get(0)); - } - - @Test - public void testOneElement() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - sparseArray.put(0, "foo"); - MoreAsserts.assertContentsInAnyOrder(sparseArray.get(0), "foo"); - } - - @Test - public void testTwoElements() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - sparseArray.put(0, "foo"); - sparseArray.put(0, "bar"); - MoreAsserts.assertContentsInAnyOrder(sparseArray.get(0), "foo", "bar"); - } - - @Test - public void testClearEmptyCache() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - sparseArray.clearEmptyCache(); - assertEquals(0, sparseArray.getEmptyCacheSize()); - sparseArray.put(0, "foo"); - sparseArray.remove(0, "foo"); - assertEquals(1, sparseArray.getEmptyCacheSize()); - sparseArray.clearEmptyCache(); - assertEquals(0, sparseArray.getEmptyCacheSize()); - } - - @Test - public void testMaxEmptyCacheSize() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - sparseArray.clearEmptyCache(); - assertEquals(0, sparseArray.getEmptyCacheSize()); - for (int i = 0; i <= MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT + 2; i++) { - sparseArray.put(i, "foo"); - } - for (int i = 0; i <= MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT + 2; i++) { - sparseArray.remove(i, "foo"); - } - assertEquals( - MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT, sparseArray.getEmptyCacheSize()); - sparseArray.clearEmptyCache(); - assertEquals(0, sparseArray.getEmptyCacheSize()); - } - - @Test - public void testReuseEmptySets() { - MultiLongSparseArray<String> sparseArray = new MultiLongSparseArray<>(); - sparseArray.clearEmptyCache(); - assertEquals(0, sparseArray.getEmptyCacheSize()); - // create a bunch of sets - for (int i = 0; i <= MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT + 2; i++) { - sparseArray.put(i, "foo"); - } - // remove them so they are all put in the cache. - for (int i = 0; i <= MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT + 2; i++) { - sparseArray.remove(i, "foo"); - } - assertEquals( - MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT, sparseArray.getEmptyCacheSize()); - - // now create elements, that use the cached empty sets. - for (int i = 0; i < MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT; i++) { - sparseArray.put(10 + i, "bar"); - assertEquals( - MultiLongSparseArray.DEFAULT_MAX_EMPTIES_KEPT - i - 1, - sparseArray.getEmptyCacheSize()); - } - } -} diff --git a/tests/unit/src/com/android/tv/util/ScaledBitmapInfoTest.java b/tests/unit/src/com/android/tv/util/ScaledBitmapInfoTest.java index 87ae5131..9bb69f80 100644 --- a/tests/unit/src/com/android/tv/util/ScaledBitmapInfoTest.java +++ b/tests/unit/src/com/android/tv/util/ScaledBitmapInfoTest.java @@ -1,14 +1,32 @@ +/* + * Copyright (C) 2017 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.util; import static org.junit.Assert.assertEquals; import android.graphics.Bitmap; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.util.BitmapUtils.ScaledBitmapInfo; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link ScaledBitmapInfo}. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class ScaledBitmapInfoTest { private static final Bitmap B80x100 = Bitmap.createBitmap(80, 100, Bitmap.Config.RGB_565); private static final Bitmap B960x1440 = Bitmap.createBitmap(960, 1440, Bitmap.Config.RGB_565); diff --git a/tests/unit/src/com/android/tv/util/TvInputManagerHelperTest.java b/tests/unit/src/com/android/tv/util/TvInputManagerHelperTest.java index 44c4477e..168e7c6e 100644 --- a/tests/unit/src/com/android/tv/util/TvInputManagerHelperTest.java +++ b/tests/unit/src/com/android/tv/util/TvInputManagerHelperTest.java @@ -21,17 +21,20 @@ import static android.support.test.InstrumentationRegistry.getContext; import android.content.pm.ResolveInfo; import android.media.tv.TvInputInfo; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.testing.ComparatorTester; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** Test for {@link TvInputManagerHelper} */ @SmallTest +@RunWith(AndroidJUnit4.class) public class TvInputManagerHelperTest { final HashMap<String, TvInputInfoWrapper> TEST_INPUT_MAP = new HashMap<>(); diff --git a/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java b/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java index e60aae05..c4623bc7 100644 --- a/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java +++ b/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java @@ -20,15 +20,18 @@ import static org.junit.Assert.assertEquals; import android.media.tv.TvTrackInfo; import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; import com.android.tv.testing.ComparatorTester; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.junit.Test; +import org.junit.runner.RunWith; /** Tests for {@link com.android.tv.util.TvTrackInfoUtils}. */ @SmallTest +@RunWith(AndroidJUnit4.class) public class TvTrackInfoUtilsTest { private static final String UN_MATCHED_ID = "no matching ID"; diff --git a/tests/unit/src/com/android/tv/util/UtilsTest_GetDurationString.java b/tests/unit/src/com/android/tv/util/UtilsTest_GetDurationString.java deleted file mode 100644 index f5eefc64..00000000 --- a/tests/unit/src/com/android/tv/util/UtilsTest_GetDurationString.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * 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.util; - -import static android.support.test.InstrumentationRegistry.getContext; -import static org.junit.Assert.assertEquals; - -import android.support.test.filters.SmallTest; -import android.text.format.DateUtils; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.Locale; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * Tests for {@link com.android.tv.util.Utils#getDurationString}. - * - * <p>This test uses deprecated flags {@link DateUtils#FORMAT_12HOUR} and {@link - * DateUtils#FORMAT_24HOUR} to run this test independent to system's 12/24h format. Note that - * changing system setting requires permission android.permission.WRITE_SETTINGS and it should be - * defined in TV app, not this test. - */ -@SmallTest -public class UtilsTest_GetDurationString { - // TODO: Mock Context so we can specify current time and locale for test. - private Locale mLocale; - private static final long DATE_THIS_YEAR_2_1_MS = getFebOfThisYearInMillis(1, 0, 0); - - // All possible list for a parameter to test parameter independent result. - private static final boolean[] PARAM_USE_SHORT_FORMAT = {false, true}; - - @Before - public void setUp() { - // Set locale to US - mLocale = Locale.getDefault(); - Locale.setDefault(Locale.US); - } - - @After - public void tearDown() { - // Revive system locale. - Locale.setDefault(mLocale); - } - - /** Return time in millis assuming that whose year is this year and month is Jan. */ - private static long getJanOfThisYearInMillis(int date, int hour, int minutes) { - return new GregorianCalendar(getThisYear(), Calendar.JANUARY, date, hour, minutes) - .getTimeInMillis(); - } - - private static long getJanOfThisYearInMillis(int date, int hour) { - return getJanOfThisYearInMillis(date, hour, 0); - } - - /** Return time in millis assuming that whose year is this year and month is Feb. */ - private static long getFebOfThisYearInMillis(int date, int hour, int minutes) { - return new GregorianCalendar(getThisYear(), Calendar.FEBRUARY, date, hour, minutes) - .getTimeInMillis(); - } - - private static long getFebOfThisYearInMillis(int date, int hour) { - return getFebOfThisYearInMillis(date, hour, 0); - } - - private static int getThisYear() { - return new GregorianCalendar().get(GregorianCalendar.YEAR); - } - - @Test - public void testSameDateAndTime() { - assertEquals( - "3:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(1, 3), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "03:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(1, 3), - false, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testDurationWithinToday() { - assertEquals( - "12:00 – 3:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "00:00 – 03:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - false, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testDurationFromYesterdayToToday() { - assertEquals( - "Jan 31, 3:00 AM – Feb 1, 4:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getJanOfThisYearInMillis(31, 3), - getFebOfThisYearInMillis(1, 4), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Jan 31, 03:00 – Feb 1, 04:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getJanOfThisYearInMillis(31, 3), - getFebOfThisYearInMillis(1, 4), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "1/31, 11:30 PM – 12:30 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getJanOfThisYearInMillis(31, 23, 30), - getFebOfThisYearInMillis(1, 0, 30), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "1/31, 23:30 – 00:30", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getJanOfThisYearInMillis(31, 23, 30), - getFebOfThisYearInMillis(1, 0, 30), - true, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testDurationFromTodayToTomorrow() { - assertEquals( - "Feb 1, 3:00 AM – Feb 2, 4:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(2, 4), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Feb 1, 03:00 – Feb 2, 04:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(2, 4), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "2/1, 3:00 AM – 2/2, 4:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(2, 4), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "2/1, 03:00 – 2/2, 04:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 3), - getFebOfThisYearInMillis(2, 4), - true, - DateUtils.FORMAT_24HOUR)); - - assertEquals( - "Feb 1, 11:30 PM – Feb 2, 12:30 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23, 30), - getFebOfThisYearInMillis(2, 0, 30), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Feb 1, 23:30 – Feb 2, 00:30", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23, 30), - getFebOfThisYearInMillis(2, 0, 30), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "11:30 PM – 12:30 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23, 30), - getFebOfThisYearInMillis(2, 0, 30), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "23:30 – 00:30", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23, 30), - getFebOfThisYearInMillis(2, 0, 30), - true, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testDurationWithinTomorrow() { - assertEquals( - "Feb 2, 2:00 – 4:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 2), - getFebOfThisYearInMillis(2, 4), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Feb 2, 02:00 – 04:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 2), - getFebOfThisYearInMillis(2, 4), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "2/2, 2:00 – 4:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 2), - getFebOfThisYearInMillis(2, 4), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "2/2, 02:00 – 04:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 2), - getFebOfThisYearInMillis(2, 4), - true, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testStartOfDay() { - assertEquals( - "12:00 – 1:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 1), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "00:00 – 01:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 1), - false, - DateUtils.FORMAT_24HOUR)); - - assertEquals( - "Feb 2, 12:00 – 1:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(2, 1), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Feb 2, 00:00 – 01:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(2, 1), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "2/2, 12:00 – 1:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(2, 1), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "2/2, 00:00 – 01:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(2, 1), - true, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testEndOfDay() { - for (boolean useShortFormat : PARAM_USE_SHORT_FORMAT) { - assertEquals( - "11:00 PM – 12:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23), - getFebOfThisYearInMillis(2, 0), - useShortFormat, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "23:00 – 00:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(1, 23), - getFebOfThisYearInMillis(2, 0), - useShortFormat, - DateUtils.FORMAT_24HOUR)); - } - - assertEquals( - "Feb 2, 11:00 PM – 12:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 23), - getFebOfThisYearInMillis(3, 0), - false, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "Feb 2, 23:00 – 00:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 23), - getFebOfThisYearInMillis(3, 0), - false, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "2/2, 11:00 PM – 12:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 23), - getFebOfThisYearInMillis(3, 0), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "2/2, 23:00 – 00:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 23), - getFebOfThisYearInMillis(3, 0), - true, - DateUtils.FORMAT_24HOUR)); - assertEquals( - "2/2, 12:00 AM – 2/3, 12:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(3, 0), - true, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "2/2, 00:00 – 2/3, 00:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - getFebOfThisYearInMillis(2, 0), - getFebOfThisYearInMillis(3, 0), - true, - DateUtils.FORMAT_24HOUR)); - } - - @Test - public void testMidnight() { - for (boolean useShortFormat : PARAM_USE_SHORT_FORMAT) { - assertEquals( - "12:00 AM", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - useShortFormat, - DateUtils.FORMAT_12HOUR)); - assertEquals( - "00:00", - Utils.getDurationString( - getContext(), - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - DATE_THIS_YEAR_2_1_MS, - useShortFormat, - DateUtils.FORMAT_24HOUR)); - } - } -} diff --git a/tests/unit/src/com/android/tv/util/UtilsTest_GetMultiAudioString.java b/tests/unit/src/com/android/tv/util/UtilsTest_GetMultiAudioString.java deleted file mode 100644 index 79ed14c0..00000000 --- a/tests/unit/src/com/android/tv/util/UtilsTest_GetMultiAudioString.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.util; - -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static org.junit.Assert.assertEquals; - -import android.content.Context; -import android.media.tv.TvTrackInfo; -import android.support.test.filters.SmallTest; -import org.junit.Test; - -/** Tests for {@link com.android.tv.util.Utils#getMultiAudioString}. */ -@SmallTest -public class UtilsTest_GetMultiAudioString { - private static final String TRACK_ID = "test_track_id"; - private static final int AUDIO_SAMPLE_RATE = 48000; - - @Test - public void testAudioTrackLanguage() { - Context context = getTargetContext(); - assertEquals( - "Korean", Utils.getMultiAudioString(context, createAudioTrackInfo("kor"), false)); - assertEquals( - "English", Utils.getMultiAudioString(context, createAudioTrackInfo("eng"), false)); - assertEquals( - "Unknown language", - Utils.getMultiAudioString(context, createAudioTrackInfo(null), false)); - assertEquals( - "Unknown language", - Utils.getMultiAudioString(context, createAudioTrackInfo(""), false)); - assertEquals("abc", Utils.getMultiAudioString(context, createAudioTrackInfo("abc"), false)); - } - - @Test - public void testAudioTrackCount() { - Context context = getTargetContext(); - assertEquals( - "English", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", -1), false)); - assertEquals( - "English", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 0), false)); - assertEquals( - "English (mono)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 1), false)); - assertEquals( - "English (stereo)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 2), false)); - assertEquals( - "English (3 channels)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 3), false)); - assertEquals( - "English (4 channels)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 4), false)); - assertEquals( - "English (5 channels)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 5), false)); - assertEquals( - "English (5.1 surround)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 6), false)); - assertEquals( - "English (7 channels)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 7), false)); - assertEquals( - "English (7.1 surround)", - Utils.getMultiAudioString(context, createAudioTrackInfo("eng", 8), false)); - } - - @Test - public void testShowSampleRate() { - assertEquals( - "Korean (48kHz)", - Utils.getMultiAudioString( - getTargetContext(), createAudioTrackInfo("kor", 0), true)); - assertEquals( - "Korean (7.1 surround, 48kHz)", - Utils.getMultiAudioString( - getTargetContext(), createAudioTrackInfo("kor", 8), true)); - } - - private static TvTrackInfo createAudioTrackInfo(String language) { - return createAudioTrackInfo(language, 0); - } - - private static TvTrackInfo createAudioTrackInfo(String language, int channelCount) { - return new TvTrackInfo.Builder(TvTrackInfo.TYPE_AUDIO, TRACK_ID) - .setLanguage(language) - .setAudioChannelCount(channelCount) - .setAudioSampleRate(AUDIO_SAMPLE_RATE) - .build(); - } -} diff --git a/tests/unit/src/com/android/tv/util/UtilsTest_IsInGivenDay.java b/tests/unit/src/com/android/tv/util/UtilsTest_IsInGivenDay.java deleted file mode 100644 index cf0212cb..00000000 --- a/tests/unit/src/com/android/tv/util/UtilsTest_IsInGivenDay.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.util; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import android.support.test.filters.SmallTest; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.TimeZone; -import org.junit.Test; - -/** Tests for {@link com.android.tv.util.Utils#isInGivenDay}. */ -@SmallTest -public class UtilsTest_IsInGivenDay { - @Test - public void testIsInGivenDay() { - assertTrue( - Utils.isInGivenDay( - new GregorianCalendar(2015, Calendar.JANUARY, 1).getTimeInMillis(), - new GregorianCalendar(2015, Calendar.JANUARY, 1, 0, 30).getTimeInMillis())); - } - - @Test - public void testIsNotInGivenDay() { - assertFalse( - Utils.isInGivenDay( - new GregorianCalendar(2015, Calendar.JANUARY, 1).getTimeInMillis(), - new GregorianCalendar(2015, Calendar.JANUARY, 2).getTimeInMillis())); - } - - @Test - public void testIfTimeZoneApplied() { - TimeZone timeZone = TimeZone.getDefault(); - - TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); - - // 2015.01.01 00:00 in KST = 2014.12.31 15:00 in UTC - long date2015StartMs = new GregorianCalendar(2015, Calendar.JANUARY, 1).getTimeInMillis(); - - // 2015.01.01 10:00 in KST = 2015.01.01 01:00 in UTC - long date2015Start10AMMs = - new GregorianCalendar(2015, Calendar.JANUARY, 1, 10, 0).getTimeInMillis(); - - // Those two times aren't in the same day in UTC, but they are in KST. - assertTrue(Utils.isInGivenDay(date2015StartMs, date2015Start10AMMs)); - - TimeZone.setDefault(timeZone); - } -} |