package org.jboss.weld.tests.injectionPoint.weld1177; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import javax.enterprise.inject.Instance; import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.BeanArchive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.weld.exceptions.IllegalStateException; import org.jboss.weld.test.util.Utils; import org.jboss.weld.tests.category.Integration; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; /** * @author <a href="mailto:mluksa@redhat.com">Marko Luksa</a> */ @RunWith(Arquillian.class) @Category(Integration.class) public class Weld1177Test { @Deployment public static Archive<?> deploy() { return ShrinkWrap.create(BeanArchive.class, Utils.getDeploymentNameAsHash(Weld1177Test.class)) .addPackage(Weld1177Test.class.getPackage()) .addClass(Utils.class); } @Inject private Foo foo; @Inject private Foo foo2; @Inject private Bar bar; @Inject private Baz baz; @Inject private Instance<Foo> fooInstance; @Inject private Instance<Foo> fooInstance2; @Test public void testInjectionPointInManagedBean() throws Exception { assertNotNull(bar.getInjectionPoint()); assertEquals(Weld1177Test.class.getDeclaredField("bar"), bar.getInjectionPointMember()); assertEquals(Bar.class, bar.getInjectionPointType()); } @Test public void testInjectionPointInSLSB() throws Exception { assertEquals(Weld1177Test.class.getDeclaredField("foo"), foo.getInjectionPointMember()); assertEquals(Weld1177Test.class.getDeclaredField("foo2"), foo2.getInjectionPointMember()); assertEquals(Weld1177Test.class.getDeclaredField("baz"), baz.getInjectionPointMember()); assertEquals(Foo.class, foo.getInjectionPointType()); assertEquals(Foo.class, foo2.getInjectionPointType()); assertEquals(Baz.class, baz.getInjectionPointType()); assertEquals(Foo.class.getDeclaredField("bar"), foo.getBarInjectionPointMember()); assertEquals(Foo.class.getDeclaredField("bar"), foo2.getBarInjectionPointMember()); } @Test public void testInjectionPointInSLSBWithInstance() throws Exception { Foo foo = fooInstance.get(); Foo foo2 = fooInstance2.get(); foo.doSomething(); foo2.doSomething(); assertNotNull(foo.getInjectionPoint()); assertNotNull(foo2.getInjectionPoint()); assertEquals(Weld1177Test.class.getDeclaredField("fooInstance"), foo.getInjectionPointMember()); assertEquals(Weld1177Test.class.getDeclaredField("fooInstance2"), foo2.getInjectionPointMember()); assertEquals(Foo.class, foo.getInjectionPointType()); assertEquals(Foo.class, foo2.getInjectionPointType()); } @Test(expected = IllegalStateException.class) public void testInjectionPointOutsideSLSB() throws Exception { assertNotNull(foo.getInjectionPoint()); // This should yield an exception - injection point metadata injected into a stateless session bean may only be accessed within its business method // invocation foo.getInjectionPoint().getType(); } }