/* * 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.data; import static android.media.tv.TvContract.Programs.Genres.COMEDY; import static android.media.tv.TvContract.Programs.Genres.FAMILY_KIDS; import com.android.tv.data.Program.CriticScore; import com.android.tv.dvr.SeriesRecording; import android.media.tv.TvContentRating; import android.media.tv.TvContract.Programs.Genres; import android.os.Parcel; import android.support.test.filters.SmallTest; import android.util.Log; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Tests for {@link Program}. */ @SmallTest public class ProgramTest extends TestCase { private static final int NOT_FOUND_GENRE = 987; private static final int FAMILY_GENRE_ID = GenreItems.getId(FAMILY_KIDS); private static final int COMEDY_GENRE_ID = GenreItems.getId(COMEDY); public void testBuild() { Program program = new Program.Builder().build(); assertEquals("isValid", false, program.isValid()); } public void testNoGenres() { Program program = new Program.Builder() .setCanonicalGenres("") .build(); assertNullCanonicalGenres(program); assertHasGenre(program, NOT_FOUND_GENRE, false); assertHasGenre(program, FAMILY_GENRE_ID, false); assertHasGenre(program, COMEDY_GENRE_ID, false); assertHasGenre(program, GenreItems.ID_ALL_CHANNELS, true); } public void testFamilyGenre() { Program program = new Program.Builder() .setCanonicalGenres(FAMILY_KIDS) .build(); assertCanonicalGenres(program, FAMILY_KIDS); assertHasGenre(program, NOT_FOUND_GENRE, false); assertHasGenre(program, FAMILY_GENRE_ID, true); assertHasGenre(program, COMEDY_GENRE_ID, false); assertHasGenre(program, GenreItems.ID_ALL_CHANNELS, true); } public void testFamilyComedyGenre() { Program program = new Program.Builder() .setCanonicalGenres(FAMILY_KIDS + ", " + COMEDY) .build(); assertCanonicalGenres(program, FAMILY_KIDS, COMEDY); assertHasGenre(program, NOT_FOUND_GENRE, false); assertHasGenre(program, FAMILY_GENRE_ID, true); assertHasGenre(program, COMEDY_GENRE_ID, true); assertHasGenre(program, GenreItems.ID_ALL_CHANNELS, true); } public void testOtherGenre() { Program program = new Program.Builder() .setCanonicalGenres("other") .build(); assertCanonicalGenres(program); assertHasGenre(program, NOT_FOUND_GENRE, false); assertHasGenre(program, FAMILY_GENRE_ID, false); assertHasGenre(program, COMEDY_GENRE_ID, false); assertHasGenre(program, GenreItems.ID_ALL_CHANNELS, true); } public void testParcelable() throws Exception { List criticScores = new ArrayList<>(); criticScores.add(new CriticScore("1", "2", "3")); criticScores.add(new CriticScore("4", "5", "6")); TvContentRating[] ratings = new TvContentRating[2]; ratings[0] = TvContentRating.unflattenFromString("1/2/3"); ratings[1] = TvContentRating.unflattenFromString("4/5/6"); Program p = new Program.Builder() .setId(1) .setPackageName("2") .setChannelId(3) .setTitle("4") .setSeriesId("5") .setEpisodeTitle("6") .setSeasonNumber("7") .setSeasonTitle("8") .setEpisodeNumber("9") .setStartTimeUtcMillis(10) .setEndTimeUtcMillis(11) .setDescription("12") .setLongDescription("12-long") .setVideoWidth(13) .setVideoHeight(14) .setCriticScores(criticScores) .setPosterArtUri("15") .setThumbnailUri("16") .setCanonicalGenres(Genres.encode(Genres.SPORTS, Genres.SHOPPING)) .setContentRatings(ratings) .setRecordingProhibited(true) .build(); Parcel p1 = Parcel.obtain(); Parcel p2 = Parcel.obtain(); try { p.writeToParcel(p1, 0); byte[] bytes = p1.marshall(); p2.unmarshall(bytes, 0, bytes.length); p2.setDataPosition(0); Program r2 = Program.fromParcel(p2); assertEquals(p, r2); } finally { p1.recycle(); p2.recycle(); } } public void testParcelableWithCriticScore() { Program program = new Program.Builder() .setTitle("MyTitle") .addCriticScore(new CriticScore( "default source", "5/10", "https://testurl/testimage.jpg")) .build(); Parcel parcel = Parcel.obtain(); program.writeToParcel(parcel, 0); parcel.setDataPosition(0); Program programFromParcel = Program.CREATOR.createFromParcel(parcel); assertNotNull(programFromParcel.getCriticScores()); assertEquals(programFromParcel.getCriticScores().get(0).source, "default source"); assertEquals(programFromParcel.getCriticScores().get(0).score, "5/10"); assertEquals(programFromParcel.getCriticScores().get(0).logoUrl, "https://testurl/testimage.jpg"); } private static void assertNullCanonicalGenres(Program program) { String[] actual = program.getCanonicalGenres(); assertNull("Expected null canonical genres but was " + Arrays.toString(actual), actual); } private static void assertCanonicalGenres(Program program, String... expected) { assertEquals("canonical genres", Arrays.asList(expected), Arrays.asList(program.getCanonicalGenres())); } private static void assertHasGenre(Program program, int genreId, boolean expected) { assertEquals("hasGenre(" + genreId + ")", expected, program.hasGenre(genreId)); } }