package com.miguelfonseca.completely;
import com.miguelfonseca.completely.data.ScoredObject;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@SuppressWarnings("checkstyle:multiplestringliterals")
public class AggregatorTest
{
@Rule
@SuppressWarnings("checkstyle:visibilitymodifier")
public ExpectedException exceptionRule;
private Aggregator<String> aggregator;
public AggregatorTest()
{
this.aggregator = new Aggregator<>();
this.exceptionRule = ExpectedException.none();
}
@Test
public void testCreate()
{
assertTrue(aggregator.isEmpty());
assertEquals(0, aggregator.size());
assertEquals(0, aggregator.values().size());
}
@Test
public void testAdd()
{
assertTrue(aggregator.add(new ScoredObject<>("a", 0)));
assertEquals(1, aggregator.size());
assertFalse(aggregator.add(new ScoredObject<>("a", 0)));
assertEquals(1, aggregator.size());
assertTrue(aggregator.add(new ScoredObject<>("b", 0)));
assertEquals(2, aggregator.size());
assertTrue(aggregator.add(new ScoredObject<>("a", 1)));
assertEquals(2, aggregator.size());
}
@Test
public void testAddNull()
{
exceptionRule.expect(NullPointerException.class);
aggregator.add(null);
}
@Test
public void testAddAllNull()
{
exceptionRule.expect(NullPointerException.class);
aggregator.addAll(null);
}
@Test
public void testRetain()
{
aggregator.add(new ScoredObject<>("a", 0));
aggregator.add(new ScoredObject<>("b", 0));
assertTrue(aggregator.retain(new ScoredObject<>("a", 0)));
assertEquals(1, aggregator.size());
assertTrue(aggregator.retain(new ScoredObject<>("a", 1)));
assertEquals(1, aggregator.size());
assertTrue(aggregator.retain(new ScoredObject<>("a", 1)));
assertEquals(1, aggregator.size());
assertTrue(aggregator.retain(new ScoredObject<>("b", 0)));
assertEquals(0, aggregator.size());
}
@Test
public void testRetainNull()
{
exceptionRule.expect(NullPointerException.class);
aggregator.retain(null);
}
@Test
public void testRetainAllNull()
{
exceptionRule.expect(NullPointerException.class);
aggregator.retainAll(null);
}
@Test
public void testValues()
{
aggregator.add(new ScoredObject<>("a", 0));
aggregator.add(new ScoredObject<>("b", 0));
List<String> result = aggregator.values();
assertEquals(2, result.size());
}
@Test
public void testValuesOrder()
{
aggregator.add(new ScoredObject<>("c", 0));
aggregator.add(new ScoredObject<>("b", 0));
aggregator.add(new ScoredObject<>("b", 1));
aggregator.add(new ScoredObject<>("a", 2));
List<String> result = aggregator.values();
assertEquals("a", result.get(0));
assertEquals("b", result.get(1));
assertEquals("c", result.get(2));
}
}