package org.eclipse.recommenders.utils;
import static com.google.common.collect.Lists.newArrayList;
import static org.eclipse.recommenders.utils.Recommendation.newRecommendation;
import static org.junit.Assert.*;
import java.util.List;
import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.VmMethodName;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Iterables;
@SuppressWarnings("unchecked")
public class RecommendationsTest {
Recommendation<String> r1 = newRecommendation("abc", 0.2);
Recommendation<String> r2 = newRecommendation("cba", 0.1);
Recommendation<String> r3 = newRecommendation("cba", 0.3);
@Test
public void testSortByRelevance() {
List<Recommendation<String>> input = newArrayList(r2, r1);
List<Recommendation<String>> expected = newArrayList(r1, r2);
List<Recommendation<String>> actual = Recommendations.top(input, 100);
Assert.assertEquals(expected, actual);
}
@Test
public void testSortByRelevance2() {
List<Recommendation<String>> input = newArrayList(r1, r3);
List<Recommendation<String>> expected = newArrayList(r3, r1);
List<Recommendation<String>> actual = Recommendations.top(input, 100);
Assert.assertEquals(expected, actual);
}
@Test
public void testSortByString() {
List<Recommendation<String>> input = newArrayList(r2, r1);
List<Recommendation<String>> expected = newArrayList(r1, r2);
List<Recommendation<String>> actual = Recommendations.sortByName(input);
Assert.assertEquals(expected, actual);
}
@Test
public void testFilterVoid() {
Recommendation<IMethodName> proc = newRecommendation(VmMethodName.get("LMy.m()V"), 0.2);
Recommendation<IMethodName> func = newRecommendation(VmMethodName.get("LMy.m()I"), 0.1);
Recommendation<IMethodName> ctor = newRecommendation(VmMethodName.get("LMy.<init>()V"), 0.1);
assertTrue(ctor.getProposal().isInit());
List<Recommendation<IMethodName>> input = newArrayList(ctor, func, proc);
Iterable<Recommendation<IMethodName>> actual = Recommendations.filterVoid(input);
assertTrue(Iterables.contains(actual, func));
assertFalse(Iterables.contains(actual, ctor));
assertFalse(Iterables.contains(actual, proc));
}
}