aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/src/com/android/tv/recommendation/RecommenderTest.java')
-rw-r--r--tests/unit/src/com/android/tv/recommendation/RecommenderTest.java287
1 files changed, 150 insertions, 137 deletions
diff --git a/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java b/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java
index 85524a82..812a3eb1 100644
--- a/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java
+++ b/tests/unit/src/com/android/tv/recommendation/RecommenderTest.java
@@ -17,20 +17,14 @@
package com.android.tv.recommendation;
import static android.support.test.InstrumentationRegistry.getContext;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static com.google.common.truth.Truth.assertThat;
import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
import android.test.MoreAsserts;
-
-import com.android.tv.data.Channel;
+import com.android.tv.data.api.Channel;
import com.android.tv.recommendation.RecommendationUtils.ChannelRecordSortedMapHelper;
-import com.android.tv.testing.Utils;
-
-import org.junit.Before;
-import org.junit.Test;
-
+import com.android.tv.testing.utils.Utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -39,8 +33,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
@SmallTest
+@RunWith(AndroidJUnit4.class)
public class RecommenderTest {
private static final int DEFAULT_NUMBER_OF_CHANNELS = 5;
private static final long DEFAULT_WATCH_START_TIME_MS =
@@ -49,24 +47,27 @@ public class RecommenderTest {
System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1);
private static final long DEFAULT_MAX_WATCH_DURATION_MS = TimeUnit.HOURS.toMillis(1);
- private final Comparator<Channel> CHANNEL_SORT_KEY_COMPARATOR = new Comparator<Channel>() {
- @Override
- public int compare(Channel lhs, Channel rhs) {
- return mRecommender.getChannelSortKey(lhs.getId())
- .compareTo(mRecommender.getChannelSortKey(rhs.getId()));
- }
- };
- private final Runnable START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS = new Runnable() {
- @Override
- public void run() {
- // Add 4 channels in ChannelRecordMap for testing. Store the added channels to
- // mChannels_1 ~ mChannels_4. They are sorted by channel id in increasing order.
- mChannel_1 = mChannelRecordSortedMap.addChannel();
- mChannel_2 = mChannelRecordSortedMap.addChannel();
- mChannel_3 = mChannelRecordSortedMap.addChannel();
- mChannel_4 = mChannelRecordSortedMap.addChannel();
- }
- };
+ private final Comparator<Channel> mChannelSortKeyComparator =
+ new Comparator<Channel>() {
+ @Override
+ public int compare(Channel lhs, Channel rhs) {
+ return mRecommender
+ .getChannelSortKey(lhs.getId())
+ .compareTo(mRecommender.getChannelSortKey(rhs.getId()));
+ }
+ };
+ private final Runnable mStartDatamanagerRunnableAddFourChannels =
+ new Runnable() {
+ @Override
+ public void run() {
+ // Add 4 channels in ChannelRecordMap for testing. Store the added channels to
+ // mChannels_1 ~ mChannels_4. They are sorted by channel id in increasing order.
+ mChannel_1 = mChannelRecordSortedMap.addChannel();
+ mChannel_2 = mChannelRecordSortedMap.addChannel();
+ mChannel_3 = mChannelRecordSortedMap.addChannel();
+ mChannel_4 = mChannelRecordSortedMap.addChannel();
+ }
+ };
private RecommendationDataManager mDataManager;
private Recommender mRecommender;
@@ -82,133 +83,133 @@ public class RecommenderTest {
@Before
public void setUp() {
mChannelRecordSortedMap = new ChannelRecordSortedMapHelper(getContext());
- mDataManager = RecommendationUtils
- .createMockRecommendationDataManager(mChannelRecordSortedMap);
+ mDataManager =
+ RecommendationUtils.createMockRecommendationDataManager(mChannelRecordSortedMap);
mChannelRecordSortedMap.resetRandom(Utils.createTestRandom());
}
@Test
public void testRecommendChannels_includeRecommendedOnly_allChannelsHaveNoScore() {
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
-
- // Recommender doesn't recommend any channels because all channels are not recommended.
- assertEquals(0, mRecommender.recommendChannels().size());
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
- assertEquals(0, mRecommender.recommendChannels(3).size());
- assertEquals(0, mRecommender.recommendChannels(4).size());
- assertEquals(0, mRecommender.recommendChannels(5).size());
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
+
+ // Recommender doesn't recommend any channels because all channels are not recommended.
+ assertThat(mRecommender.recommendChannels()).isEmpty();
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
+ assertThat(mRecommender.recommendChannels(3)).isEmpty();
+ assertThat(mRecommender.recommendChannels(4)).isEmpty();
+ assertThat(mRecommender.recommendChannels(5)).isEmpty();
}
@Test
public void testRecommendChannels_notIncludeRecommendedOnly_allChannelsHaveNoScore() {
- createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
-
- // Recommender recommends every channel because it recommends not-recommended channels too.
- assertEquals(4, mRecommender.recommendChannels().size());
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
- assertEquals(3, mRecommender.recommendChannels(3).size());
- assertEquals(4, mRecommender.recommendChannels(4).size());
- assertEquals(4, mRecommender.recommendChannels(5).size());
+ createRecommender(false, mStartDatamanagerRunnableAddFourChannels);
+
+ // Recommender recommends every channel because it recommends not-recommended channels too.
+ assertThat(mRecommender.recommendChannels()).hasSize(4);
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
+ assertThat(mRecommender.recommendChannels(3)).hasSize(3);
+ assertThat(mRecommender.recommendChannels(4)).hasSize(4);
+ assertThat(mRecommender.recommendChannels(5)).hasSize(4);
}
@Test
public void testRecommendChannels_includeRecommendedOnly_allChannelsHaveScore() {
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
setChannelScores_scoreIncreasesAsChannelIdIncreases();
// recommendChannels must be sorted by score in decreasing order.
// (i.e. sorted by channel ID in decreasing order in this case)
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(3),
- mChannel_4, mChannel_3, mChannel_2);
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(4),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(5),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(3), mChannel_4, mChannel_3, mChannel_2);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(4), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(5), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
}
@Test
public void testRecommendChannels_notIncludeRecommendedOnly_allChannelsHaveScore() {
- createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(false, mStartDatamanagerRunnableAddFourChannels);
setChannelScores_scoreIncreasesAsChannelIdIncreases();
// recommendChannels must be sorted by score in decreasing order.
// (i.e. sorted by channel ID in decreasing order in this case)
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(3),
- mChannel_4, mChannel_3, mChannel_2);
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(4),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
- MoreAsserts.assertContentsInOrder(mRecommender.recommendChannels(5),
- mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(3), mChannel_4, mChannel_3, mChannel_2);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(4), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
+ MoreAsserts.assertContentsInOrder(
+ mRecommender.recommendChannels(5), mChannel_4, mChannel_3, mChannel_2, mChannel_1);
}
@Test
public void testRecommendChannels_includeRecommendedOnly_fewChannelsHaveScore() {
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
mEvaluator.setChannelScore(mChannel_1.getId(), 1.0);
mEvaluator.setChannelScore(mChannel_2.getId(), 1.0);
// Only two channels are recommended because recommender doesn't recommend other channels.
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(),
- mChannel_1, mChannel_2);
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(3),
- mChannel_1, mChannel_2);
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(4),
- mChannel_1, mChannel_2);
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(5),
- mChannel_1, mChannel_2);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(), mChannel_1, mChannel_2);
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(3), mChannel_1, mChannel_2);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(4), mChannel_1, mChannel_2);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(5), mChannel_1, mChannel_2);
}
@Test
public void testRecommendChannels_notIncludeRecommendedOnly_fewChannelsHaveScore() {
- createRecommender(false, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(false, mStartDatamanagerRunnableAddFourChannels);
mEvaluator.setChannelScore(mChannel_1.getId(), 1.0);
mEvaluator.setChannelScore(mChannel_2.getId(), 1.0);
- assertEquals(4, mRecommender.recommendChannels().size());
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels().subList(0, 2),
- mChannel_1, mChannel_2);
+ assertThat(mRecommender.recommendChannels()).hasSize(4);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels().subList(0, 2), mChannel_1, mChannel_2);
- assertEquals(0, mRecommender.recommendChannels(-5).size());
- assertEquals(0, mRecommender.recommendChannels(0).size());
+ assertThat(mRecommender.recommendChannels(-5)).isEmpty();
+ assertThat(mRecommender.recommendChannels(0)).isEmpty();
- assertEquals(3, mRecommender.recommendChannels(3).size());
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(3).subList(0, 2),
- mChannel_1, mChannel_2);
+ assertThat(mRecommender.recommendChannels(3)).hasSize(3);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(3).subList(0, 2), mChannel_1, mChannel_2);
- assertEquals(4, mRecommender.recommendChannels(4).size());
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(4).subList(0, 2),
- mChannel_1, mChannel_2);
+ assertThat(mRecommender.recommendChannels(4)).hasSize(4);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(4).subList(0, 2), mChannel_1, mChannel_2);
- assertEquals(4, mRecommender.recommendChannels(5).size());
- MoreAsserts.assertContentsInAnyOrder(mRecommender.recommendChannels(5).subList(0, 2),
- mChannel_1, mChannel_2);
+ assertThat(mRecommender.recommendChannels(5)).hasSize(4);
+ MoreAsserts.assertContentsInAnyOrder(
+ mRecommender.recommendChannels(5).subList(0, 2), mChannel_1, mChannel_2);
}
@Test
public void testGetChannelSortKey_recommendAllChannels() {
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
setChannelScores_scoreIncreasesAsChannelIdIncreases();
List<Channel> expectedChannelList = mRecommender.recommendChannels();
List<Channel> channelList = Arrays.asList(mChannel_1, mChannel_2, mChannel_3, mChannel_4);
- Collections.sort(channelList, CHANNEL_SORT_KEY_COMPARATOR);
+ Collections.sort(channelList, mChannelSortKeyComparator);
// Recommended channel list and channel list sorted by sort key must be the same.
MoreAsserts.assertContentsInOrder(channelList, expectedChannelList.toArray());
@@ -218,17 +219,17 @@ public class RecommenderTest {
@Test
public void testGetChannelSortKey_recommendFewChannels() {
// Test with recommending 3 channels.
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
setChannelScores_scoreIncreasesAsChannelIdIncreases();
List<Channel> expectedChannelList = mRecommender.recommendChannels(3);
- // A channel which is not recommended by the recommender has to get an invalid sort key.
- assertEquals(Recommender.INVALID_CHANNEL_SORT_KEY,
- mRecommender.getChannelSortKey(mChannel_1.getId()));
+ // A channel which is not recommended by the recommender has to get an invalid sort key.
+ assertThat(mRecommender.getChannelSortKey(mChannel_1.getId()))
+ .isEqualTo(Recommender.INVALID_CHANNEL_SORT_KEY);
List<Channel> channelList = Arrays.asList(mChannel_2, mChannel_3, mChannel_4);
- Collections.sort(channelList, CHANNEL_SORT_KEY_COMPARATOR);
+ Collections.sort(channelList, mChannelSortKeyComparator);
MoreAsserts.assertContentsInOrder(channelList, expectedChannelList.toArray());
assertSortKeyNotInvalid(channelList);
@@ -236,10 +237,10 @@ public class RecommenderTest {
@Test
public void testListener_onRecommendationChanged() {
- createRecommender(true, START_DATAMANAGER_RUNNABLE_ADD_FOUR_CHANNELS);
- // FakeEvaluator doesn't recommend a channel with empty watch log. As every channel
- // doesn't have a watch log, nothing is recommended and recommendation isn't changed.
- assertFalse(mOnRecommendationChanged);
+ createRecommender(true, mStartDatamanagerRunnableAddFourChannels);
+ // FakeEvaluator doesn't recommend a channel with empty watch log. As every channel
+ // doesn't have a watch log, nothing is recommended and recommendation isn't changed.
+ assertThat(mOnRecommendationChanged).isFalse();
// Set lastRecommendationUpdatedTimeUtcMs to check recommendation changed because,
// recommender has a minimum recommendation update period.
@@ -248,51 +249,63 @@ public class RecommenderTest {
long latestWatchEndTimeMs = DEFAULT_WATCH_START_TIME_MS;
for (long channelId : mChannelRecordSortedMap.keySet()) {
mEvaluator.setChannelScore(channelId, 1.0);
- // Add a log to recalculate the recommendation score.
- assertTrue(mChannelRecordSortedMap.addWatchLog(channelId, latestWatchEndTimeMs,
- TimeUnit.MINUTES.toMillis(10)));
+ // Add a log to recalculate the recommendation score.
+ assertThat(
+ mChannelRecordSortedMap.addWatchLog(
+ channelId, latestWatchEndTimeMs, TimeUnit.MINUTES.toMillis(10)))
+ .isTrue();
latestWatchEndTimeMs += TimeUnit.MINUTES.toMillis(10);
}
- // onRecommendationChanged must be called, because recommend channels are not empty,
- // by setting score to each channel.
- assertTrue(mOnRecommendationChanged);
+ // onRecommendationChanged must be called, because recommend channels are not empty,
+ // by setting score to each channel.
+ assertThat(mOnRecommendationChanged).isTrue();
}
@Test
public void testListener_onRecommenderReady() {
- createRecommender(true, new Runnable() {
- @Override
- public void run() {
- mChannelRecordSortedMap.addChannels(DEFAULT_NUMBER_OF_CHANNELS);
- mChannelRecordSortedMap.addRandomWatchLogs(DEFAULT_WATCH_START_TIME_MS,
- DEFAULT_WATCH_END_TIME_MS, DEFAULT_MAX_WATCH_DURATION_MS);
- }
- });
-
- // After loading channels and watch logs are finished, recommender must be available to use.
- assertTrue(mOnRecommenderReady);
+ createRecommender(
+ true,
+ new Runnable() {
+ @Override
+ public void run() {
+ mChannelRecordSortedMap.addChannels(DEFAULT_NUMBER_OF_CHANNELS);
+ mChannelRecordSortedMap.addRandomWatchLogs(
+ DEFAULT_WATCH_START_TIME_MS,
+ DEFAULT_WATCH_END_TIME_MS,
+ DEFAULT_MAX_WATCH_DURATION_MS);
+ }
+ });
+
+ // After loading channels and watch logs are finished, recommender must be available to use.
+ assertThat(mOnRecommenderReady).isTrue();
}
private void assertSortKeyNotInvalid(List<Channel> channelList) {
for (Channel channel : channelList) {
- MoreAsserts.assertNotEqual(Recommender.INVALID_CHANNEL_SORT_KEY,
+ MoreAsserts.assertNotEqual(
+ Recommender.INVALID_CHANNEL_SORT_KEY,
mRecommender.getChannelSortKey(channel.getId()));
}
}
- private void createRecommender(boolean includeRecommendedOnly,
- Runnable startDataManagerRunnable) {
- mRecommender = new Recommender(new Recommender.Listener() {
- @Override
- public void onRecommenderReady() {
- mOnRecommenderReady = true;
- }
- @Override
- public void onRecommendationChanged() {
- mOnRecommendationChanged = true;
- }
- }, includeRecommendedOnly, mDataManager);
+ private void createRecommender(
+ boolean includeRecommendedOnly, Runnable startDataManagerRunnable) {
+ mRecommender =
+ new Recommender(
+ new Recommender.Listener() {
+ @Override
+ public void onRecommenderReady() {
+ mOnRecommenderReady = true;
+ }
+
+ @Override
+ public void onRecommendationChanged() {
+ mOnRecommendationChanged = true;
+ }
+ },
+ includeRecommendedOnly,
+ mDataManager);
mEvaluator = new FakeEvaluator();
mRecommender.registerEvaluator(mEvaluator);