package org.hibernate.tools.test.util; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.runner.Runner; import org.junit.runner.notification.RunNotifier; import org.junit.runners.Suite; import org.junit.runners.model.InitializationError; import org.junit.runners.model.RunnerBuilder; public class DbSuite extends Suite { public static final String SQL_SCRIPT_ROOT = "org.hibernate.tools.test.db.sqlScriptRoot"; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface SqlScriptRoot { public String value(); } boolean ignore = false; String sqlScriptRoot; public DbSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError { super(klass, builder); ignore = !JdbcUtil.isDatabaseOnline(); setSqlScriptRoot(klass); } @Override protected void runChild(Runner runner, final RunNotifier notifier) { if (!ignore) { if (sqlScriptRoot != null) { System.setProperty( SQL_SCRIPT_ROOT, sqlScriptRoot); } runner.run(notifier); if (sqlScriptRoot != null) { System.getProperties().remove( SQL_SCRIPT_ROOT); } } else { notifier.fireTestIgnored(getDescription()); } } private void setSqlScriptRoot(Class<?> klass) { SqlScriptRoot annotation = klass.getAnnotation(SqlScriptRoot.class); if (annotation != null) { sqlScriptRoot = annotation.value(); } } }