package vnet.sms.common.shell.springshell.internal.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
/**
* Unit test of {@link CollectionUtils}
*
* @author Andrew Swan
* @since 1.2.0
*/
public class CollectionUtilsTest {
// A simple filter for testing the filtering methods
private static final Filter<String> NON_BLANK_FILTER = new Filter<String>() {
@Override
public boolean include(
final String instance) {
return StringUtils
.hasText(instance);
}
};
private static class Parent {
@Override
public String toString() {
return getClass().getSimpleName();
}
}
private static class Child extends Parent {
}
@Test
public void testFilterNullCollection() {
assertEquals(0, CollectionUtils.filter(null, NON_BLANK_FILTER).size());
}
@Test
public void testFilterNonNullIterableWithNullFilter() {
// Set up
final Iterable<String> inputs = Arrays.asList("a", "");
// Invoke
final List<? extends String> results = CollectionUtils.filter(inputs,
null);
// Check
assertEquals(inputs, results);
}
@Test
public void testFilterNonNullIterableWithNonNullFilter() {
// Set up
final Iterable<String> inputs = Arrays.asList("a", "", null, "b");
// Invoke
final List<? extends String> results = CollectionUtils.filter(inputs,
NON_BLANK_FILTER);
// Check
assertEquals(Arrays.asList("a", "b"), results);
}
@Test
public void testAddNullCollectionToNullCollection() {
assertFalse(CollectionUtils.addAll(null, null));
}
@Test
public void testAddNullCollectionToNonNullCollection() {
// Set up
final Parent parent = new Parent();
final Collection<Parent> parents = Arrays.asList(parent);
// Invoke
final boolean added = CollectionUtils.addAll(null, parents);
// Check
assertFalse(added);
}
@Test
public void testAddNonNullCollectionToNonNullCollection() {
// Set up
final Parent parent = new Parent();
final Child child = new Child();
final Collection<Parent> parents = new ArrayList<Parent>();
parents.add(parent);
// Invoke
final boolean added = CollectionUtils.addAll(Arrays.asList(child),
parents);
// Check
assertTrue(added);
assertEquals(Arrays.asList(parent, child), parents);
}
@Test
public void testPopulateNullCollectionWithNullCollection() {
assertNull(CollectionUtils.populate(null, null));
}
@Test
public void testPopulateNonNullCollectionWithNullCollection() {
// Set up
final Collection<Parent> collection = new ArrayList<Parent>();
collection.add(new Parent());
// Invoke
final Collection<Parent> result = CollectionUtils.populate(collection,
null);
// Check
assertEquals(0, result.size());
}
@Test
public void testPopulateNonNullCollectionWithNonNullCollection() {
// Set up
final Collection<Parent> originalCollection = new ArrayList<Parent>();
originalCollection.add(new Parent());
final Child child = new Child();
// Invoke
final Collection<Parent> result = CollectionUtils.populate(
originalCollection, Arrays.asList(child));
// Check
assertEquals(Collections.singletonList(child), result);
}
@Test
public void testFirstElementOfNullCollection() {
assertNull(CollectionUtils.firstElementOf(null));
}
@Test
public void testFirstElementOfEmptyCollection() {
assertNull(CollectionUtils.firstElementOf(Collections.emptySet()));
}
@Test
public void testFirstElementOfSingleElementCollection() {
final String member = "x";
assertEquals(member,
CollectionUtils.firstElementOf(Collections.singleton(member)));
}
@Test
public void testFirstElementOfMultiElementCollection() {
final String[] members = { "x", "y", "z" };
assertEquals(members[0],
CollectionUtils.firstElementOf(Arrays.asList(members)));
}
}