/* * JBoss, Home of Professional Open Source * Copyright 2015, Red Hat, Inc., and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed 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.jboss.weld.tests.extensions.custombeans; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Set; import javax.enterprise.context.Dependent; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.Extension; import javax.enterprise.util.TypeLiteral; 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.WebArchive; import org.jboss.weld.test.util.Utils; import org.junit.Test; import org.junit.runner.RunWith; /** * * @author Martin Kouba */ @RunWith(Arquillian.class) public class BeanConfiguratorTest { @Deployment public static WebArchive createTestArchive() { return ShrinkWrap.create(WebArchive.class, Utils.getDeploymentNameAsHash(BeanConfiguratorTest.class, Utils.ARCHIVE_TYPE.WAR)) .addPackage(BeanConfiguratorTest.class.getPackage()) .addAsServiceProvider(Extension.class, BuilderExtension.class) .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); } @SuppressWarnings({ "unchecked", "serial" }) @Test public void testConfigurator(BeanManager beanManager) throws Exception { Set<Bean<?>> beans = beanManager.getBeans("bar"); assertEquals(1, beans.size()); Bean<Foo> fooBean = (Bean<Foo>) beans.iterator().next(); assertEquals(Dependent.class, fooBean.getScope()); Foo foo1 = (Foo) beanManager.getReference(fooBean, Foo.class, beanManager.createCreationalContext(fooBean)); Foo foo2 = (Foo) beanManager.getReference(fooBean, Foo.class, beanManager.createCreationalContext(fooBean)); assertFalse(foo1.getId().equals(foo2.getId())); beans = beanManager.getBeans(Foo.class, Juicy.Literal.INSTANCE); assertEquals(1, beans.size()); fooBean = (Bean<Foo>) beans.iterator().next(); Foo foo = (Foo) beanManager.getReference(fooBean, Foo.class, beanManager.createCreationalContext(fooBean)); foo.ping(); beans = beanManager.getBeans(Integer.class, Random.Literal.INSTANCE); assertEquals(1, beans.size()); Bean<Integer> randomBean = (Bean<Integer>) beans.iterator().next(); CreationalContext<Integer> ctx = beanManager.createCreationalContext(randomBean); Integer random = (Integer) beanManager.getReference(randomBean, Integer.class, ctx); assertNotNull(random); assertTrue(random >= 0 && random < 1000); randomBean.destroy(random, ctx); assertTrue(BuilderExtension.DISPOSED.get()); beans = beanManager.getBeans(Long.class, AnotherRandom.Literal.INSTANCE); assertEquals(1, beans.size()); Bean<Long> anotherRandomBean = (Bean<Long>) beans.iterator().next(); Long anotherRandom = (Long) beanManager.getReference(anotherRandomBean, Long.class, beanManager.createCreationalContext(anotherRandomBean)); assertNotNull(anotherRandom); assertEquals(Long.valueOf(foo.getId() * 2), anotherRandom); beans = beanManager.getBeans(Bar.class); assertEquals(1, beans.size()); Bean<Bar> barBean = (Bean<Bar>) beans.iterator().next(); assertEquals(Dependent.class, barBean.getScope()); beans = beanManager.getBeans(new TypeLiteral<List<String>>() { }.getType(), Juicy.Literal.INSTANCE); assertEquals(1, beans.size()); Bean<List<String>> listBean = (Bean<List<String>>) beans.iterator().next(); assertEquals(Dependent.class, listBean.getScope()); List<String> list = (List<String>) beanManager.getReference(listBean, new TypeLiteral<List<String>>() { }.getType(), beanManager.createCreationalContext(listBean)); assertNotNull(list); assertEquals(1, list.size()); assertEquals("FOO", list.get(0)); beans = beanManager.getBeans(VetoedBean.class, Random.Literal.INSTANCE); assertEquals(1, beans.size()); fooBean = (Bean<Foo>) beans.iterator().next(); assertEquals(Dependent.class, fooBean.getScope()); Foo randomFoo = (Foo) beanManager.getReference(fooBean, Foo.class, beanManager.createCreationalContext(listBean)); assertEquals(Long.valueOf(-1), randomFoo.getId()); beans = beanManager.getBeans(Configuration.class); assertEquals(1, beans.size()); Bean<Configuration> configBean = (Bean<Configuration>) beans.iterator().next(); assertEquals(Dependent.class, configBean.getScope()); Configuration configuration = (Configuration) beanManager.getReference(configBean, Configuration.class, beanManager.createCreationalContext(configBean)); assertEquals(1, configuration.getId()); beans = beanManager.getBeans(Integer.class, Bla.Literal.of("dependent")); assertEquals(1, beans.size()); Bean<Configuration> blaBean = (Bean<Configuration>) beans.iterator().next(); assertEquals(Dependent.class, blaBean.getScope()); beans = beanManager.getBeans(Integer.class, Bla.Literal.of("model")); assertEquals(1, beans.size()); blaBean = (Bean<Configuration>) beans.iterator().next(); assertEquals(RequestScoped.class, blaBean.getScope()); beans = beanManager.getBeans(Integer.class, Bla.Literal.of("more")); assertEquals(1, beans.size()); blaBean = (Bean<Configuration>) beans.iterator().next(); assertEquals(RequestScoped.class, blaBean.getScope()); } }