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