1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.internal.builders; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.RunWith; 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.Runner; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.InitializationError; 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.RunnerBuilder; 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class AnnotatedBuilder extends RunnerBuilder { 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private static final String CONSTRUCTOR_ERROR_FORMAT= "Custom runner class %s should have a public constructor with signature %s(Class testClass)"; 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private RunnerBuilder fSuiteBuilder; 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public AnnotatedBuilder(RunnerBuilder suiteBuilder) { 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fSuiteBuilder= suiteBuilder; 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Runner runnerForClass(Class<?> testClass) throws Exception { 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot RunWith annotation= testClass.getAnnotation(RunWith.class); 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (annotation != null) 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return buildRunner(annotation.value(), testClass); 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return null; 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Runner buildRunner(Class<? extends Runner> runnerClass, 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Class<?> testClass) throws Exception { 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return runnerClass.getConstructor(Class.class).newInstance( 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot new Object[] { testClass }); 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (NoSuchMethodException e) { 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return runnerClass.getConstructor(Class.class, 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot RunnerBuilder.class).newInstance( 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot new Object[] { testClass, fSuiteBuilder }); 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (NoSuchMethodException e2) { 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot String simpleName= runnerClass.getSimpleName(); 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot throw new InitializationError(String.format( 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot CONSTRUCTOR_ERROR_FORMAT, simpleName, simpleName)); 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}