| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.deltaspike.test.core.api.provider; |
| |
| |
| import org.apache.deltaspike.core.api.provider.BeanProvider; |
| import org.apache.deltaspike.core.api.provider.DependentProvider; |
| import org.apache.deltaspike.test.util.ArchiveUtils; |
| import org.apache.deltaspike.test.utils.CdiContainerUnderTest; |
| import org.apache.deltaspike.test.utils.Serializer; |
| import org.jboss.arquillian.container.test.api.Deployment; |
| import org.jboss.arquillian.junit.Arquillian; |
| import org.jboss.shrinkwrap.api.ShrinkWrap; |
| import org.jboss.shrinkwrap.api.asset.EmptyAsset; |
| import org.jboss.shrinkwrap.api.spec.JavaArchive; |
| import org.jboss.shrinkwrap.api.spec.WebArchive; |
| import org.junit.Assert; |
| import org.junit.Assume; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import java.util.List; |
| import java.util.concurrent.ConcurrentHashMap; |
| |
| @RunWith(Arquillian.class) |
| public class BeanProviderTest |
| { |
| private static final String CONTAINER_OWB_1_1_x = "owb-1\\.1\\..*"; |
| private static final String CONTAINER_TOMEE_1_5_x = "tomee-1\\.5\\..*"; |
| |
| |
| /** |
| *X TODO creating a WebArchive is only a workaround because JavaArchive cannot contain other archives. |
| */ |
| @Deployment |
| public static WebArchive deploy() |
| { |
| JavaArchive testJar = ShrinkWrap.create(JavaArchive.class, "beanProviderTest.jar") |
| .addPackage(BeanProviderTest.class.getPackage()) |
| .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); |
| |
| return ShrinkWrap.create(WebArchive.class, "beanProvider.war") |
| .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreArchive()) |
| .addAsLibraries(testJar) |
| .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); |
| } |
| |
| /** |
| * lookup by type |
| */ |
| @Test |
| public void simpleBeanLookupByType() |
| { |
| TestBean testBean = BeanProvider.getContextualReference(TestBean.class, false); |
| |
| Assert.assertNotNull(testBean); |
| } |
| |
| /** |
| * lookup by name with expected type |
| */ |
| @Test |
| public void simpleBeanLookupByName() |
| { |
| TestBean testBean = BeanProvider.getContextualReference("extraNameBean", false, TestBean.class); |
| |
| Assert.assertNotNull(testBean); |
| } |
| |
| /** |
| * lookup by name without type |
| */ |
| @Test |
| public void simpleBeanLookupByNameWithoutType() |
| { |
| { |
| // test with the convenient operator (optional=false implied) |
| Object testBean = BeanProvider.getContextualReference("extraNameBean"); |
| Assert.assertNotNull(testBean); |
| Assert.assertTrue(testBean instanceof TestBean); |
| TestBean tb = (TestBean) testBean; |
| Assert.assertEquals(4711, tb.getI()); |
| } |
| |
| { |
| // test with the 'optional' flag set to false |
| Object testBean = BeanProvider.getContextualReference("extraNameBean", false); |
| Assert.assertNotNull(testBean); |
| Assert.assertTrue(testBean instanceof TestBean); |
| TestBean tb = (TestBean) testBean; |
| Assert.assertEquals(4711, tb.getI()); |
| } |
| |
| { |
| // test by name lookup with the 'optional' flag set to false |
| try |
| { |
| Object testBean = BeanProvider.getContextualReference("thisBeanDoesNotExist"); |
| Assert.fail("BeanProvider#getContextualReference should have blown up with a non-existing bean!"); |
| } |
| catch(IllegalStateException ise) |
| { |
| // all is well, this is exactly what should happen! |
| } |
| } |
| |
| { |
| // test by type lookup with the 'optional' flag set to false |
| try |
| { |
| // guess we can safely assume that there is no producer for a ConcurrentHashMap in the system... |
| ConcurrentHashMap chm = BeanProvider.getContextualReference(ConcurrentHashMap.class); |
| Assert.fail("BeanProvider#getContextualReference should have blown up with a non-existing bean!"); |
| } |
| catch(IllegalStateException ise) |
| { |
| // all is well, this is exactly what should happen! |
| } |
| } |
| |
| |
| } |
| |
| /* |
| * lookup without result |
| */ |
| @Test |
| public void optionalBeanLookup() |
| { |
| NoBean result = BeanProvider.getContextualReference(NoBean.class, true); |
| |
| Assert.assertNull(result); |
| } |
| |
| /* |
| * lookup of all beans of a given type |
| */ |
| @Test |
| public void multiBeanLookupWithDependentBean() throws Exception |
| { |
| List<MultiBean> result = BeanProvider.getContextualReferences(MultiBean.class, false); |
| |
| Assert.assertNotNull(result); |
| |
| Assert.assertEquals(2, result.size()); |
| } |
| |
| /* |
| * lookup of all beans of a given type which aren't dependent scoped |
| */ |
| @Test |
| public void multiBeanLookupWithoutDependentBean() throws Exception |
| { |
| List<MultiBean> result = BeanProvider.getContextualReferences(MultiBean.class, false, false); |
| |
| Assert.assertNotNull(result); |
| |
| Assert.assertEquals(1, result.size()); |
| } |
| |
| /* |
| * create a manual instance, inject dependencies, set values of the dependencies and check the referenced cdi bean |
| */ |
| @Test |
| public void injectBeansInNonManagedInstance() throws Exception |
| { |
| ManualBean manualBean = new ManualBean(); |
| |
| Assert.assertNull(manualBean.getTestBean()); |
| |
| BeanProvider.injectFields(manualBean); |
| |
| Assert.assertNotNull(manualBean.getTestBean()); |
| |
| Assert.assertEquals(4711, manualBean.getTestBean().getI()); |
| |
| int newValue = 14; |
| |
| manualBean.getTestBean().setI(newValue); |
| |
| Assert.assertEquals(newValue, manualBean.getTestBean().getI()); |
| |
| TestBean testBean = BeanProvider.getContextualReference(TestBean.class); |
| |
| Assert.assertEquals(newValue, testBean.getI()); |
| |
| testBean.setI(4711); // reset the value if this test is executed first |
| } |
| |
| @Test |
| public void testDependentBeanResolving() throws Exception |
| { |
| DependentProvider<DependentTestBean> dependentTestBeanProvider = BeanProvider.getDependent(DependentTestBean.class); |
| checkDependentProvider(dependentTestBeanProvider); |
| } |
| |
| @Test |
| public void testNamedDependentBeanResolving() throws Exception |
| { |
| DependentProvider<DependentTestBean> dependentTestBeanProvider = BeanProvider.getDependent("dependentTestBean"); |
| checkDependentProvider(dependentTestBeanProvider); |
| } |
| |
| @Test |
| public void testDependentBeanSerialization() throws Exception |
| { |
| // this test is known to not work under owb-1.1.x as ManagedBean for Dependent scoped classes did not implement PassivationCapable. |
| Assume.assumeTrue(!CdiContainerUnderTest.is(CONTAINER_OWB_1_1_x)); |
| Assume.assumeTrue(!CdiContainerUnderTest.is(CONTAINER_TOMEE_1_5_x)); |
| |
| DependentProvider<DependentTestBean> dependentTestBeanProvider = BeanProvider.getDependent(DependentTestBean.class); |
| |
| Serializer<DependentProvider<DependentTestBean>> serializer = new Serializer<DependentProvider<DependentTestBean>>(); |
| DependentProvider<DependentTestBean> provider2 = serializer.roundTrip(dependentTestBeanProvider); |
| Assert.assertNotNull(provider2); |
| } |
| |
| private void checkDependentProvider(DependentProvider<DependentTestBean> dependentTestBeanProvider) |
| { |
| Assert.assertNotNull(dependentTestBeanProvider); |
| |
| DependentTestBean instance = dependentTestBeanProvider.get(); |
| Assert.assertNotNull(instance); |
| |
| Assert.assertEquals(42, instance.getI()); |
| instance.setI(21); |
| Assert.assertEquals(21, instance.getI()); |
| |
| Assert.assertFalse(instance.isDestroyed()); |
| dependentTestBeanProvider.destroy(); |
| Assert.assertTrue(instance.isDestroyed()); |
| } |
| |
| } |