Skip to content

Commit

Permalink
typetools: simple equality checking matcher
Browse files Browse the repository at this point in the history
Signed-off-by: Ketoth Xupack <ketoth.xupack@gmail.com>
  • Loading branch information
KetothXupack committed Oct 22, 2013
1 parent 3c01acc commit 4001ffc
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 25 deletions.
18 changes: 18 additions & 0 deletions projects/typetools/src/main/java/org/nohope/Matchers.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.nohope;

import org.apache.commons.lang3.ObjectUtils;
import org.nohope.typetools.TStr;

import javax.annotation.Nonnull;
Expand Down Expand Up @@ -69,4 +70,21 @@ public String toString() {
}
};
}

public static <T> IMatcher<T> eq(final T obj) {
return new EqualsMatcher<>(obj);
}

public static class EqualsMatcher<T> implements IMatcher<T> {
private final T obj;

public EqualsMatcher(final T obj) {
this.obj = obj;
}

@Override
public boolean matches(final T obj) {
return ObjectUtils.equals(this.obj, obj);
}
}
}
36 changes: 14 additions & 22 deletions projects/typetools/src/main/java/org/nohope/typetools/TTime.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,46 +61,46 @@ public static XMLGregorianCalendar toXmlUtcCalendar(final Date date) {
return toXmlCalendar(date, UTC_ID);
}

private static IMatcher<Integer> matcher(final int i) {
return new IMatcher<Integer>() {
@Override
public boolean matches(final Integer obj) {
return obj == i;
}
};
/** Creates {@link XMLGregorianCalendar XMLGregorianCalendar} for given date in given timezone. */
public static XMLGregorianCalendar toXmlCalendar(final Date date, final String timezoneId) {
final GregorianCalendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone(timezoneId));
calendar.setTime(date);
return LazyDataTypeFactorySingleton.getFactory().newXMLGregorianCalendar(calendar);
}

public static boolean ne(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, Matchers.not(matcher(DatatypeConstants.EQUAL)));
return compare(c1, c2, Matchers.not(Matchers.eq(DatatypeConstants.EQUAL)));
}

public static boolean eq(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, matcher(DatatypeConstants.EQUAL));
return compare(c1, c2, Matchers.eq(DatatypeConstants.EQUAL));
}

public static boolean lte(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, Matchers.or(matcher(DatatypeConstants.LESSER), matcher(DatatypeConstants.EQUAL)));
return compare(c1, c2, Matchers.or(Matchers.eq(DatatypeConstants.LESSER),
Matchers.eq(DatatypeConstants.EQUAL)));
}

public static boolean lt(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, matcher(DatatypeConstants.LESSER));
return compare(c1, c2, Matchers.eq(DatatypeConstants.LESSER));
}

public static boolean gte(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, Matchers.or(
matcher(DatatypeConstants.GREATER),
matcher(DatatypeConstants.EQUAL)
Matchers.eq(DatatypeConstants.GREATER),
Matchers.eq(DatatypeConstants.EQUAL)
));
}

public static boolean gt(@Nonnull final XMLGregorianCalendar c1,
@Nonnull final XMLGregorianCalendar c2) {
return compare(c1, c2, matcher(DatatypeConstants.GREATER));
return compare(c1, c2, Matchers.eq(DatatypeConstants.GREATER));
}

public static boolean compare(@Nonnull final XMLGregorianCalendar c1,
Expand All @@ -109,14 +109,6 @@ public static boolean compare(@Nonnull final XMLGregorianCalendar c1,
return compareResultMatcher.matches(c1.compare(c2));
}

/** Creates {@link XMLGregorianCalendar XMLGregorianCalendar} for given date in given timezone. */
public static XMLGregorianCalendar toXmlCalendar(final Date date, final String timezoneId) {
final GregorianCalendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone(timezoneId));
calendar.setTime(date);
return LazyDataTypeFactorySingleton.getFactory().newXMLGregorianCalendar(calendar);
}

public static class LazyDataTypeFactorySingleton {
private static final DatatypeFactory datatypeFactory;
static {
Expand Down
14 changes: 11 additions & 3 deletions projects/typetools/src/test/java/org/nohope/MatchersTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import org.nohope.test.UtilitiesTestSupport;

import static org.junit.Assert.assertEquals;
import static org.nohope.Matchers.and;
import static org.nohope.Matchers.not;
import static org.nohope.Matchers.or;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.nohope.Matchers.*;
import static org.nohope.reflection.ModifierMatcher.ABSTRACT;
import static org.nohope.reflection.ModifierMatcher.FINAL;
import static org.nohope.reflection.ModifierMatcher.PUBLIC;
Expand All @@ -21,6 +21,14 @@ protected Class<?> getUtilityClass() {
return Matchers.class;
}

@Test
public void equals() {
assertTrue(eq(1).matches(1));
assertTrue(eq(null).matches(null));
assertFalse(eq("test").matches(null));
assertFalse(eq(null).matches("test"));
}

@Test
public void reprTest() {
assertEquals("!((PUBLIC && ABSTRACT) || FINAL)", not(or(and(PUBLIC, ABSTRACT), FINAL)).toString());
Expand Down

0 comments on commit 4001ffc

Please sign in to comment.