blob: b310167abb4c29a4e3339ae3989c10c20cdd8a56 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* JulianSommerfeldt
* jsommerfeldt
******************************************************************************/
package org.eclipse.emf.emfstore.client.test.common.util;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.List;
import org.junit.runner.Runner;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
/**
* {@link Suite} to filter tests and run only when runFuzzyTests system property is true.
*
* @author Julian Sommerfeldt
*
*/
public class FilteredSuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>.
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError if a class could not be initialized.
*/
public FilteredSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
}
@Override
protected List<Runner> getChildren() {
boolean fsParameter = false;
for (final Annotation annotation : getTestClass().getAnnotations()) {
if (annotation instanceof FilteredSuiteParameter) {
for (final String par : ((FilteredSuiteParameter) annotation).value()) {
if (Boolean.parseBoolean(System.getProperty(par))) {
return super.getChildren();
}
}
fsParameter = true;
}
}
if (fsParameter) {
return new ArrayList<Runner>();
}
return super.getChildren();
}
/**
* Annotation to configure the system parameters.
*
* @author jsommerfeldt
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface FilteredSuiteParameter {
/**
* The system parameters to enable the suite.
*/
String[] value();
}
}