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.java33
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrDataManagerImplTest.java17
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrDataManagerInMemoryImpl.java14
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrRecordingServiceTest.java68
-rw-r--r--tests/unit/src/com/android/tv/dvr/DvrScheduleManagerTest.java159
-rw-r--r--tests/unit/src/com/android/tv/dvr/EpisodicProgramLoadTaskTest.java76
-rw-r--r--tests/unit/src/com/android/tv/dvr/ScheduledRecordingTest.java23
-rw-r--r--tests/unit/src/com/android/tv/dvr/data/SeriesRecordingTest.java (renamed from tests/unit/src/com/android/tv/dvr/SeriesRecordingTest.java)16
-rw-r--r--tests/unit/src/com/android/tv/dvr/provider/DvrDbSyncTest.java (renamed from tests/unit/src/com/android/tv/dvr/DvrDbSyncTest.java)46
-rw-r--r--tests/unit/src/com/android/tv/dvr/provider/EpisodicProgramLoadTaskTest.java83
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/DvrRecordingServiceTest.java183
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/InputTaskSchedulerTest.java (renamed from tests/unit/src/com/android/tv/dvr/InputTaskSchedulerTest.java)66
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/RecordingTaskTest.java (renamed from tests/unit/src/com/android/tv/dvr/RecordingTaskTest.java)71
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/ScheduledProgramReaperTest.java (renamed from tests/unit/src/com/android/tv/dvr/ScheduledProgramReaperTest.java)51
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/SchedulerTest.java (renamed from tests/unit/src/com/android/tv/dvr/SchedulerTest.java)62
-rw-r--r--tests/unit/src/com/android/tv/dvr/recorder/SeriesRecordingSchedulerTest.java (renamed from tests/unit/src/com/android/tv/dvr/SeriesRecordingSchedulerTest.java)30
-rw-r--r--tests/unit/src/com/android/tv/dvr/ui/SortedArrayAdapterTest.java67
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;
}
}