Search code examples
javacollectionshamcrest

How to check if collection contains items in given order using Hamcrest


How to check using Hamcrest if given collection is containing given items in given order? I tried hasItems but it simply ignores the order.

List<String> list = Arrays.asList("foo", "bar", "boo");

assertThat(list, hasItems("foo", "boo"));

//I want this to fail, because the order is different than in "list"
assertThat(list, hasItems("boo", "foo")); 

Solution

  • You can use contains matcher instead, but you probably need to use latest version of Hamcrest. That method checks the order.

    assertThat(list, contains("foo", "boo"));
    

    You can also try using containsInAnyOrder if order does not matter to you.

    That's the code for contains matcher:

      public static <E> Matcher<Iterable<? extends E>> contains(List<Matcher<? super E>> itemMatchers)
      {
        return IsIterableContainingInOrder.contains(itemMatchers);
      }