package com.spencerwi.hamcrestJDK8Time.matchers; import org.hamcrest.Description; import org.hamcrest.Factory; import org.hamcrest.TypeSafeMatcher; import java.time.temporal.Temporal; public class IsBetween<T extends Temporal & Comparable<T>> extends TypeSafeMatcher<T>{ private T start, end; public IsBetween(T start, T end) { this.start = start; this.end = end; } @Override protected boolean matchesSafely(T item) { final boolean isAtOrAfterStart = item.compareTo(start) >= 0; final boolean isAtOrBeforeEnd = item.compareTo(end) <= 0; return isAtOrAfterStart && isAtOrBeforeEnd; } @Override public void describeTo(Description description) { description .appendText("a " + start.getClass().getSimpleName() + " between ") .appendValue(start) .appendText(" and ") .appendValue(end) .appendText(", inclusively"); } @Factory public static <T extends Temporal & Comparable<T>> IsBetween<T> between(T start, T end){ return new IsBetween<>(start, end); } }