1package org.junit.runner;
2
3import org.junit.runners.Suite;
4import org.junit.runners.model.InitializationError;
5import org.junit.runners.model.RunnerBuilder;
6
7/**
8 * Represents a strategy for computing runners and suites.
9 * WARNING: this class is very likely to undergo serious changes in version 4.8 and
10 * beyond.
11 */
12public class Computer {
13	/**
14	 * Returns a new default computer, which runs tests in serial order
15	 */
16	public static Computer serial() {
17		return new Computer();
18	}
19
20	/**
21	 * Create a suite for {@code classes}, building Runners with {@code builder}.
22	 * Throws an InitializationError if Runner construction fails
23	 */
24	public Runner getSuite(final RunnerBuilder builder,
25			Class<?>[] classes) throws InitializationError {
26		return new Suite(new RunnerBuilder() {
27			@Override
28			public Runner runnerForClass(Class<?> testClass) throws Throwable {
29				return getRunner(builder, testClass);
30			}
31		}, classes);
32	}
33
34	/**
35	 * Create a single-class runner for {@code testClass}, using {@code builder}
36	 */
37	protected Runner getRunner(RunnerBuilder builder, Class<?> testClass) throws Throwable {
38		return builder.runnerForClass(testClass);
39	}
40}
41