// Path: main/com/dhemery/runtimesuite/ClassFinder.java
// public interface ClassFinder {
// 	/**
// 	 * Finds test classes for possible inclusion in a runtime suite.
// 	 * @return a {@link Collection} of test classes for possible inclusion in a runtime suite.
// 	 * @see RuntimeSuite
// 	 */
// 	Collection<Class<?>> find();
// }
// 
// Path: main/com/dhemery/runtimesuite/RuntimeSuite.java
// public class RuntimeSuite extends ParentRunner<Runner> {
// 	Logger log = LoggerFactory.getLogger(RuntimeSuite.class);
// 	private final List<Runner> runners;
// 	private final SuiteInspector inspector;
// 	private final List<ClassFinder> classFinders;
// 	private final List<ClassFilter> classFilters;
// 	private final List<MethodFilter> methodFilters;
// 
// 	/**
// 	 * Called reflectively by JUnit to initialize a suite before running its tests.
// 	 * @param suiteClass the suite class to execute.
// 	 * @throws InitializationError
// 	 */
// 	public RuntimeSuite(Class<?> suiteClass) throws InitializationError {
// 		super(suiteClass);
// 		log.debug(format("RuntimeSuite(%s)", suiteClass));
// 		inspector = new SuiteInspector(suiteClass);
// 		classFinders = inspector.classFinders();
// 		classFilters = inspector.classFilters();
// 		methodFilters = inspector.methodFilters();
// 		runners = runnersFor(classesInSuite());
// 	}
// 
// 	private Set<Class<?>> classesInSuite() throws InitializationError {
// 		log.debug(format("Running finders %s", classFinders));
// 		Set<Class<?>> classes = new HashSet<Class<?>>();
// 		for(ClassFinder finder : classFinders) {
// 			log.debug(format("Gathering classes from finder %s", finder.getClass()));
// 			classes.addAll(finder.find());
// 		}
// 		return classes;
// 	}
// 
// 	protected Description describeChild(Runner child) {
// 		return child.getDescription();
// 	}
// 
// 	protected List<Runner> getChildren() {	
// 		return runners;
// 	}
// 
// 	/**
// 	 * Used only for testing.
// 	 */
// 	public Collection<Runner> getRunners() {
// 		return getChildren();
// 	}
// 
// 	protected void runChild(Runner child, RunNotifier notifier) {
// 		child.run(notifier);
// 	}
// 
// 	private List<Runner> runnersFor(Collection<Class<?>> classes) throws InitializationError {
// 		log.debug("Making runners");
// 		List<Runner> runners = new ArrayList<Runner>();
// 		for(Class<?> c : classes) {
// 			RunnableClass runnable = new RunnableClass(c, classFilters, methodFilters);
// 			if(runnable.isRunnable()) {
// 				log.debug(format("Class %s is runnable", c));
// 				runners.add(runnable.runner());
// 			} else {
// 				log.debug(format("Class %s is not runnable", c));
// 			}
// 		}
// 		return runners;
// 	}
// }
// 
// Path: main/com/dhemery/runtimesuite/finders/ListedClasses.java
// public class ListedClasses implements ClassFinder {
// 	private Collection<Class<?>> classes;
// 
// 	/**
// 	 * @param classes the list of classes to find.
// 	 */
// 	public ListedClasses(Class<?>...classes) {
// 		this.classes = Arrays.asList(classes);
// 	}
// 
// 	/**
// 	 * Finds all classes passed to this finder's constructor.
// 	 * @return a {@link Collection} that contains all classes passed to this finder's constructor.
// 	 */
// 	public Collection<Class<?>> find() {
// 		return classes;
// 	}
// }
// 
// Path: examples/example/tests/Runnable1.java
// public class Runnable1 {
// 	@Test public void runnable1() { }
// }
// 
// Path: examples/example/tests/Runnable2.java
// public class Runnable2 {
// 	@Test public void runnable2() { }
// }


import org.junit.runner.RunWith;
import com.dhemery.runtimesuite.ClassFinder;
import com.dhemery.runtimesuite.Finder;
import com.dhemery.runtimesuite.RuntimeSuite;
import com.dhemery.runtimesuite.finders.ListedClasses;
import example.tests.Runnable1;
import example.tests.Runnable2;
package example.suites;






@RunWith(RuntimeSuite.class)
public class SuiteWithTwoFinders {
	@Finder public ClassFinder classFinder1 = new ListedClasses(Runnable1.class);
// Path: main/com/dhemery/runtimesuite/ClassFinder.java
// public interface ClassFinder {
// 	/**
// 	 * Finds test classes for possible inclusion in a runtime suite.
// 	 * @return a {@link Collection} of test classes for possible inclusion in a runtime suite.
// 	 * @see RuntimeSuite
// 	 */
// 	Collection<Class<?>> find();
// }
// 
// Path: main/com/dhemery/runtimesuite/RuntimeSuite.java
// public class RuntimeSuite extends ParentRunner<Runner> {
// 	Logger log = LoggerFactory.getLogger(RuntimeSuite.class);
// 	private final List<Runner> runners;
// 	private final SuiteInspector inspector;
// 	private final List<ClassFinder> classFinders;
// 	private final List<ClassFilter> classFilters;
// 	private final List<MethodFilter> methodFilters;
// 
// 	/**
// 	 * Called reflectively by JUnit to initialize a suite before running its tests.
// 	 * @param suiteClass the suite class to execute.
// 	 * @throws InitializationError
// 	 */
// 	public RuntimeSuite(Class<?> suiteClass) throws InitializationError {
// 		super(suiteClass);
// 		log.debug(format("RuntimeSuite(%s)", suiteClass));
// 		inspector = new SuiteInspector(suiteClass);
// 		classFinders = inspector.classFinders();
// 		classFilters = inspector.classFilters();
// 		methodFilters = inspector.methodFilters();
// 		runners = runnersFor(classesInSuite());
// 	}
// 
// 	private Set<Class<?>> classesInSuite() throws InitializationError {
// 		log.debug(format("Running finders %s", classFinders));
// 		Set<Class<?>> classes = new HashSet<Class<?>>();
// 		for(ClassFinder finder : classFinders) {
// 			log.debug(format("Gathering classes from finder %s", finder.getClass()));
// 			classes.addAll(finder.find());
// 		}
// 		return classes;
// 	}
// 
// 	protected Description describeChild(Runner child) {
// 		return child.getDescription();
// 	}
// 
// 	protected List<Runner> getChildren() {	
// 		return runners;
// 	}
// 
// 	/**
// 	 * Used only for testing.
// 	 */
// 	public Collection<Runner> getRunners() {
// 		return getChildren();
// 	}
// 
// 	protected void runChild(Runner child, RunNotifier notifier) {
// 		child.run(notifier);
// 	}
// 
// 	private List<Runner> runnersFor(Collection<Class<?>> classes) throws InitializationError {
// 		log.debug("Making runners");
// 		List<Runner> runners = new ArrayList<Runner>();
// 		for(Class<?> c : classes) {
// 			RunnableClass runnable = new RunnableClass(c, classFilters, methodFilters);
// 			if(runnable.isRunnable()) {
// 				log.debug(format("Class %s is runnable", c));
// 				runners.add(runnable.runner());
// 			} else {
// 				log.debug(format("Class %s is not runnable", c));
// 			}
// 		}
// 		return runners;
// 	}
// }
// 
// Path: main/com/dhemery/runtimesuite/finders/ListedClasses.java
// public class ListedClasses implements ClassFinder {
// 	private Collection<Class<?>> classes;
// 
// 	/**
// 	 * @param classes the list of classes to find.
// 	 */
// 	public ListedClasses(Class<?>...classes) {
// 		this.classes = Arrays.asList(classes);
// 	}
// 
// 	/**
// 	 * Finds all classes passed to this finder's constructor.
// 	 * @return a {@link Collection} that contains all classes passed to this finder's constructor.
// 	 */
// 	public Collection<Class<?>> find() {
// 		return classes;
// 	}
// }
// 
// Path: examples/example/tests/Runnable1.java
// public class Runnable1 {
// 	@Test public void runnable1() { }
// }
// 
// Path: examples/example/tests/Runnable2.java
// public class Runnable2 {
// 	@Test public void runnable2() { }
// }


// Path: examples/example/suites/SuiteWithTwoFinders.java
import org.junit.runner.RunWith;
import com.dhemery.runtimesuite.ClassFinder;
import com.dhemery.runtimesuite.Finder;
import com.dhemery.runtimesuite.RuntimeSuite;
import com.dhemery.runtimesuite.finders.ListedClasses;
import example.tests.Runnable1;
import example.tests.Runnable2;

package example.suites;






@RunWith(RuntimeSuite.class)
public class SuiteWithTwoFinders {
	@Finder public ClassFinder classFinder1 = new ListedClasses(Runnable1.class);
	@Finder public ClassFinder classFinder2 = new ListedClasses(Runnable2.class);