diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java index 8e350bf35..da0e4317b 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java @@ -1,5 +1,6 @@ package org.navalplanner.business.test.planner.entities; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -7,6 +8,7 @@ import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.joda.time.LocalDate; +import org.junit.matchers.CombinableMatcher; import org.junit.matchers.JUnitMatchers; import org.navalplanner.business.planner.entities.DayAssigment; import org.navalplanner.business.planner.entities.GenericDayAssigment; @@ -17,34 +19,47 @@ import org.navalplanner.business.planner.entities.GenericDayAssigment; */ public class DayAssigmentMatchers { - public static final class FromMatcher extends + public static abstract class ListDayAssigmentsMatcher extends BaseMatcher> { + + @Override + final public boolean matches(Object value) { + if (value instanceof List) { + List dayAssigments = new ArrayList( + (List) value); + return matches(dayAssigments); + } + return false; + } + + protected abstract boolean matches(List assignments); + + } + + public static final class FromMatcher extends ListDayAssigmentsMatcher { private final LocalDate start; private FromMatcher(LocalDate start) { this.start = start; } - @Override - public boolean matches(Object value) { - if (value instanceof List) { - List assigments = (List) value; - return !assigments.isEmpty() - && assigments.get(0).getDay().equals(start); - } - return false; - } - @Override public void describeTo(Description description) { description.appendText("the first assignment must be at date" + start); } - public Matcher> consecutiveDays(int days) { + public CombinableMatcher> consecutiveDays( + int days) { return JUnitMatchers.both(this).and( DayAssigmentMatchers.consecutiveDays(days)); } + + @Override + protected boolean matches(List assignments) { + return !assignments.isEmpty() + && assignments.get(0).getDay().equals(start); + } } public static final Matcher> haveHours( @@ -75,30 +90,25 @@ public class DayAssigmentMatchers { }; } - public static Matcher> consecutiveDays( - final int days) { - return new BaseMatcher>() { + public static ListDayAssigmentsMatcher consecutiveDays(final int days) { + return new ListDayAssigmentsMatcher() { @Override - public boolean matches(Object value) { - if (value instanceof List) { - List assignments = (List) value; - if (assignments.size() != days) { - return false; - } - if (days == 0) { - return true; - } - LocalDate current = assignments.get(0).getDay(); - for (DayAssigment d : assignments) { - if (!d.getDay().equals(current)) { - return false; - } - current = current.plusDays(1); - } + public boolean matches(List assignments) { + if (assignments.size() != days) { + return false; + } + if (days == 0) { return true; } - return false; + LocalDate current = assignments.get(0).getDay(); + for (DayAssigment d : assignments) { + if (!d.getDay().equals(current)) { + return false; + } + current = current.plusDays(1); + } + return true; } @Override @@ -109,8 +119,7 @@ public class DayAssigmentMatchers { }; } - public static final FromMatcher from( - final LocalDate start) { + public static final FromMatcher from(final LocalDate start) { return new FromMatcher(start); }