diff options
Diffstat (limited to 'tests/common/src/com/android/tv/testing/EpgTestData.java')
-rw-r--r-- | tests/common/src/com/android/tv/testing/EpgTestData.java | 198 |
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(); + } + }); + } +} |