package org.deephacks.confit.test.cdi; import org.deephacks.confit.test.FeatureTestsBuilder.TestRound; import org.deephacks.confit.test.FeatureTestsRunner; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.model.InitializationError; public class CdiFeatureTestsRunner extends FeatureTestsRunner { private Weld weld; private WeldContainer container; public CdiFeatureTestsRunner(final Class<?> cls) throws Throwable { super(cls); } @Override public Object getFeatureTest(Class<?> cls) { return createCdiInstance(cls); } public Object createCdiInstance(Class<?> cls) { try { if (container == null) { this.weld = new Weld(); try { this.container = weld.initialize(); } catch (Exception e) { e.printStackTrace(); throw new InitializationError(e); } } return container.instance().select(cls).get(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } @Override public BlockJUnit4ClassRunner getRunnerForParameters(TestRound round) throws InitializationError { return new CdiTestClassRunnerForParameters(round); } public class CdiTestClassRunnerForParameters extends TestClassRunnerForParameters { public CdiTestClassRunnerForParameters(TestRound round) throws InitializationError { super(round); } @Override public Object createTest() throws Exception { return createCdiInstance(getTestClass().getJavaClass()); } } }