diff options
Diffstat (limited to 'tests/unit/src/com/android/tv/dvr')
17 files changed, 705 insertions, 360 deletions
diff --git a/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java b/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java index 1292759e..5f0ae15c 100644 --- a/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java +++ b/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java @@ -16,35 +16,51 @@ 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.AndroidTestCase; 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 org.junit.After; +import org.junit.Before; +import org.junit.Test; + import java.util.List; import java.util.concurrent.TimeUnit; -/** - * Tests for {@link BaseDvrDataManager} using {@link DvrDataManagerInMemoryImpl}. - */ +/** Tests for {@link BaseDvrDataManager} using {@link DvrDataManagerInMemoryImpl}. */ @SmallTest -public class BaseDvrDataManagerTest extends AndroidTestCase { +@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; - @Override - protected void setUp() throws Exception { - super.setUp(); + @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()); @@ -52,6 +68,7 @@ public class BaseDvrDataManagerTest extends AndroidTestCase { MoreAsserts.assertContentsInAnyOrder(result, recording); } + @Test public void testGetNonStartedScheduledRecordings_past() { mDvrDataManager.addScheduledRecordingInternal(createNewScheduledRecordingStartingNow()); mFakeClock.increment(TimeUnit.MINUTES, 6); diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java index b822f164..9771a2e5 100644 --- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java +++ b/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java @@ -16,24 +16,29 @@ 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 junit.framework.TestCase; +import org.junit.Test; import java.util.ArrayList; import java.util.List; -/** - * Tests for {@link DvrDataManagerImpl} - */ +/** Tests for {@link DvrDataManagerImpl} */ @SmallTest -public class DvrDataManagerImplTest extends TestCase { +@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) +public class DvrDataManagerImplTest { private static final String INPUT_ID = "input_id"; private static final int CHANNEL_ID = 273; - public void testGetNextScheduledStartTimeAfter() throws Exception { + @Test + public void testGetNextScheduledStartTimeAfter() { long id = 1; List<ScheduledRecording> scheduledRecordings = new ArrayList<>(); assertNextStartTime(scheduledRecordings, 0L, DvrDataManager.NEXT_START_TIME_NOT_FOUND); diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java index 85e35c4d..0a7ab46c 100644 --- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java +++ b/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java @@ -17,14 +17,19 @@ 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.ScheduledRecording.RecordingState; +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; @@ -34,10 +39,9 @@ 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. - */ -final class DvrDataManagerInMemoryImpl extends BaseDvrDataManager { +/** 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 final static String TAG = "DvrDataManagerInMemory"; private final AtomicLong mNextId = new AtomicLong(1); private final Map<Long, ScheduledRecording> mScheduledRecordings = new HashMap<>(); diff --git a/tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java b/tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java deleted file mode 100644 index 0a203ede..00000000 --- a/tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java +++ /dev/null @@ -1,68 +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.mockito.Mockito.verify; - -import android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.ServiceTestCase; - -import com.android.tv.common.feature.CommonFeatures; -import com.android.tv.common.feature.TestableFeature; -import com.android.tv.testing.FakeClock; - -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; - -/** - * Tests for {@link DvrRecordingService}. - */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class DvrRecordingServiceTest extends ServiceTestCase<DvrRecordingService> { - @Mock Scheduler mMockScheduler; - private final TestableFeature mDvrFeature = CommonFeatures.DVR; - private final FakeClock mFakeClock = FakeClock.createWithCurrentTime(); - - @Override - protected void setUp() throws Exception { - super.setUp(); - mDvrFeature.enableForTest(); - MockitoAnnotations.initMocks(this); - setupService(); - DvrRecordingService service = getService(); - service.setScheduler(mMockScheduler); - } - - @Override - protected void tearDown() throws Exception { - mDvrFeature.resetForTests(); - super.tearDown(); - } - - public DvrRecordingServiceTest() { - super(DvrRecordingService.class); - } - - public void testStartService_null() throws Exception { - startService(null); - verify(mMockScheduler, Mockito.only()).update(); - } -}
\ No newline at end of file diff --git a/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java b/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java index 2850a5f7..1c77aa0e 100644 --- a/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java +++ b/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java @@ -16,32 +16,39 @@ 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 junit.framework.TestCase; +import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Map; -/** - * Tests for {@link DvrScheduleManager} - */ +/** Tests for {@link DvrScheduleManager} */ @SmallTest -public class DvrScheduleManagerTest extends TestCase { +@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; @@ -68,6 +75,7 @@ public class DvrScheduleManagerTest extends TestCase { MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); } + @Test public void testGetConflictingSchedules_noTuner() { long priority = 0; long channelId = 0; @@ -82,6 +90,7 @@ public class DvrScheduleManagerTest extends TestCase { assertEquals(schedules, DvrScheduleManager.getConflictingSchedules(schedules, 0)); } + @Test public void testGetConflictingSchedules_conflict() { long priority = 0; long channelId = 0; @@ -160,6 +169,7 @@ public class DvrScheduleManagerTest extends TestCase { MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); } + @Test public void testGetConflictingSchedules_conflict2() { // The case when there is a long schedule. long priority = 0; @@ -186,6 +196,7 @@ public class DvrScheduleManagerTest extends TestCase { MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); } + @Test public void testGetConflictingSchedules_reverseOrder() { long priority = 0; long channelId = 0; @@ -264,6 +275,7 @@ public class DvrScheduleManagerTest extends TestCase { MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); } + @Test public void testGetConflictingSchedules_period1() { long priority = 0; long channelId = 0; @@ -281,6 +293,7 @@ public class DvrScheduleManagerTest extends TestCase { Collections.singletonList(new Range<>(110L, 120L))), r1); } + @Test public void testGetConflictingSchedules_period2() { long priority = 0; long channelId = 0; @@ -298,6 +311,7 @@ public class DvrScheduleManagerTest extends TestCase { Collections.singletonList(new Range<>(110L, 120L))), r1); } + @Test public void testGetConflictingSchedules_period3() { long priority = 0; long channelId = 0; @@ -328,6 +342,7 @@ public class DvrScheduleManagerTest extends TestCase { ranges), r2, r1); } + @Test public void testGetConflictingSchedules_addSchedules1() { long priority = 0; long channelId = 0; @@ -351,6 +366,7 @@ public class DvrScheduleManagerTest extends TestCase { schedules, 1), r1); } + @Test public void testGetConflictingSchedules_addSchedules2() { long priority = 0; long channelId = 0; @@ -374,6 +390,7 @@ public class DvrScheduleManagerTest extends TestCase { schedules, 1), r2, r1); } + @Test public void testGetConflictingSchedules_addLowestPriority() { long priority = 0; long channelId = 0; @@ -394,6 +411,7 @@ public class DvrScheduleManagerTest extends TestCase { schedules, 1), r1); } + @Test public void testGetConflictingSchedules_sameChannel() { long priority = 0; long channelId = 1; @@ -405,6 +423,7 @@ public class DvrScheduleManagerTest extends TestCase { MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); } + @Test public void testGetConflictingSchedule_startEarlyAndFail() { long priority = 0; long channelId = 0; @@ -423,6 +442,7 @@ public class DvrScheduleManagerTest extends TestCase { r2); } + @Test public void testGetConflictingSchedule_startLate() { long priority = 0; long channelId = 0; @@ -441,6 +461,7 @@ public class DvrScheduleManagerTest extends TestCase { r2, r1); } + @Test public void testGetConflictingSchedulesForTune_canTune() { // Can tune to the recorded channel if tuner count is 1. long priority = 0; @@ -452,6 +473,7 @@ public class DvrScheduleManagerTest extends TestCase { 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; @@ -463,6 +485,7 @@ public class DvrScheduleManagerTest extends TestCase { 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; @@ -481,6 +504,7 @@ public class DvrScheduleManagerTest extends TestCase { INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), r1); } + @Test public void testGetConflictingSchedulesForWatching_sameChannel1() { long priority = 0; long channelToWatch = 1; @@ -498,6 +522,7 @@ public class DvrScheduleManagerTest extends TestCase { INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r2); } + @Test public void testGetConflictingSchedulesForWatching_sameChannel2() { long priority = 0; long channelToWatch = 1; @@ -515,6 +540,7 @@ public class DvrScheduleManagerTest extends TestCase { INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r1); } + @Test public void testGetConflictingSchedulesForWatching_sameChannelConflict1() { long priority = 0; long channelToWatch = 1; @@ -537,6 +563,7 @@ public class DvrScheduleManagerTest extends TestCase { INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r2, r1); } + @Test public void testGetConflictingSchedulesForWatching_sameChannelConflict2() { long priority = 0; long channelToWatch = 1; @@ -559,6 +586,7 @@ public class DvrScheduleManagerTest extends TestCase { INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r3, r1); } + @Test public void testPartiallyConflictingSchedules() { long priority = 100; long channelId = 0; @@ -586,49 +614,80 @@ public class DvrScheduleManagerTest extends TestCase { RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, --priority, 50L, 900L) )); - Map<ScheduledRecording, Boolean> conflictsInfo = DvrScheduleManager - .getConflictingSchedulesInfo(schedules, 1); - - assertNull(conflictsInfo.get(schedules.get(0))); - assertFalse(conflictsInfo.get(schedules.get(1))); - assertTrue(conflictsInfo.get(schedules.get(2))); - assertTrue(conflictsInfo.get(schedules.get(3))); - assertNull(conflictsInfo.get(schedules.get(4))); - assertTrue(conflictsInfo.get(schedules.get(5))); - assertNull(conflictsInfo.get(schedules.get(6))); - assertFalse(conflictsInfo.get(schedules.get(7))); - assertFalse(conflictsInfo.get(schedules.get(8))); - assertFalse(conflictsInfo.get(schedules.get(9))); - assertFalse(conflictsInfo.get(schedules.get(10))); - - conflictsInfo = DvrScheduleManager - .getConflictingSchedulesInfo(schedules, 2); - - assertNull(conflictsInfo.get(schedules.get(0))); - assertNull(conflictsInfo.get(schedules.get(1))); - assertNull(conflictsInfo.get(schedules.get(2))); - assertNull(conflictsInfo.get(schedules.get(3))); - assertNull(conflictsInfo.get(schedules.get(4))); - assertNull(conflictsInfo.get(schedules.get(5))); - assertNull(conflictsInfo.get(schedules.get(6))); - assertFalse(conflictsInfo.get(schedules.get(7))); - assertFalse(conflictsInfo.get(schedules.get(8))); - assertFalse(conflictsInfo.get(schedules.get(9))); - assertTrue(conflictsInfo.get(schedules.get(10))); - - conflictsInfo = DvrScheduleManager - .getConflictingSchedulesInfo(schedules, 3); - - assertNull(conflictsInfo.get(schedules.get(0))); - assertNull(conflictsInfo.get(schedules.get(1))); - assertNull(conflictsInfo.get(schedules.get(2))); - assertNull(conflictsInfo.get(schedules.get(3))); - assertNull(conflictsInfo.get(schedules.get(4))); - assertNull(conflictsInfo.get(schedules.get(5))); - assertNull(conflictsInfo.get(schedules.get(6))); - assertNull(conflictsInfo.get(schedules.get(7))); - assertTrue(conflictsInfo.get(schedules.get(8))); - assertNull(conflictsInfo.get(schedules.get(9))); - assertTrue(conflictsInfo.get(schedules.get(10))); + 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"); } }
\ No newline at end of file diff --git a/tests/unit/src/com/android/tv/dvr/EpisodicProgramLoadTaskTest.java b/tests/unit/src/com/android/tv/dvr/EpisodicProgramLoadTaskTest.java deleted file mode 100644 index 2172d488..00000000 --- a/tests/unit/src/com/android/tv/dvr/EpisodicProgramLoadTaskTest.java +++ /dev/null @@ -1,76 +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 android.os.Build; -import android.support.test.filters.SdkSuppress; -import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; - -import com.android.tv.dvr.EpisodicProgramLoadTask.ScheduledEpisode; - -import java.util.ArrayList; -import java.util.List; - -/** - * Tests for {@link EpisodicProgramLoadTask} - */ -@SmallTest -@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class EpisodicProgramLoadTaskTest extends AndroidTestCase { - 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"; - - public void testEpisodeAlreadyScheduled_true() { - List<ScheduledEpisode> episodes = new ArrayList<>(); - ScheduledEpisode episode = new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, - EPISODE_NUMBER1); - episodes.add(episode); - assertTrue(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER1))); - } - - public void testEpisodeAlreadyScheduled_false() { - List<ScheduledEpisode> episodes = new ArrayList<>(); - ScheduledEpisode episode = new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, - EPISODE_NUMBER1); - episodes.add(episode); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID2, SEASON_NUMBER1, EPISODE_NUMBER1))); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER2, EPISODE_NUMBER1))); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, EPISODE_NUMBER2))); - } - - public void testEpisodeAlreadyScheduled_null() { - List<ScheduledEpisode> episodes = new ArrayList<>(); - ScheduledEpisode episode = new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, - EPISODE_NUMBER1); - episodes.add(episode); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, null, EPISODE_NUMBER1))); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, SEASON_NUMBER1, null))); - assertFalse(EpisodicProgramLoadTask.isEpisodeScheduled(episodes, - new ScheduledEpisode(SERIES_RECORDING_ID1, null, null))); - } -} diff --git a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java b/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java index 96036418..b98af603 100644 --- a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java +++ b/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java @@ -16,34 +16,37 @@ package com.android.tv.dvr; -import static com.android.tv.testing.dvr.RecordingTestUtils - .createTestRecordingWithIdAndPeriod; +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 junit.framework.TestCase; +import org.junit.Test; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; -/** - * Tests for {@link ScheduledRecordingTest} - */ +/** Tests for {@link ScheduledRecordingTest} */ @SmallTest -public class ScheduledRecordingTest extends TestCase { +@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) +public class ScheduledRecordingTest { private static final String INPUT_ID = "input_id"; private static final int CHANNEL_ID = 273; - public void testIsOverLapping() throws Exception { + @Test + public void testIsOverLapping() { ScheduledRecording r = createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L); assertOverLapping(false, 1L, 9L, r); @@ -59,6 +62,7 @@ public class ScheduledRecordingTest extends TestCase { assertOverLapping(false, 21L, 29L, r); } + @Test public void testBuildProgram() { Channel c = new Channel.Builder().build(); Program p = new Program.Builder().build(); @@ -67,12 +71,14 @@ public class ScheduledRecordingTest extends TestCase { 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); @@ -80,6 +86,7 @@ public class ScheduledRecordingTest extends TestCase { RecordingTestUtils.assertRecordingEquals(expected, actual); } + @Test public void testBuild_priority() { ScheduledRecording a = normalizePriority( createTestRecordingWithIdAndPeriod(1, INPUT_ID, CHANNEL_ID, 10L, 20L)); diff --git a/tests/unit/src/com/android/tv/dvr/SeriesRecordingTest.java b/tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java index c48fec02..790b2ee8 100644 --- a/tests/unit/src/com/android/tv/dvr/SeriesRecordingTest.java +++ b/tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java @@ -14,7 +14,9 @@ * limitations under the License */ -package com.android.tv.dvr; +package com.android.tv.dvr.data; + +import static org.junit.Assert.assertEquals; import android.os.Build; import android.os.Parcel; @@ -23,14 +25,14 @@ import android.support.test.filters.SmallTest; import com.android.tv.data.Program; -import junit.framework.TestCase; +import org.junit.Test; /** * Tests for {@link SeriesRecording}. */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SeriesRecordingTest extends TestCase { +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; @@ -46,7 +48,8 @@ public class SeriesRecordingTest extends TestCase { private final Program mBaseProgram = new Program.Builder().setTitle(PROGRAM_TITLE) .setChannelId(CHANNEL_ID).setSeriesId(SERIES_ID).build(); - public void testParcelable() throws Exception { + @Test + public void testParcelable() { SeriesRecording r1 = new SeriesRecording.Builder() .setId(1) .setChannelId(2) @@ -77,20 +80,24 @@ public class SeriesRecordingTest extends TestCase { } } + @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); @@ -102,6 +109,7 @@ public class SeriesRecordingTest extends TestCase { assertDoesProgramMatch(program, mSeriesRecordingSeason2, true); } + @Test public void testDoesProgramMatch_startFromSeason2episode5() { Program program = mBaseProgram; assertDoesProgramMatch(program, mSeriesRecordingSeason2Episode5, true); diff --git a/tests/unit/src/com/android/tv/dvr/DvrDbSyncTest.java b/tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java index 7cb3721c..94f88a51 100644 --- a/tests/unit/src/com/android/tv/dvr/DvrDbSyncTest.java +++ b/tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java @@ -14,8 +14,10 @@ * limitations under the License */ -package com.android.tv.dvr; +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; @@ -25,20 +27,26 @@ import static org.mockito.Mockito.when; import android.os.Build; import android.support.test.filters.SdkSuppress; import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; 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 DvrScheduleManager} + * Tests for {@link com.android.tv.dvr.DvrScheduleManager} */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class DvrDbSyncTest extends AndroidTestCase { +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; @@ -47,28 +55,39 @@ public class DvrDbSyncTest extends AndroidTestCase { 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; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() { MockitoAnnotations.initMocks(this); when(mChannelDataManager.isDbLoadFinished()).thenReturn(true); - mDbSync = new DvrDbSync(getContext(), mDataManager, mChannelDataManager); + 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; @@ -79,6 +98,7 @@ public class DvrDbSyncTest extends AndroidTestCase { assertUpdateScheduleCalled(program); } + @Test public void testHandleUpdateProgram_changeTimeInProgressNotCalled() { addSchedule(BASE_PROGRAM_ID, ScheduledRecording.buildFrom(BASE_SCHEDULE) .setState(ScheduledRecording.STATE_RECORDING_IN_PROGRESS).build()); @@ -89,22 +109,24 @@ public class DvrDbSyncTest extends AndroidTestCase { verify(mDataManager, never()).updateScheduledRecording(anyObject()); } + @Test public void testHandleUpdateProgram_changeSeason() { - addSchedule(BASE_PROGRAM_ID, BASE_SCHEDULE); + 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_PROGRAM).setSeasonNumber(seasonNumber) + 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_SCHEDULE) + 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_PROGRAM).setSeasonNumber(seasonNumber) + Program program = new Program.Builder(BASE_SERIES_PROGRAM).setSeasonNumber(seasonNumber) .setEpisodeNumber(episodeNumber).build(); mDbSync.handleUpdateProgram(program, BASE_PROGRAM_ID); verify(mDataManager, never()).updateScheduledRecording(anyObject()); diff --git a/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java b/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java new file mode 100644 index 00000000..216d4d5b --- /dev/null +++ b/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java @@ -0,0 +1,83 @@ +/* + * 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 org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * 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))); + } +}
\ No newline at end of file diff --git a/tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java b/tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java new file mode 100644 index 00000000..8f7dcaf2 --- /dev/null +++ b/tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java @@ -0,0 +1,183 @@ +/* + * 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 org.mockito.Mockito.verify; + +import android.content.Intent; +import android.os.Build; +import android.support.test.filters.SdkSuppress; +import android.support.test.filters.SmallTest; +import android.test.ServiceTestCase; + +import com.android.tv.common.feature.CommonFeatures; +import com.android.tv.common.feature.TestableFeature; + +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +/** + * Tests for {@link DvrRecordingService}. + */ +@SmallTest +@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) +public class DvrRecordingServiceTest + extends ServiceTestCase<DvrRecordingServiceTest.MockDvrRecordingService> { + private final TestableFeature mDvrFeature = CommonFeatures.DVR; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mDvrFeature.enableForTest(); + MockitoAnnotations.initMocks(this); + setupService(); + } + + @Override + protected void tearDown() throws Exception { + mDvrFeature.resetForTests(); + super.tearDown(); + } + + public DvrRecordingServiceTest() { + super(MockDvrRecordingService.class); + } + + public void testStartService_null() throws Exception { + // Not recording + startService(null); + assertFalse(getService().mInForeground); + + // Recording + getService().startRecording(); + startService(null); + assertTrue(getService().mInForeground); + assertTrue(getService().mIsRecording); + getService().reset(); + } + + public void testStartService_noUpcomingRecording() throws Exception { + Intent intent = new Intent(getContext(), DvrRecordingServiceTest.class); + intent.putExtra(DvrRecordingService.EXTRA_START_FOR_RECORDING, false); + + // Not recording + startService(intent); + assertTrue(getService().mInForeground); + assertFalse(getService().mForegroundForUpcomingRecording); + getService().stopForegroundIfNotRecordingInternal(); + assertFalse(getService().mInForeground); + + // Recording, ended quickly + getService().startRecording(); + startService(intent); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopRecording(); + assertFalse(getService().mInForeground); + assertFalse(getService().mIsRecording); + getService().stopForegroundIfNotRecordingInternal(); + assertFalse(getService().mInForeground); + assertFalse(getService().mIsRecording); + getService().reset(); + + // Recording, ended later + getService().startRecording(); + startService(intent); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopForegroundIfNotRecordingInternal(); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopRecording(); + assertFalse(getService().mInForeground); + assertFalse(getService().mIsRecording); + getService().reset(); + } + + public void testStartService_hasUpcomingRecording() throws Exception { + Intent intent = new Intent(getContext(), DvrRecordingServiceTest.class); + intent.putExtra(DvrRecordingService.EXTRA_START_FOR_RECORDING, true); + + // Not recording + startService(intent); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertFalse(getService().mIsRecording); + getService().startRecording(); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopRecording(); + assertFalse(getService().mInForeground); + assertFalse(getService().mIsRecording); + getService().reset(); + + // Recording + getService().startRecording(); + startService(intent); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().startRecording(); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopRecording(); + assertTrue(getService().mInForeground); + assertTrue(getService().mForegroundForUpcomingRecording); + assertTrue(getService().mIsRecording); + getService().stopRecording(); + assertFalse(getService().mInForeground); + assertFalse(getService().mIsRecording); + getService().reset(); + } + + public static class MockDvrRecordingService extends DvrRecordingService { + private int mRecordingCount = 0; + private boolean mInForeground; + private boolean mForegroundForUpcomingRecording; + + @Override + protected void startForegroundInternal(boolean hasUpcomingRecording) { + mForegroundForUpcomingRecording = hasUpcomingRecording; + mInForeground = true; + } + + @Override + protected void stopForegroundInternal() { + mInForeground = false; + } + + private void startRecording() { + mOnRecordingSessionChangeListener.onRecordingSessionChange(true, ++mRecordingCount); + } + + private void stopRecording() { + mOnRecordingSessionChangeListener.onRecordingSessionChange(false, --mRecordingCount); + } + + private void reset() { + mRecordingCount = 0; + mInForeground = false; + mIsRecording = false; + } + } +}
\ No newline at end of file diff --git a/tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java index 85c78ce2..e5c27e2c 100644 --- a/tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java +++ b/tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java @@ -14,13 +14,15 @@ * limitations under the License */ -package com.android.tv.dvr; +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.after; 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; @@ -28,21 +30,25 @@ import static org.mockito.Mockito.when; import android.app.AlarmManager; import android.media.tv.TvInputInfo; import android.os.Build; -import android.os.Handler; import android.os.Looper; +import android.os.SystemClock; import android.support.test.filters.SdkSuppress; import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; import com.android.tv.InputSessionManager; import com.android.tv.data.Channel; import com.android.tv.data.ChannelDataManager; -import com.android.tv.dvr.InputTaskScheduler.RecordingTaskFactory; +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 org.junit.Before; +import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -55,7 +61,7 @@ import java.util.concurrent.TimeUnit; */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class InputTaskSchedulerTest extends AndroidTestCase { +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); @@ -73,21 +79,18 @@ public class InputTaskSchedulerTest extends AndroidTestCase { @Mock private ChannelDataManager mChannelDataManager; private List<RecordingTask> mRecordingTasks; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { if (Looper.myLooper() == null) { Looper.prepare(); } - Handler fakeMainHandler = new Handler(); - Handler workerThreadHandler = new Handler(); 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, - fakeMainHandler, workerThreadHandler, new RecordingTaskFactory() { + new RecordingTaskFactory() { @Override public RecordingTask createRecordingTask(ScheduledRecording scheduledRecording, Channel channel, DvrManager dvrManager, @@ -102,12 +105,8 @@ public class InputTaskSchedulerTest extends AndroidTestCase { }); } - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testAddSchedule_past() throws Exception { + @Test + public void testAddSchedule_past() { ScheduledRecording r = RecordingTestUtils.createTestRecordingWithPeriod(INPUT_ID, CHANNEL_ID, 0L, 1L); when(mDataManager.getScheduledRecording(anyLong())).thenReturn(r); @@ -118,7 +117,8 @@ public class InputTaskSchedulerTest extends AndroidTestCase { eq(ScheduledRecording.STATE_RECORDING_FAILED)); } - public void testAddSchedule_start() throws Exception { + @Test + public void testAddSchedule_start() { mScheduler.handleAddSchedule(RecordingTestUtils.createTestRecordingWithPeriod(INPUT_ID, CHANNEL_ID, mFakeClock.currentTimeMillis(), mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(1))); @@ -126,7 +126,8 @@ public class InputTaskSchedulerTest extends AndroidTestCase { verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); } - public void testAddSchedule_consecutiveNoStop() throws Exception { + @Test + public void testAddSchedule_consecutiveNoStop() { long startTimeMs = mFakeClock.currentTimeMillis(); long endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); long id = 0; @@ -143,10 +144,12 @@ public class InputTaskSchedulerTest extends AndroidTestCase { 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. - verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).never()).stop(); + SystemClock.sleep(LISTENER_TIMEOUT_MS); + verify(mRecordingTasks.get(0), never()).stop(); } - public void testAddSchedule_consecutiveNoFail() throws Exception { + @Test + public void testAddSchedule_consecutiveNoFail() { long startTimeMs = mFakeClock.currentTimeMillis(); long endTimeMs = startTimeMs + TimeUnit.SECONDS.toMillis(1); long id = 0; @@ -163,13 +166,16 @@ public class InputTaskSchedulerTest extends AndroidTestCase { LOW_PRIORITY, startTimeMs, endTimeMs)); mScheduler.handleBuildSchedule(); verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).never()).stop(); + 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. - verify(mDataManager, after((int) LISTENER_TIMEOUT_MS).never()) + 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); @@ -187,23 +193,27 @@ public class InputTaskSchedulerTest extends AndroidTestCase { HIGH_PRIORITY, startTimeMs, endTimeMs)); mScheduler.handleBuildSchedule(); verify(mRecordingTasks.get(0), timeout((int) LISTENER_TIMEOUT_MS).times(1)).start(); - verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).never()).stop(); + 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); } - public void testUpdateSchedule_noCancel() throws Exception { + @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); - verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).never()).cancel(); + SystemClock.sleep(LISTENER_TIMEOUT_MS); + verify(mRecordingTasks.get(0), never()).cancel(); } - public void testUpdateSchedule_cancel() throws Exception { + @Test + public void testUpdateSchedule_cancel() { ScheduledRecording r = RecordingTestUtils.createTestRecordingWithPeriod(INPUT_ID, CHANNEL_ID, mFakeClock.currentTimeMillis(), mFakeClock.currentTimeMillis() + TimeUnit.HOURS.toMillis(2)); diff --git a/tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java b/tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java index 7404a554..37561a42 100644 --- a/tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java +++ b/tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java @@ -14,17 +14,18 @@ * limitations under the License */ -package com.android.tv.dvr; +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.argThat; 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 static org.mockito.hamcrest.MockitoHamcrest.longThat; import android.os.Build; import android.os.Handler; @@ -32,20 +33,24 @@ import android.os.Looper; import android.os.Message; import android.support.test.filters.SdkSuppress; import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; 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.RecordingTask.State; +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 org.hamcrest.BaseMatcher; -import org.hamcrest.Description; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.mockito.compat.ArgumentMatcher; import java.util.concurrent.TimeUnit; @@ -54,9 +59,9 @@ import java.util.concurrent.TimeUnit; */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class RecordingTaskTest extends AndroidTestCase { +public class RecordingTaskTest { private static final long DURATION = TimeUnit.MINUTES.toMillis(30); - private static final long START_OFFSET_MS = Scheduler.MS_TO_WAKE_BEFORE_START; + 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; @@ -66,10 +71,11 @@ public class RecordingTaskTest extends AndroidTestCase { @Mock DvrManager mDvrManager; @Mock InputSessionManager mMockSessionManager; @Mock RecordingSession mMockRecordingSession; + private final TestableFeature mDvrFeature = CommonFeatures.DVR; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() { + mDvrFeature.enableForTest(); if (Looper.myLooper() == null) { Looper.prepare(); } @@ -78,6 +84,12 @@ public class RecordingTaskTest extends AndroidTestCase { mDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); } + @After + public void tearDown() { + mDvrFeature.resetForTests(); + } + + @Test public void testHandle_init() { Channel channel = createTestChannel(); ScheduledRecording r = createRecording(channel); @@ -99,6 +111,7 @@ public class RecordingTaskTest extends AndroidTestCase { .setDisplayName("Test Ch " + CHANNEL_ID).build(); } + @Test public void testOnConnected() { Channel channel = createTestChannel(); ScheduledRecording r = createRecording(channel); @@ -127,40 +140,10 @@ public class RecordingTaskTest extends AndroidTestCase { return recordingTask; } - private void verifySendMessageAt(int what, long when) { - verify(mMockHandler).sendMessageAtTime(argThat(messageMatchesWhat(what)), delta(when, 100)); - } - - private static long delta(final long value, final long delta) { - return longThat(new BaseMatcher<Long>() { - @Override - public boolean matches(Object item) { - Long other = (Long) item; - return other >= value - delta && other <= value + delta; - } - - @Override - public void describeTo(Description description) { - description.appendText("eq " + value + "±" + delta); - - } - }); - } - private Message createMessage(int what) { Message msg = new Message(); msg.setTarget(mMockHandler); msg.what = what; return msg; } - - private static ArgumentMatcher<Message> messageMatchesWhat(final int what) { - return new ArgumentMatcher<Message>() { - @Override - public boolean matchesObject(Object argument) { - Message message = (Message) argument; - return message.what == what; - } - }; - } -} +}
\ No newline at end of file diff --git a/tests/unit/src/com/android/tv/dvr/ScheduledProgramReaperTest.java b/tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java index 847540c2..ca72e13f 100644 --- a/tests/unit/src/com/android/tv/dvr/ScheduledProgramReaperTest.java +++ b/tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java @@ -14,15 +14,27 @@ * limitations under the License. */ -package com.android.tv.dvr; +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 junit.framework.TestCase; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -31,7 +43,9 @@ import java.util.concurrent.TimeUnit; /** * Tests for {@link ScheduledProgramReaper}. */ -public class ScheduledProgramReaperTest extends TestCase { +@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); @@ -40,23 +54,30 @@ public class ScheduledProgramReaperTest extends TestCase { private FakeClock mFakeClock; private DvrDataManagerInMemoryImpl mDvrDataManager; @Mock private DvrManager mDvrManager; + private final TestableFeature mDvrFeature = CommonFeatures.DVR; - - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() { MockitoAnnotations.initMocks(this); + mDvrFeature.enableForTest(); mFakeClock = FakeClock.createWithTimeOne(); - mDvrDataManager = new DvrDataManagerInMemoryImpl(null, mFakeClock); + mDvrDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); mReaper = new ScheduledProgramReaper(mDvrDataManager, mFakeClock); } + @After + public void tearDown() { + mDvrFeature.resetForTests(); + } + + @Test public void testRun_noRecordings() { - MoreAsserts.assertContentsInAnyOrder(mDvrDataManager.getAllScheduledRecordings()); + assertTrue(mDvrDataManager.getAllScheduledRecordings().isEmpty()); mReaper.run(); - MoreAsserts.assertContentsInAnyOrder(mDvrDataManager.getAllScheduledRecordings()); + assertTrue(mDvrDataManager.getAllScheduledRecordings().isEmpty()); } + @Test public void testRun_oneRecordingsTomorrow() { ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); MoreAsserts @@ -66,6 +87,7 @@ public class ScheduledProgramReaperTest extends TestCase { .assertContentsInAnyOrder(mDvrDataManager.getAllScheduledRecordings(), recording); } + @Test public void testRun_oneRecordingsStarted() { ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); MoreAsserts @@ -76,6 +98,7 @@ public class ScheduledProgramReaperTest extends TestCase { .assertContentsInAnyOrder(mDvrDataManager.getAllScheduledRecordings(), recording); } + @Test public void testRun_oneRecordingsFinished() { ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); MoreAsserts @@ -87,6 +110,7 @@ public class ScheduledProgramReaperTest extends TestCase { .assertContentsInAnyOrder(mDvrDataManager.getAllScheduledRecordings(), recording); } + @Test public void testRun_oneRecordingsExpired() { ScheduledRecording recording = addNewScheduledRecordingForTomorrow(); MoreAsserts @@ -97,10 +121,9 @@ public class ScheduledProgramReaperTest extends TestCase { mFakeClock.increment(TimeUnit.SECONDS, 1); mReaper.run(); - MoreAsserts.assertContentsInAnyOrder( - "Recordings after reaper at " + com.android.tv.util.Utils + assertTrue("Recordings after reaper at " + com.android.tv.util.Utils .toIsoDateTimeString(mFakeClock.currentTimeMillis()), - mDvrDataManager.getAllScheduledRecordings()); + mDvrDataManager.getAllScheduledRecordings().isEmpty()); } private ScheduledRecording addNewScheduledRecordingForTomorrow() { diff --git a/tests/unit/src/com/android/tv/dvr/SchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java index 30ac1ff1..a5154729 100644 --- a/tests/unit/src/com/android/tv/dvr/SchedulerTest.java +++ b/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java @@ -14,8 +14,11 @@ * limitations under the License */ -package com.android.tv.dvr; +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; @@ -27,14 +30,21 @@ import android.os.Build; import android.os.Looper; import android.support.test.filters.SdkSuppress; import android.support.test.filters.SmallTest; -import android.test.AndroidTestCase; 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 org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -42,61 +52,69 @@ import org.mockito.MockitoAnnotations; import java.util.concurrent.TimeUnit; /** - * Tests for {@link Scheduler}. + * Tests for {@link RecordingScheduler}. */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SchedulerTest extends AndroidTestCase { +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 Scheduler mScheduler; + private RecordingScheduler mScheduler; @Mock DvrManager mDvrManager; @Mock InputSessionManager mSessionManager; @Mock AlarmManager mMockAlarmManager; @Mock ChannelDataManager mChannelDataManager; @Mock TvInputManagerHelper mInputManager; + private final TestableFeature mDvrFeature = CommonFeatures.DVR; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() { MockitoAnnotations.initMocks(this); + mDvrFeature.enableForTest(); mFakeClock = FakeClock.createWithCurrentTime(); - mDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock); + mDataManager = new DvrDataManagerInMemoryImpl(getTargetContext(), mFakeClock); Mockito.when(mChannelDataManager.isDbLoadFinished()).thenReturn(true); - mScheduler = new Scheduler(Looper.myLooper(), mDvrManager, mSessionManager, mDataManager, - mChannelDataManager, mInputManager, getContext(), mFakeClock, mMockAlarmManager); + mScheduler = new RecordingScheduler(Looper.myLooper(), mDvrManager, mSessionManager, mDataManager, + mChannelDataManager, mInputManager, getTargetContext(), mFakeClock, + mMockAlarmManager); } - public void testUpdate_none() throws Exception { - mScheduler.start(); - mScheduler.update(); + @After + public void tearDown() { + mDvrFeature.resetForTests(); + } + + @Test + public void testUpdate_none() { + mScheduler.updateAndStartServiceIfNeeded(); verifyZeroInteractions(mMockAlarmManager); } - public void testUpdate_nextIn12Hours() throws Exception { + @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); - mScheduler.start(); - verify(mMockAlarmManager).set( + verify(mMockAlarmManager).setExactAndAllowWhileIdle( eq(AlarmManager.RTC_WAKEUP), - eq(startTime - Scheduler.MS_TO_WAKE_BEFORE_START), + eq(startTime - RecordingScheduler.MS_TO_WAKE_BEFORE_START), any(PendingIntent.class)); Mockito.reset(mMockAlarmManager); - mScheduler.update(); - verify(mMockAlarmManager).set( + mScheduler.updateAndStartServiceIfNeeded(); + verify(mMockAlarmManager).setExactAndAllowWhileIdle( eq(AlarmManager.RTC_WAKEUP), - eq(startTime - Scheduler.MS_TO_WAKE_BEFORE_START), + eq(startTime - RecordingScheduler.MS_TO_WAKE_BEFORE_START), any(PendingIntent.class)); } - public void testStartsWithin() throws Exception { + @Test + public void testStartsWithin() { long now = mFakeClock.currentTimeMillis(); long startTime = now + 3; ScheduledRecording r = RecordingTestUtils diff --git a/tests/unit/src/com/android/tv/dvr/SeriesRecordingSchedulerTest.java b/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java index efefb93c..16fa1baf 100644 --- a/tests/unit/src/com/android/tv/dvr/SeriesRecordingSchedulerTest.java +++ b/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java @@ -14,18 +14,27 @@ * limitations under the License. */ -package com.android.tv.dvr; +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.AndroidTestCase; 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 org.junit.After; +import org.junit.Before; +import org.junit.Test; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -35,7 +44,7 @@ import java.util.List; */ @SmallTest @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N) -public class SeriesRecordingSchedulerTest extends AndroidTestCase { +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; @@ -49,16 +58,23 @@ public class SeriesRecordingSchedulerTest extends AndroidTestCase { .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; - @Override - protected void setUp() throws Exception { - super.setUp(); + @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(); @@ -75,6 +91,7 @@ public class SeriesRecordingSchedulerTest extends AndroidTestCase { MoreAsserts.assertContentsInAnyOrder(result.get(SERIES_RECORDING_ID1), program1, program2); } + @Test public void testPickOneProgramPerEpisode_manyPerEpisode() { SeriesRecording seriesRecording = SeriesRecording.buildFrom(mBaseSeriesRecording) .setId(SERIES_RECORDING_ID1).build(); @@ -95,6 +112,7 @@ public class SeriesRecordingSchedulerTest extends AndroidTestCase { MoreAsserts.assertContentsInAnyOrder(result.get(SERIES_RECORDING_ID1), program1, program3); } + @Test public void testPickOneProgramPerEpisode_nullEpisode() { SeriesRecording seriesRecording = SeriesRecording.buildFrom(mBaseSeriesRecording) .setId(SERIES_RECORDING_ID1).build(); diff --git a/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java b/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java index a571e626..5667ee6b 100644 --- a/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java +++ b/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java @@ -22,6 +22,9 @@ import android.support.v17.leanback.widget.ObjectAdapter; import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; + import java.util.Arrays; import java.util.Comparator; import java.util.Objects; @@ -31,29 +34,30 @@ import java.util.Objects; */ @SmallTest public class SortedArrayAdapterTest extends TestCase { - - public static final TestData P1 = TestData.create(1, "one"); - public static final TestData P2 = TestData.create(2, "before"); - public static final TestData P3 = TestData.create(3, "other"); - public static final TestData EXTRA = TestData.create(4, "extra"); + 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; - @Override - protected void setUp() throws Exception { - super.setUp(); + @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); @@ -61,12 +65,14 @@ public class SortedArrayAdapterTest extends TestCase { 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)); @@ -75,6 +81,7 @@ public class SortedArrayAdapterTest extends TestCase { assertEquals(mAdapter.get(0), P2); } + @Test public void testExtraItem() { mAdapter = new TestSortedArrayAdapter(Integer.MAX_VALUE, EXTRA); mAdapter.setInitialItems(Arrays.asList(P1, P2)); @@ -88,6 +95,7 @@ public class SortedArrayAdapterTest extends TestCase { assertEquals(mAdapter.get(0), EXTRA); } + @Test public void testExtraItemWithMaxCount() { mAdapter = new TestSortedArrayAdapter(1, EXTRA); mAdapter.setInitialItems(Arrays.asList(P1, P2)); @@ -100,6 +108,7 @@ public class SortedArrayAdapterTest extends TestCase { assertEquals(mAdapter.get(0), EXTRA); } + @Test public void testRemove() { mAdapter.add(P1); mAdapter.add(P2); @@ -111,8 +120,47 @@ public class SortedArrayAdapterTest extends TestCase { 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); @@ -123,6 +171,7 @@ public class SortedArrayAdapterTest extends TestCase { assertContentsInOrder(mAdapter, P1, p2_changed); } + @Test public void testChange_new() { mAdapter.change(P1); assertNotEmpty(); @@ -194,7 +243,7 @@ public class SortedArrayAdapterTest extends TestCase { } @Override - long getId(TestData item) { + protected long getId(TestData item) { return item.mId; } } |