aboutsummaryrefslogtreecommitdiff
path: root/tests/common/src/com/android/tv/testing/EpgTestData.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/common/src/com/android/tv/testing/EpgTestData.java')
-rw-r--r--tests/common/src/com/android/tv/testing/EpgTestData.java198
1 files changed, 198 insertions, 0 deletions
diff --git a/tests/common/src/com/android/tv/testing/EpgTestData.java b/tests/common/src/com/android/tv/testing/EpgTestData.java
new file mode 100644
index 00000000..49a92181
--- /dev/null
+++ b/tests/common/src/com/android/tv/testing/EpgTestData.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.tv.testing;
+
+import com.android.tv.data.ChannelImpl;
+import com.android.tv.data.Lineup;
+import com.android.tv.data.Program;
+import com.android.tv.data.api.Channel;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.ListMultimap;
+import java.util.concurrent.TimeUnit;
+
+/** EPG data for use in tests. */
+public abstract class EpgTestData {
+
+ public static final android.support.media.tv.Channel CHANNEL_10 =
+ new android.support.media.tv.Channel.Builder()
+ .setDisplayName("Channel TEN")
+ .setDisplayNumber("10")
+ .build();
+ public static final android.support.media.tv.Channel CHANNEL_11 =
+ new android.support.media.tv.Channel.Builder()
+ .setDisplayName("Channel Eleven")
+ .setDisplayNumber("11")
+ .build();
+ public static final android.support.media.tv.Channel CHANNEL_90_2 =
+ new android.support.media.tv.Channel.Builder()
+ .setDisplayName("Channel Ninety dot Two")
+ .setDisplayNumber("90.2")
+ .build();
+
+ public static final Lineup LINEUP_1 =
+ new Lineup(
+ "lineup1",
+ Lineup.LINEUP_SATELLITE,
+ "Lineup one",
+ "Location one",
+ ImmutableList.of("1", "2.2"));
+ public static final Lineup LINEUP_2 =
+ new Lineup(
+ "lineup2",
+ Lineup.LINEUP_SATELLITE,
+ "Lineup two",
+ "Location two",
+ ImmutableList.of("1", "2.3"));
+
+ public static final Lineup LINEUP_90210 =
+ new Lineup(
+ "test90210",
+ Lineup.LINEUP_BROADCAST_DIGITAL,
+ "Test 90210",
+ "Beverly Hills",
+ ImmutableList.of("90.2", "10"));
+
+ // Programs start and end times are set relative to 0.
+ // Then when loaded they are offset by the {@link #getStartTimeMs}.
+ // Start and end time may be negative meaning they happen before "now".
+
+ public static final Program PROGRAM_1 =
+ new Program.Builder()
+ .setTitle("Program 1")
+ .setStartTimeUtcMillis(0)
+ .setEndTimeUtcMillis(TimeUnit.MINUTES.toMillis(30))
+ .build();
+
+ public static final Program PROGRAM_2 =
+ new Program.Builder()
+ .setTitle("Program 2")
+ .setStartTimeUtcMillis(TimeUnit.MINUTES.toMillis(30))
+ .setEndTimeUtcMillis(TimeUnit.MINUTES.toMillis(60))
+ .build();
+
+ public static final EpgTestData DATA_90210 =
+ new EpgTestData() {
+
+ // Thursday, June 1, 2017 4:00:00 PM GMT-07:00
+ private final long testStartTimeMs = 1496358000000L;
+
+ @Override
+ public ListMultimap<String, Lineup> getLineups() {
+ ImmutableListMultimap.Builder<String, Lineup> builder =
+ ImmutableListMultimap.builder();
+ return builder.putAll("90210", LINEUP_1, LINEUP_2, LINEUP_90210).build();
+ }
+
+ @Override
+ public ListMultimap<String, Channel> getLineupChannels() {
+ ImmutableListMultimap.Builder<String, Channel> builder =
+ ImmutableListMultimap.builder();
+ return builder.putAll(
+ LINEUP_90210.getId(), toTvChannels(CHANNEL_90_2, CHANNEL_10))
+ .putAll(LINEUP_1.getId(), toTvChannels(CHANNEL_10, CHANNEL_11))
+ .build();
+ }
+
+ @Override
+ public ListMultimap<String, Program> getEpgPrograms() {
+ ImmutableListMultimap.Builder<String, Program> builder =
+ ImmutableListMultimap.builder();
+ return builder.putAll(
+ CHANNEL_10.getDisplayNumber(),
+ EpgTestData.updateTime(getStartTimeMs(), PROGRAM_1))
+ .putAll(
+ CHANNEL_11.getDisplayNumber(),
+ EpgTestData.updateTime(getStartTimeMs(), PROGRAM_2))
+ .build();
+ }
+
+ @Override
+ public long getStartTimeMs() {
+ return testStartTimeMs;
+ }
+ };
+
+ public abstract ListMultimap<String, Lineup> getLineups();
+
+ public abstract ListMultimap<String, Channel> getLineupChannels();
+
+ public abstract ListMultimap<String, Program> getEpgPrograms();
+
+ /** The starting time for this test data */
+ public abstract long getStartTimeMs();
+
+ /**
+ * Loads test data
+ *
+ * <p>
+ *
+ * <ul>
+ * <li>Sets clock to {@link #getStartTimeMs()} and boot time to 12 hours before that
+ * <li>Loads lineups
+ * <li>Loads lineupChannels
+ * <li>Loads epgPrograms
+ * </ul>
+ */
+ public final void loadData(FakeClock clock, FakeEpgReader epgReader) {
+ clock.setBootTimeMillis(getStartTimeMs() + TimeUnit.HOURS.toMillis(-12));
+ clock.setCurrentTimeMillis(getStartTimeMs());
+ epgReader.zip2lineups.putAll(getLineups());
+ epgReader.lineup2Channels.putAll(getLineupChannels());
+ epgReader.epgChannelId2Programs.putAll(getEpgPrograms());
+ }
+
+ public final void loadData(TestSingletonApp testSingletonApp) {
+ loadData(testSingletonApp.fakeClock, testSingletonApp.epgReader);
+ }
+
+ private static Iterable<Channel> toTvChannels(android.support.media.tv.Channel... channels) {
+ return Iterables.transform(
+ ImmutableList.copyOf(channels),
+ new Function<android.support.media.tv.Channel, Channel>() {
+ @Override
+ public Channel apply(android.support.media.tv.Channel original) {
+ return toTvChannel(original);
+ }
+ });
+ }
+
+ public static Channel toTvChannel(android.support.media.tv.Channel original) {
+ return new ChannelImpl.Builder()
+ .setDisplayName(original.getDisplayName())
+ .setDisplayNumber(original.getDisplayNumber())
+ // TODO implement the reset
+ .build();
+ }
+
+ /** Add time to the startTime and stopTime of each program */
+ private static Iterable<Program> updateTime(long time, Program... programs) {
+ return Iterables.transform(
+ ImmutableList.copyOf(programs),
+ new Function<Program, Program>() {
+ @Override
+ public Program apply(Program p) {
+ return new Program.Builder(p)
+ .setStartTimeUtcMillis(p.getStartTimeUtcMillis() + time)
+ .setEndTimeUtcMillis(p.getEndTimeUtcMillis() + time)
+ .build();
+ }
+ });
+ }
+}