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 */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.runners.util; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Constructor; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.InvocationTargetException; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.runners.RunnerImpl; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class RunnerProvider { 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private static boolean hasJUnit45OrHigher; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson static { 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class.forName("org.junit.runners.BlockJUnit4ClassRunner"); 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson hasJUnit45OrHigher = true; 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (Throwable t) { 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson hasJUnit45OrHigher = false; 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public boolean isJUnit45OrHigherAvailable() { 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return hasJUnit45OrHigher; 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public RunnerImpl newInstance(String runnerClassName, Class<?> constructorParam) throws Exception { 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Constructor<?> constructor; 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?> runnerClass = Class.forName(runnerClassName); 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson constructor = runnerClass.getConstructor(Class.class.getClass()); 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (Exception e) { 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new RuntimeException(e); 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return (RunnerImpl) constructor.newInstance(constructorParam); 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (InvocationTargetException e) { 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw e; 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (Exception e) { 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new RuntimeException(e); 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}