1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.internal.runners.util; 62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.runners.InternalRunner; 82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.lang.reflect.Constructor; 102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.lang.reflect.InvocationTargetException; 112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class RunnerProvider { 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public InternalRunner newInstance(String runnerClassName, Object ... constructorArgs) throws Exception { 152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin Constructor<?> constructor; 162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin try { 172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin Class<?> runnerClass = Class.forName(runnerClassName); 182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (runnerClass.getConstructors().length != 1) { 192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new IllegalArgumentException("Expected " + runnerClassName + " to have exactly one constructor."); 202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin constructor = runnerClass.getConstructors()[0]; 222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } catch (Exception e) { 232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new RuntimeException(e); 242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin try { 272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return (InternalRunner) constructor.newInstance(constructorArgs); 282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } catch (InvocationTargetException e) { 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw e; 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } catch (Exception e) { 312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new RuntimeException(e); 322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin} 35