Merge pull request #1070 from querydsl/junit

Enhancements to the test platform
This commit is contained in:
Timo Westkämper 2014-12-09 23:11:06 +02:00
commit d0d868d250
21 changed files with 150 additions and 84 deletions

View File

@ -7,7 +7,7 @@ services:
addons:
postgresql: "9.3"
install:
- travis_wait sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true'
- sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true'
before_script:
- mysql -u root -e "source travis/mysql.sql"
- psql -U postgres -f travis/postgresql.sql

View File

@ -1,13 +0,0 @@
package com.mysema.testutil;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
public class CustomSuite extends Suite {
public CustomSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(builder, klass, klass.getClasses());
}
}

View File

@ -30,6 +30,7 @@ import org.junit.runner.RunWith;
import com.mysema.commons.lang.CloseableIterator;
import com.mysema.query.jpa.HQLTemplates;
import com.mysema.query.jpa.HibernateTest;
import com.mysema.query.jpa.JPQLTemplates;
import com.mysema.query.jpa.ScrollableResultsIterator;
import com.mysema.query.jpa.domain.Cat;
@ -43,7 +44,7 @@ import com.mysema.testutil.HibernateTestRunner;
*
*/
@RunWith(HibernateTestRunner.class)
public class HibernateBase extends AbstractJPATest {
public class HibernateBase extends AbstractJPATest implements HibernateTest {
private static final QCat cat = QCat.cat;
@ -70,6 +71,7 @@ public class HibernateBase extends AbstractJPATest {
return HQLTemplates.DEFAULT;
}
@Override
public void setSession(Session session) {
this.session = session;
}

View File

@ -23,13 +23,14 @@ import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.mysema.query.jpa.HibernateTest;
import com.mysema.query.jpa.domain.QCat;
import com.mysema.query.jpa.hibernate.HibernateQuery;
import com.mysema.testutil.HibernateTestRunner;
@Ignore
@RunWith(HibernateTestRunner.class)
public class HibernateQueryMutabilityTest{
public class HibernateQueryMutabilityTest implements HibernateTest {
private Session session;
@ -37,6 +38,7 @@ public class HibernateQueryMutabilityTest{
return new HibernateQuery(session);
}
@Override
public void setSession(Session session) {
this.session = session;
}

View File

@ -23,6 +23,7 @@ import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runner.RunWith;
import com.mysema.query.jpa.HibernateTest;
import com.mysema.query.jpa.domain.Cat;
import com.mysema.query.jpa.domain.Color;
import com.mysema.query.jpa.domain.QCat;
@ -33,7 +34,7 @@ import com.mysema.testutil.ExcludeIn;
import com.mysema.testutil.HibernateTestRunner;
@RunWith(HibernateTestRunner.class)
public class HibernateSQLBase extends AbstractSQLTest {
public class HibernateSQLBase extends AbstractSQLTest implements HibernateTest {
@Rule
public static MethodRule targetRule = new TargetRule();
@ -49,6 +50,7 @@ public class HibernateSQLBase extends AbstractSQLTest {
return new HibernateSQLQuery(session, templates);
}
@Override
public void setSession(Session session) {
this.session = session;
}

View File

@ -13,14 +13,23 @@
*/
package com.mysema.query;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import static org.junit.Assert.*;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runner.RunWith;
import com.mysema.commons.lang.CloseableIterator;
import com.mysema.query.jpa.JPASubQuery;
import com.mysema.query.jpa.domain.*;
@ -30,19 +39,13 @@ import com.mysema.query.types.EntityPath;
import com.mysema.query.types.expr.BooleanExpression;
import com.mysema.testutil.ExcludeIn;
import com.mysema.testutil.JPATestRunner;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* @author tiwe
*
*/
@RunWith(JPATestRunner.class)
public class JPABase extends AbstractJPATest {
public class JPABase extends AbstractJPATest implements JPATest {
private static final QCat cat = QCat.cat;
@ -68,6 +71,7 @@ public class JPABase extends AbstractJPATest {
return new JPAQuery(entityManager, new DefaultQueryMetadata().noValidate());
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -28,7 +28,7 @@ import com.mysema.testutil.JPATestRunner;
@Ignore
@RunWith(JPATestRunner.class)
public class JPAQueryMutabilityTest {
public class JPAQueryMutabilityTest implements JPATest {
private EntityManager entityManager;
@ -36,6 +36,7 @@ public class JPAQueryMutabilityTest {
return new JPAQuery(entityManager);
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -34,7 +34,7 @@ import com.mysema.testutil.ExcludeIn;
import com.mysema.testutil.JPATestRunner;
@RunWith(JPATestRunner.class)
public class JPASQLBase extends AbstractSQLTest {
public class JPASQLBase extends AbstractSQLTest implements JPATest {
@Rule
public static MethodRule targetRule = new TargetRule();
@ -51,7 +51,7 @@ public class JPASQLBase extends AbstractSQLTest {
return new JPASQLQuery(entityManager, templates);
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -0,0 +1,27 @@
/*
* Copyright 2014 Timo Westkämper.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mysema.query;
import javax.persistence.EntityManager;
/**
*
* @author Shredder121
*/
public interface JPATest {
void setEntityManager(EntityManager entityManager);
}

View File

@ -21,7 +21,7 @@ import com.mysema.testutil.Performance;
@RunWith(JPATestRunner.class)
@Ignore
@Category(Performance.class)
public class QueryPerformanceTest {
public class QueryPerformanceTest implements JPATest {
private static final int iterations = 1000;
@ -99,6 +99,7 @@ public class QueryPerformanceTest {
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -0,0 +1,27 @@
/*
* Copyright 2014 Timo Westkämper.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mysema.query.jpa;
import org.hibernate.Session;
/**
*
* @author Shredder121
*/
public interface HibernateTest {
void setSession(Session session);
}

View File

@ -13,8 +13,18 @@
*/
package com.mysema.query.jpa;
import antlr.RecognitionException;
import antlr.TokenStreamException;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.mysema.query.jpa.domain.Cat;
import com.mysema.query.jpa.domain.QCat;
import com.mysema.query.jpa.hibernate.HibernateDeleteClause;
@ -23,20 +33,12 @@ import com.mysema.query.jpa.hibernate.HibernateUpdateClause;
import com.mysema.query.jpa.hibernate.HibernateUtil;
import com.mysema.query.types.EntityPath;
import com.mysema.testutil.HibernateTestRunner;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import antlr.RecognitionException;
import antlr.TokenStreamException;
@RunWith(HibernateTestRunner.class)
public class IntegrationBase extends ParsingTest {
public class IntegrationBase extends ParsingTest implements HibernateTest {
private Session session;
@ -161,6 +163,7 @@ public class IntegrationBase extends ParsingTest {
}
@Override
public void setSession(Session session) {
this.session = session;
}

View File

@ -16,19 +16,22 @@ package com.mysema.query.jpa;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import antlr.RecognitionException;
import antlr.TokenStreamException;
import com.mysema.query.JPAProviderRule;
import com.mysema.query.TargetRule;
import com.mysema.query.jpa.impl.JPAProvider;
import com.mysema.query.jpa.impl.JPAUtil;
import com.mysema.testutil.JPATestRunner;
import org.junit.Rule;
import org.junit.rules.MethodRule;
import org.junit.runner.RunWith;
import com.mysema.query.JPAProviderRule;
import com.mysema.query.JPATest;
import com.mysema.query.TargetRule;
import com.mysema.query.jpa.impl.JPAProvider;
import com.mysema.query.jpa.impl.JPAUtil;
import com.mysema.testutil.JPATestRunner;
import antlr.RecognitionException;
import antlr.TokenStreamException;
@RunWith(JPATestRunner.class)
public class JPAIntegrationBase extends ParsingTest {
public class JPAIntegrationBase extends ParsingTest implements JPATest {
@Rule
public static MethodRule targetRule = new TargetRule();
@ -66,6 +69,7 @@ public class JPAIntegrationBase extends ParsingTest {
};
}
@Override
public void setEntityManager(EntityManager em) {
this.em = em;
this.templates = JPAProvider.getTemplates(em);

View File

@ -24,6 +24,7 @@ import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.mysema.query.JPATest;
import com.mysema.query.QueryMutability;
import com.mysema.query.jpa.domain.Cat;
import com.mysema.query.jpa.domain.sql.SAnimal;
@ -34,7 +35,7 @@ import com.mysema.testutil.JPATestRunner;
@Ignore
@RunWith(JPATestRunner.class)
public class JPAQueryMutabilityTest{
public class JPAQueryMutabilityTest implements JPATest {
private static final SQLTemplates derbyTemplates = new DerbyTemplates();
@ -44,6 +45,7 @@ public class JPAQueryMutabilityTest{
return new JPASQLQuery(entityManager, derbyTemplates);
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -16,6 +16,7 @@ package com.mysema.query.jpa;
import javax.persistence.EntityManager;
import java.io.*;
import com.mysema.query.JPATest;
import com.mysema.query.QueryMetadata;
import com.mysema.query.jpa.domain.QCat;
import com.mysema.query.jpa.impl.JPAQuery;
@ -26,7 +27,7 @@ import org.junit.runner.RunWith;
import static org.junit.Assert.*;
@RunWith(JPATestRunner.class)
public class SerializationBase {
public class SerializationBase implements JPATest {
private QCat cat = QCat.cat;
@ -113,6 +114,7 @@ public class SerializationBase {
return new JPAQuery(entityManager);
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

View File

@ -27,7 +27,7 @@ import com.mysema.testutil.HibernateTestRunner;
@Ignore
@RunWith(HibernateTestRunner.class)
public class UniqueResultsTest {
public class UniqueResultsTest implements HibernateTest {
private Session session;
@ -48,6 +48,7 @@ public class UniqueResultsTest {
return new HibernateQuery(session);
}
@Override
public void setSession(Session session) {
this.session = session;
}

View File

@ -1,12 +1,12 @@
package com.mysema.query.suites;
import org.junit.AfterClass;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import com.mysema.query.Mode;
import com.mysema.testutil.CustomSuite;
@RunWith(CustomSuite.class)
@RunWith(Enclosed.class)
public abstract class AbstractJPASuite {
@AfterClass

View File

@ -1,12 +1,12 @@
package com.mysema.query.suites;
import org.junit.AfterClass;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import com.mysema.query.Mode;
import com.mysema.testutil.CustomSuite;
@RunWith(CustomSuite.class)
@RunWith(Enclosed.class)
public abstract class AbstractSuite {
@AfterClass

View File

@ -13,8 +13,14 @@
*/
package com.mysema.testutil;
import com.mysema.query.Mode;
import com.mysema.query.jpa.domain.Domain;
import static com.google.common.base.Verify.verify;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
@ -29,12 +35,9 @@ import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import com.mysema.query.Mode;
import com.mysema.query.jpa.HibernateTest;
import com.mysema.query.jpa.domain.Domain;
/**
* @author tiwe
@ -46,8 +49,6 @@ public class HibernateTestRunner extends BlockJUnit4ClassRunner {
private Session session;
private Method setter;
private boolean isDerby = false;
public HibernateTestRunner(Class<?> klass) throws InitializationError {
@ -56,6 +57,9 @@ public class HibernateTestRunner extends BlockJUnit4ClassRunner {
@Override
protected List<MethodRule> rules(Object test) {
verify(test instanceof HibernateTest, "In order to use the %s for %s, it should (directly or indirectly) implement %s",
HibernateTestRunner.class.getSimpleName(), test.getClass(), HibernateTest.class);
List<MethodRule> rules = super.rules(test);
rules.add(new MethodRule() {
@Override
@ -63,10 +67,7 @@ public class HibernateTestRunner extends BlockJUnit4ClassRunner {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (setter == null) {
setter = target.getClass().getMethod("setSession", Session.class);
}
setter.invoke(target, session);
((HibernateTest) target).setSession(session);
base.evaluate();
}
};

View File

@ -13,7 +13,8 @@
*/
package com.mysema.testutil;
import java.lang.reflect.Method;
import static com.google.common.base.Verify.verify;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
@ -31,6 +32,7 @@ import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement;
import com.mysema.query.JPATest;
import com.mysema.query.Mode;
/**
@ -43,16 +45,17 @@ public class JPATestRunner extends BlockJUnit4ClassRunner {
private EntityManager entityManager;
private Method setter;
private boolean isDerby;
public JPATestRunner(Class<?> klass) throws InitializationError{
public JPATestRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected List<MethodRule> rules(Object test) {
verify(test instanceof JPATest, "In order to use the %s for %s, it should (directly or indirectly) implement %s",
JPATestRunner.class.getSimpleName(), test.getClass(), JPATest.class);
List<MethodRule> rules = super.rules(test);
rules.add(new MethodRule() {
@Override
@ -60,10 +63,7 @@ public class JPATestRunner extends BlockJUnit4ClassRunner {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (setter == null) {
setter = target.getClass().getMethod("setEntityManager", EntityManager.class);
}
setter.invoke(target, entityManager);
((JPATest) target).setEntityManager(entityManager);
base.evaluate();
}
};

View File

@ -3,12 +3,12 @@ package com.mysema.query.suites;
import java.sql.SQLException;
import org.junit.AfterClass;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import com.mysema.query.Connections;
import com.mysema.testutil.CustomSuite;
@RunWith(CustomSuite.class)
@RunWith(Enclosed.class)
public abstract class AbstractSuite {
@AfterClass
@ -16,4 +16,4 @@ public abstract class AbstractSuite {
Connections.close();
}
}
}