aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/src/com/android/tv/dvr
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/src/com/android/tv/dvr')
-rw-r--r--tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java1
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java1
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java7
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java122
-rw-r--r--tests/unit/src/com/android/tv/dvr/EpisodicProgramLoadTaskTest.java76
-rw-r--r--tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java221
-rw-r--r--tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java166
-rw-r--r--tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java1
-rw-r--r--tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java (renamed from tests/unit/src/com/android/tv/dvr/SeriesRecordingTest.java)2
-rw-r--r--tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java (renamed from tests/unit/src/com/android/tv/dvr/DvrDbSyncTest.java)28
-rw-r--r--tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java76
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java (renamed from tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java)2
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java (renamed from tests/unit/src/com/android/tv/dvr/ScheduledProgramReaperTest.java)18
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java (renamed from tests/unit/src/com/android/tv/dvr/SchedulerTest.java)9
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java (renamed from tests/unit/src/com/android/tv/dvr/SeriesRecordingSchedulerTest.java)4
-rw-r--r--tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java47
16 files changed, 248 insertions, 533 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..6c1b1976 100644
--- a/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java
+++ b/tests/unit/src/com/android/tv/dvr/BaseDvrDataManagerTest.java
@@ -21,6 +21,7 @@ import android.support.test.filters.SmallTest;
import android.test.AndroidTestCase;
import android.test.MoreAsserts;
+import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.testing.FakeClock;
import com.android.tv.testing.dvr.RecordingTestUtils;
diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java
index b822f164..d142f432 100644
--- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java
+++ b/tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java
@@ -18,6 +18,7 @@ package com.android.tv.dvr;
import android.support.test.filters.SmallTest;
+import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.testing.dvr.RecordingTestUtils;
import junit.framework.TestCase;
diff --git a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java b/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java
index 85e35c4d..b2164dec 100644
--- a/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java
+++ b/tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java
@@ -24,7 +24,10 @@ 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;
@@ -37,7 +40,7 @@ import java.util.concurrent.atomic.AtomicLong;
/**
* A DVR Data manager that stores values in memory suitable for testing.
*/
-final class DvrDataManagerInMemoryImpl extends BaseDvrDataManager {
+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/DvrScheduleManagerTest.java b/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java
index 2850a5f7..cfb27211 100644
--- a/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java
+++ b/tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java
@@ -20,6 +20,8 @@ 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;
@@ -28,7 +30,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
/**
* Tests for {@link DvrScheduleManager}
@@ -586,49 +587,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/InputTaskSchedulerTest.java b/tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java
deleted file mode 100644
index 85c78ce2..00000000
--- a/tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java
+++ /dev/null
@@ -1,221 +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.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.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.Handler;
-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.data.Channel;
-import com.android.tv.data.ChannelDataManager;
-import com.android.tv.dvr.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.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Tests for {@link InputTaskScheduler}.
- */
-@SmallTest
-@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
-public class InputTaskSchedulerTest extends AndroidTestCase {
- 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;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- 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() {
- @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;
- }
- });
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
- public void testAddSchedule_past() throws Exception {
- 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));
- }
-
- public void testAddSchedule_start() throws Exception {
- 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();
- }
-
- public void testAddSchedule_consecutiveNoStop() throws Exception {
- 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.
- verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).never()).stop();
- }
-
- public void testAddSchedule_consecutiveNoFail() throws Exception {
- 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();
- verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).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())
- .changeState(any(ScheduledRecording.class),
- eq(ScheduledRecording.STATE_RECORDING_FAILED));
- }
-
- 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();
- verify(mRecordingTasks.get(0), after((int) LISTENER_TIMEOUT_MS).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 {
- 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();
- }
-
- public void testUpdateSchedule_cancel() throws Exception {
- 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/RecordingTaskTest.java b/tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java
deleted file mode 100644
index 7404a554..00000000
--- a/tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java
+++ /dev/null
@@ -1,166 +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.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;
-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.data.Channel;
-import com.android.tv.dvr.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.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.compat.ArgumentMatcher;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Tests for {@link RecordingTask}.
- */
-@SmallTest
-@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
-public class RecordingTaskTest extends AndroidTestCase {
- 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 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;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- if (Looper.myLooper() == null) {
- Looper.prepare();
- }
- MockitoAnnotations.initMocks(this);
- mFakeClock = FakeClock.createWithCurrentTime();
- mDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock);
- }
-
- 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();
- }
-
- 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 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;
- }
- };
- }
-}
diff --git a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java b/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java
index 96036418..426e60ba 100644
--- a/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java
+++ b/tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java
@@ -26,6 +26,7 @@ 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;
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..7512ed0e 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,7 @@
* limitations under the License
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.data;
import android.os.Build;
import android.os.Parcel;
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..9e96a7b8 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,9 @@
* limitations under the License
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.provider;
+import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
@@ -29,6 +30,11 @@ 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.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -47,20 +53,30 @@ 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();
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);
}
public void testHandleUpdateProgram_null() {
@@ -90,21 +106,21 @@ public class DvrDbSyncTest extends AndroidTestCase {
}
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);
}
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..301c453d
--- /dev/null
+++ b/tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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 android.os.Build;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.test.AndroidTestCase;
+
+import com.android.tv.dvr.data.SeasonEpisodeNumber;
+
+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<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)));
+ }
+
+ 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)));
+ }
+
+ 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/DvrRecordingServiceTest.java b/tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java
index 0a203ede..7ad8d55d 100644
--- a/tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java
+++ b/tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.recorder;
import static org.mockito.Mockito.verify;
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..d434a34e 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,20 @@
* limitations under the License.
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.recorder;
+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 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.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -31,7 +36,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 extends AndroidTestCase {
private static final String INPUT_ID = "input_id";
private static final int CHANNEL_ID = 273;
private static final long DURATION = TimeUnit.HOURS.toMillis(1);
@@ -41,13 +48,12 @@ public class ScheduledProgramReaperTest extends TestCase {
private DvrDataManagerInMemoryImpl mDvrDataManager;
@Mock private DvrManager mDvrManager;
-
@Override
protected void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
mFakeClock = FakeClock.createWithTimeOne();
- mDvrDataManager = new DvrDataManagerInMemoryImpl(null, mFakeClock);
+ mDvrDataManager = new DvrDataManagerInMemoryImpl(getContext(), mFakeClock);
mReaper = new ScheduledProgramReaper(mDvrDataManager, mFakeClock);
}
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..94cfaac1 100644
--- a/tests/unit/src/com/android/tv/dvr/SchedulerTest.java
+++ b/tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.recorder;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -31,6 +31,9 @@ import android.test.AndroidTestCase;
import com.android.tv.InputSessionManager;
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;
@@ -84,13 +87,13 @@ public class SchedulerTest extends AndroidTestCase {
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),
any(PendingIntent.class));
Mockito.reset(mMockAlarmManager);
mScheduler.update();
- verify(mMockAlarmManager).set(
+ verify(mMockAlarmManager).setExactAndAllowWhileIdle(
eq(AlarmManager.RTC_WAKEUP),
eq(startTime - Scheduler.MS_TO_WAKE_BEFORE_START),
any(PendingIntent.class));
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..afb9c042 100644
--- a/tests/unit/src/com/android/tv/dvr/SeriesRecordingSchedulerTest.java
+++ b/tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.tv.dvr;
+package com.android.tv.dvr.recorder;
import android.os.Build;
import android.support.test.filters.SdkSuppress;
@@ -24,6 +24,8 @@ import android.test.MoreAsserts;
import android.util.LongSparseArray;
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;
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..8fc8270f 100644
--- a/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java
+++ b/tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java
@@ -32,10 +32,10 @@ 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
@@ -111,6 +111,43 @@ 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);
+ }
+
+ 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);
}
public void testChange_sorting() {
@@ -194,7 +231,7 @@ public class SortedArrayAdapterTest extends TestCase {
}
@Override
- long getId(TestData item) {
+ protected long getId(TestData item) {
return item.mId;
}
}