package com.spencerwi.hamcrestJDK8Time.matchers; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; import java.time.temporal.Temporal; import java.time.temporal.TemporalField; public class IsSame<T extends Temporal & Comparable<? super T>> extends TypeSafeMatcher<T> { private T other; private TemporalField fieldToCheck; public IsSame(T other, TemporalField fieldToCheck) { this.other = other; this.fieldToCheck = fieldToCheck; } @Override protected boolean matchesSafely(T item) { return other.getLong(fieldToCheck) == item.getLong(fieldToCheck); } @Override public void describeTo(Description description) { description.appendText(" a " + other.getClass().toString() + " having the same ") .appendValue(fieldToCheck) .appendText(" as ") .appendValue(other); } public static IsSameBuilder same(TemporalField fieldToCheck){ return new IsSameBuilder(fieldToCheck); } public static class IsSameBuilder { private TemporalField fieldToCheck; private IsSameBuilder(TemporalField fieldToCheck) { this.fieldToCheck = fieldToCheck; } public <T extends Temporal & Comparable<? super T>> IsSame<T> as(T other){ return new IsSame<>(other, fieldToCheck); } } }