package com.levelup.java.hamcrest;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.CoreMatchers.endsWith;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.collection.IsArray.array;
import static org.hamcrest.collection.IsArrayContainingInAnyOrder.arrayContainingInAnyOrder;
import static org.hamcrest.collection.IsArrayContainingInOrder.arrayContaining;
import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import static org.hamcrest.collection.IsIn.isIn;
import static org.hamcrest.collection.IsIn.isOneOf;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
import static org.hamcrest.collection.IsMapContaining.hasKey;
import static org.hamcrest.collection.IsMapContaining.hasValue;
import static org.junit.Assert.assertThat;
import java.util.List;
import java.util.Map;
import org.hamcrest.collection.IsIterableContainingInAnyOrder;
import org.hamcrest.collection.IsIterableContainingInOrder;
import org.hamcrest.collection.IsIterableWithSize;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
* This java example will demonstrate testing
* collections with junit hamcrest matchers.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/hamcrest-collection-matchers-junit-testing/'>Collection matchers</a>
*
*/
public class CollectionMatchers {
// iterables
@Test
public void check_size_of_iterable () {
List<String> cloths = Lists.newArrayList(
"shirts", "shoes", "pants", "socks");
assertThat(cloths, IsIterableWithSize.<String>iterableWithSize(4));
}
@Test
public void iterable_has_any_order () {
List<String> cloths = Lists.newArrayList(
"shirts", "shoes", "pants", "socks");
assertThat(cloths, IsIterableContainingInAnyOrder.
<String>containsInAnyOrder("shoes", "pants", "shirts", "socks"));
}
@Test
public void iterable_matches_order () {
List<String> cloths = Lists.newArrayList(
"shirts", "shoes", "pants", "socks");
assertThat(cloths, IsIterableContainingInOrder.
<String>contains("shirts", "shoes", "pants", "socks"));
}
// array
@Test
public void check_size_of_array () {
Integer[] numbers = new Integer[] {10, 15, 20};
assertThat(numbers, arrayWithSize(3));
}
@Test
public void array_contains_all_elements () {
Integer[] numbers = new Integer[] {10, 15, 20};
assertThat(numbers, arrayContaining(10, 15, 20));
}
@Test
public void array_contains_all_elements_in_any_order () {
Integer[] numbers = new Integer[] {10, 15, 20};
assertThat(numbers, arrayContainingInAnyOrder(20, 10, 15));
}
@SuppressWarnings("unchecked")
@Test
public void check_array_elements_equal() {
Integer[] numbers = new Integer[] {10, 15, 20};
assertThat(numbers,
is(array(equalTo(10), equalTo(15), equalTo(20))));
}
// collections
@Test
public void check_size_of_collection () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, hasSize(5));
}
@Test
public void collection_contains_elements_in_order () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, contains(
"apple", "banana", "pear", "blackberry", "grape"));
}
@Test
public void collection_contains_elements_in_any_order () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, containsInAnyOrder(
"banana", "apple", "blackberry", "grape", "pear"));
}
@Test
public void collection_contains_element () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, hasItem("apple"));
}
@Test
public void collection_contains_elements () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, hasItems("apple", "pear"));
}
@Test
public void element_in_collection () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat("apple", isIn(fruit));
}
@Test
public void element_in_one_of () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat("apple", isOneOf(fruit.toArray()));
}
@Test
public void collection_is_empty () {
List<String> fruit = Lists.newArrayList();
assertThat(fruit, empty());
}
@Test
public void collection_is_not_empty () {
List<String> fruit = Lists.newArrayList(
"apple", "banana", "pear", "blackberry", "grape");
assertThat(fruit, not(empty()));
}
@Test
public void each_element_ends_with () {
List<String> cereal = Lists.newArrayList(
"mini wheats", "corn flakes",
"honey smacks", "apple jacks",
"lucky charms");
assertThat(cereal, hasItem(endsWith("s")));
}
// Maps
@Test
public void map_has_entry () {
Map<String, String> breeds = Maps.newHashMap();
breeds.put("labrador", "buzz");
breeds.put("dachshund", "gypsy");
breeds.put("boxer", "buddy");
assertThat(breeds, hasEntry("labrador", "buzz"));
}
@Test
public void map_has_key () {
Map<String, String> breeds = Maps.newHashMap();
breeds.put("labrador", "buzz");
breeds.put("dachshund", "gypsy");
breeds.put("boxer", "buddy");
assertThat(breeds, hasKey("labrador"));
}
@Test
public void map_has_hasValue () {
Map<String, String> breeds = Maps.newHashMap();
breeds.put("labrador", "buzz");
breeds.put("dachshund", "gypsy");
breeds.put("boxer", "buddy");
assertThat(breeds, hasValue("gypsy"));
}
}