blob: f5d24ff6095408a28d1c9654b2ad7cca3a6c6aa7 [file] [log] [blame]
package org.hamcrest.text;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import java.util.Arrays;
public class StringContainsInOrder extends TypeSafeMatcher<String> {
private final Iterable<String> substrings;
public StringContainsInOrder(Iterable<String> substrings) {
this.substrings = substrings;
}
@Override
public boolean matchesSafely(String s) {
int fromIndex = 0;
for (String substring : substrings) {
fromIndex = s.indexOf(substring, fromIndex);
if (fromIndex == -1) {
return false;
}
}
return true;
}
@Override
public void describeMismatchSafely(String item, Description mismatchDescription) {
mismatchDescription.appendText("was \"").appendText(item).appendText("\"");
}
@Override
public void describeTo(Description description) {
description.appendText("a string containing ")
.appendValueList("", ", ", "", substrings)
.appendText(" in order");
}
/**
* Creates a matcher of {@link String} that matches when the examined string contains all of
* the specified substrings, considering the order of their appearance.
* For example:
* <pre>assertThat("myfoobarbaz", stringContainsInOrder(Arrays.asList("bar", "foo")))</pre>
* fails as "foo" occurs before "bar" in the string "myfoobarbaz"
*
* @param substrings
* the substrings that must be contained within matching strings
*/
public static Matcher<String> stringContainsInOrder(Iterable<String> substrings) {
return new StringContainsInOrder(substrings);
}
/**
* Creates a matcher of {@link String} that matches when the examined string contains all of
* the specified substrings, considering the order of their appearance.
* For example:
* <pre>assertThat("myfoobarbaz", stringContainsInOrder("bar", "foo"))</pre>
* fails as "foo" occurs before "bar" in the string "myfoobarbaz"
*
* @param substrings
* the substrings that must be contained within matching strings
*/
public static Matcher<String> stringContainsInOrder(String... substrings) {
return new StringContainsInOrder(Arrays.asList(substrings));
}
}