diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 463d1dad1..99f49bf6a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -554,12 +554,16 @@ public abstract class AbstractJPATest { } @Test + @NoEclipseLink({DERBY, HSQLDB}) + @NoHibernate({DERBY, POSTGRESQL}) public void Date_YearWeek() { int value = query().from(cat).select(cat.birthdate.yearWeek()).fetchFirst(); assertTrue(value == 200006 || value == 200005); } @Test + @NoEclipseLink({DERBY, HSQLDB}) + @NoHibernate({DERBY, POSTGRESQL}) public void Date_Week() { int value = query().from(cat).select(cat.birthdate.week()).fetchFirst(); assertTrue(value == 6 || value == 5); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAProviderRule.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAProviderRule.java index 440bf7cd2..a8774f50c 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAProviderRule.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAProviderRule.java @@ -6,6 +6,8 @@ import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; +import com.google.common.collect.ImmutableSet; +import com.querydsl.core.Target; import com.querydsl.core.testutil.EmptyStatement; /** @@ -16,29 +18,33 @@ public class JPAProviderRule implements MethodRule { @Override public Statement apply(Statement base, FrameworkMethod method, Object target) { - boolean noEclipseLink = hasAnnotation(method, NoEclipseLink.class); - boolean noOpenJPA = hasAnnotation(method, NoOpenJPA.class); - boolean noBatooJPA = hasAnnotation(method, NoBatooJPA.class); - boolean noHibernate = hasAnnotation(method, NoHibernate.class); + NoEclipseLink noEclipseLink = getAnnotation(method, NoEclipseLink.class); + NoOpenJPA noOpenJPA = getAnnotation(method, NoOpenJPA.class); + NoBatooJPA noBatooJPA = getAnnotation(method, NoBatooJPA.class); + NoHibernate noHibernate = getAnnotation(method, NoHibernate.class); String mode = Mode.mode.get(); if (mode == null) { return base; - } else if (noEclipseLink && mode.contains("-eclipselink")) { + } else if (noEclipseLink != null && applies(noEclipseLink.value()) && mode.contains("-eclipselink")) { return EmptyStatement.DEFAULT; - } else if (noOpenJPA && mode.contains("-openjpa")) { + } else if (noOpenJPA != null && applies(noOpenJPA.value()) && mode.contains("-openjpa")) { return EmptyStatement.DEFAULT; - } else if (noBatooJPA && mode.contains("-batoo")) { + } else if (noBatooJPA != null && applies(noBatooJPA.value()) && mode.contains("-batoo")) { return EmptyStatement.DEFAULT; - } else if (noHibernate && !mode.contains("-")) { + } else if (noHibernate != null && applies(noHibernate.value()) && !mode.contains("-")) { return EmptyStatement.DEFAULT; } else { return base; } } - private boolean hasAnnotation(FrameworkMethod method, Class clazz) { - return method.getMethod().isAnnotationPresent(clazz) - || method.getMethod().getDeclaringClass().isAnnotationPresent(clazz); + private boolean applies(Target[] targets) { + return targets.length == 0 || ImmutableSet.copyOf(targets).contains(Mode.target.get()); + } + + private T getAnnotation(FrameworkMethod method, Class clazz) { + T rv = method.getMethod().getAnnotation(clazz); + return rv != null ? rv : method.getMethod().getDeclaringClass().getAnnotation(clazz); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoBatooJPA.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoBatooJPA.java index c1089a040..70951b4fd 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoBatooJPA.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoBatooJPA.java @@ -7,4 +7,5 @@ import java.lang.annotation.*; @Inherited public @interface NoBatooJPA { + com.querydsl.core.Target[] value() default {}; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoEclipseLink.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoEclipseLink.java index 58d0a5a59..b19f206c1 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoEclipseLink.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoEclipseLink.java @@ -7,4 +7,5 @@ import java.lang.annotation.*; @Inherited public @interface NoEclipseLink { + com.querydsl.core.Target[] value() default {}; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoHibernate.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoHibernate.java index d2a38a8be..93d853713 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoHibernate.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoHibernate.java @@ -7,4 +7,5 @@ import java.lang.annotation.*; @Inherited public @interface NoHibernate { + com.querydsl.core.Target[] value() default {}; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoOpenJPA.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoOpenJPA.java index 6881ed8d0..a38d53470 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NoOpenJPA.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NoOpenJPA.java @@ -7,4 +7,5 @@ import java.lang.annotation.*; @Inherited public @interface NoOpenJPA { + com.querydsl.core.Target[] value() default {}; }