package org.activiti.cdi.test.impl.util;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.*;
import javax.enterprise.inject.Alternative;
import javax.inject.Named;
import org.activiti.cdi.impl.util.ActivitiServices;
import org.activiti.cdi.impl.util.ProgrammaticBeanLookup;
import org.activiti.cdi.test.impl.beans.SpecializedTestBean;
import org.jboss.arquillian.container.test.api.Deployer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
*
* @author Ronny Bräunlich
*
*/
@RunWith(Arquillian.class)
public class ProgrammaticBeanLookupTest {
/**
* Because of all alternatives and specializations I have to handle
* deployment myself
*/
@ArquillianResource
private Deployer deployer;
@Deployment(name = "normal", managed = false)
public static JavaArchive createDeployment() {
return ShrinkWrap
.create(JavaArchive.class)
.addClass(ProgrammaticBeanLookup.class)
.addClass(ActivitiServices.class)
.addAsManifestResource(
"org/activiti/cdi/test/impl/util/beans.xml",
"beans.xml");
}
@Deployment(name = "withAlternative", managed = false)
public static JavaArchive createDeploymentWithAlternative() {
return ShrinkWrap
.create(JavaArchive.class)
.addClass(ProgrammaticBeanLookup.class)
.addClass(ActivitiServices.class)
.addClass(AlternativeTestBean.class)
.addAsManifestResource(
"org/activiti/cdi/test/impl/util/beansWithAlternative.xml",
"beans.xml");
}
@Deployment(name = "withSpecialization", managed = false)
public static JavaArchive createDeploymentWithSpecialization() {
return ShrinkWrap
.create(JavaArchive.class)
.addClass(ProgrammaticBeanLookup.class)
.addClass(ActivitiServices.class)
.addClass(SpecializedTestBean.class)
.addAsManifestResource(
"org/activiti/cdi/test/impl/util/beans.xml",
"beans.xml");
}
@Test
public void testLookupBean() {
deployer.deploy("normal");
Object lookup = ProgrammaticBeanLookup.lookup("testOnly");
assertTrue(lookup.getClass().isAssignableFrom(TestBean.class));
deployer.undeploy("normal");
}
@Test
public void testLookupShouldFindAlternative() {
deployer.deploy("withAlternative");
Object lookup = ProgrammaticBeanLookup.lookup("testOnly");
assertThat(lookup.getClass().getName(),
is(equalTo(AlternativeTestBean.class.getName())));
deployer.undeploy("withAlternative");
}
@Test
public void testLookupShouldFindSpecialization() {
deployer.deploy("withSpecialization");
Object lookup = ProgrammaticBeanLookup.lookup("testOnly");
assertThat(lookup.getClass().getName(),
is(equalTo(SpecializedTestBean.class.getName())));
deployer.undeploy("withSpecialization");
}
@Named("testOnly")
public static class TestBean {
}
@Alternative
@Named("testOnly")
public static class AlternativeTestBean extends TestBean {
}
}