package br.com.geraldoferraz.testyourquery.config; import java.lang.reflect.Constructor; import br.com.geraldoferraz.testyourquery.runner.Runner; import br.com.geraldoferraz.testyourquery.runner.RunnerSessionPerTest; import br.com.geraldoferraz.testyourquery.runner.RunnerSessionPerTestCase; import br.com.geraldoferraz.testyourquery.util.reflection.ClassReflector; public enum SessionMode { PER_TEST(RunnerSessionPerTest.class), PER_TEST_CASE(RunnerSessionPerTestCase.class); private Class<? extends Runner> runnerClass; private SessionMode(Class<? extends Runner> runnerClass) { this.runnerClass = runnerClass; } public Runner newInstance(Configuration configuration, ClassReflector classReflector) { try { Constructor<? extends Runner> constructor = this.runnerClass.getConstructor(ClassReflector.class, Configuration.class); return constructor.newInstance(classReflector, configuration); } catch (Exception e) { throw new RuntimeException(e); } } }