/** * Checks if object has proper toString defined. This matcher can be * replaced with JUnit 4.8 */ public static Matcher<Object> hasToString() { return new TypeSafeMatcher<Object>() { @Override public boolean matchesSafely(Object objectToTest) { try { objectToTest.getClass().getDeclaredMethod("toString"); } catch (Exception e) { return false; } String s = objectToTest.toString(); if (s == null || s.length() == 0) { return false; } return true; } @Override public void describeTo(Description description) { description.appendText("proper toString()"); } }; }
/** * Checks if array is non-empty. This matcher can be replaced with JUnit 4.8 */ public static Matcher<Object[]> hasItemInArray() { return new TypeSafeMatcher<Object[]>() { @Override public boolean matchesSafely(Object[] arrayToTest) { if (arrayToTest == null || arrayToTest.length == 0) { return false; } return true; } @Override public void describeTo(Description description) { description.appendText("non-empty array"); } }; }
/** * Checks if list is non-empty. This matcher can be replaced with JUnit 4.8 */ public static Matcher<Collection<?>> hasItems() { return new TypeSafeMatcher<Collection<?>>() { @Override public boolean matchesSafely(Collection<?> collection) { if (collection == null || collection.isEmpty()) { return false; } return true; } @Override public void describeTo(Description description) { description.appendText("non-empty list"); } }; }
/** * Checks if collection has the given number of items. */ public static Matcher<Collection<?>> hasItems(final int numberOfItems) { return new TypeSafeMatcher<Collection<?>>() { @Override public boolean matchesSafely(Collection<?> collection) { if (collection == null || collection.size() != numberOfItems) { return false; } return true; } @Override public void describeTo(Description description) { description.appendText("expected a collection with " + numberOfItems + " items"); } }; }
private static Matcher<UntypedResultSet.Row> withElements(final int key, final String v1, final int v2) { return new TypeSafeMatcher<UntypedResultSet.Row>() { @Override public boolean matchesSafely(Row input) { if (!input.has("k") || !input.has("v1") || !input.has("v2")) return false; return input.getInt("k") == key && input.getString("v1").equals(v1) && input.getInt("v2") == v2; } @Override public void describeTo(Description description) { description.appendText(String.format("a row containing: %s, %s, %s", key, v1, v2)); } }; }
private Matcher<Throwable> hasMessage(final Matcher<String> matcher) { return new TypeSafeMatcher<Throwable>() { public void describeTo(Description description) { description.appendText("exception with message "); description.appendDescriptionOf(matcher); } @Override public boolean matchesSafely(Throwable item) { final Throwable throwable = getCauseFromHandlerException(item); return matcher.matches(throwable.getMessage()); } }; }
Matcher<Integer> isLessThan(final int val) { return new TypeSafeMatcher<Integer>() { @Override public boolean matchesSafely(Integer item) { return item < val; } public void describeTo(Description descr) { descr.appendText("an integer less than ").appendValue(val); } }; }
Matcher<Integer> isGreaterThan(final int val) { return new TypeSafeMatcher<Integer>() { @Override public boolean matchesSafely(Integer item) { return item > val; } public void describeTo(Description descr) { descr.appendText("an integer greater than ").appendValue(val); } }; }
@Nonnull protected static Matcher<Field> matchesOnly(@Nonnull final AccessType accessType) { return new TypeSafeMatcher<Field>() { @Override public boolean matchesSafely(Field item) { boolean result = true; for (AccessType current : AccessType.values()) { if (accessType == current) { if (!AccessType.matches(item, current)) { result = false; break; } } else { if (AccessType.matches(item, current)) { result = false; break; } } } return result; } @Override public void describeTo(Description description) { description.appendText("matches only ").appendValue(accessType); } }; }