/******************************************************************************* * 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(); } }