package com.tek271.funj;
import com.google.common.collect.Multimap;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
import static org.junit.Assert.assertEquals;
public class CollectionToolsTest {
private static final String NOT_EXIST = "propertyNameWhichDoesNotExist";
final Zoo z1 = Zoo.createZoo(1);
final Zoo z2 = Zoo.createZoo(2);
final Zoo z3 = Zoo.createZoo(3);
final Zoo z4 = Zoo.createZoo(4);
final List<Zoo> zoos = newArrayList(z1, z2, z3, z4);
@Test
public void toMapReturnsEmptyMapIfIterableIsEmpty() {
assertEquals(true, CollectionTools.toMap(null, "id").isEmpty());
assertEquals(true, CollectionTools.toMap(newArrayList(), "id").isEmpty());
}
@Test(expected = IllegalArgumentException.class)
public void toMapFailsIfBadKeyPropertyName() {
CollectionTools.toMap(zoos, NOT_EXIST);
}
@Test
public void toMapReturnsMapKeyedByProperty() {
Map<Integer,Zoo> map = CollectionTools.toMap(zoos, "id");
assertEquals(zoos.size(), map.size());
assertEquals(z1, map.get(1));
assertEquals(z2, map.get(2));
assertEquals(z3, map.get(3));
assertEquals(z4, map.get(4));
}
@Test
public void toMapReturnsMapKeyedByNestedProperty() {
Map<Integer,Zoo> map = CollectionTools.toMap(zoos, "cat.color");
assertEquals(zoos.size(), map.size());
}
@Test
public void toMapCanUseMapObjects() {
List<Map<String, Object>> list = Zoo.toListOfMaps(z1, z2);
Map<Integer, Map<String, Object>> map = CollectionTools.toMap(list, "id");
assertEquals(2, map.size());
assertEquals(list.get(0), map.get(1));
assertEquals(list.get(1), map.get(2));
}
@Test
public void toMultimapReturnsEmptyMapIfIterableIsEmpty() {
assertEquals(true, CollectionTools.toMultimap(null, "id").isEmpty());
assertEquals(true, CollectionTools.toMultimap(newArrayList(), "id").isEmpty());
}
@Test(expected = IllegalArgumentException.class)
public void toMultimapFailsIfBadKeyPropertyName() {
CollectionTools.toMultimap(zoos, NOT_EXIST);
}
@Test
public void toMultimapReturnsMultimapKeyedByProperty() {
List<Zoo> z = newArrayList(z1, z2);
Multimap<Integer,Zoo> multimap = CollectionTools.toMultimap(z, "id");
assertEquals(2, multimap.size());
assertEquals(newArrayList(z1), multimap.get(1));
assertEquals(newArrayList(z2), multimap.get(2));
}
}