summaryrefslogtreecommitdiffstats
path: root/junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java')
-rw-r--r--junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java b/junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java
new file mode 100644
index 0000000..8ed9ca7
--- /dev/null
+++ b/junit4/src/main/java/org/junit/internal/builders/AnnotatedBuilder.java
@@ -0,0 +1,45 @@
+/**
+ *
+ */
+package org.junit.internal.builders;
+
+import org.junit.runner.RunWith;
+import org.junit.runner.Runner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.RunnerBuilder;
+
+public class AnnotatedBuilder extends RunnerBuilder {
+ private static final String CONSTRUCTOR_ERROR_FORMAT= "Custom runner class %s should have a public constructor with signature %s(Class testClass)";
+
+ private RunnerBuilder fSuiteBuilder;
+
+ public AnnotatedBuilder(RunnerBuilder suiteBuilder) {
+ fSuiteBuilder= suiteBuilder;
+ }
+
+ @Override
+ public Runner runnerForClass(Class<?> testClass) throws Exception {
+ RunWith annotation= testClass.getAnnotation(RunWith.class);
+ if (annotation != null)
+ return buildRunner(annotation.value(), testClass);
+ return null;
+ }
+
+ public Runner buildRunner(Class<? extends Runner> runnerClass,
+ Class<?> testClass) throws Exception {
+ try {
+ return runnerClass.getConstructor(Class.class).newInstance(
+ new Object[] { testClass });
+ } catch (NoSuchMethodException e) {
+ try {
+ return runnerClass.getConstructor(Class.class,
+ RunnerBuilder.class).newInstance(
+ new Object[] { testClass, fSuiteBuilder });
+ } catch (NoSuchMethodException e2) {
+ String simpleName= runnerClass.getSimpleName();
+ throw new InitializationError(String.format(
+ CONSTRUCTOR_ERROR_FORMAT, simpleName, simpleName));
+ }
+ }
+ }
+} \ No newline at end of file