/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * 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.errai.cdi.async.test.producers.client; import java.util.List; import org.jboss.errai.cdi.async.test.producers.client.res.AsyncProducerDependentBean; import org.jboss.errai.cdi.async.test.producers.client.res.AsyncSingletonProducerDependentBean; import org.jboss.errai.cdi.async.test.producers.client.res.AustenProducerDependnetBean; import org.jboss.errai.cdi.async.test.producers.client.res.BeanConstrConsumesOwnProducer; import org.jboss.errai.cdi.async.test.producers.client.res.DepBeanProducerConsumer; import org.jboss.errai.cdi.async.test.producers.client.res.Fooblie; import org.jboss.errai.cdi.async.test.producers.client.res.FooblieDependentBean; import org.jboss.errai.cdi.async.test.producers.client.res.FooblieMaker; import org.jboss.errai.cdi.async.test.producers.client.res.PseudoBeanProducerConsumer; import org.jboss.errai.common.client.util.CreationalCallback; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ioc.client.container.async.AsyncBeanFuture; import org.jboss.errai.ioc.client.container.async.AsyncBeanQuery; /** * @author Mike Brock */ public class AsyncProducerTest extends AbstractErraiCDITest { { disableBus = true; } @Override public void gwtSetUp() throws Exception { super.gwtSetUp(); } @Override public String getModuleName() { return "org.jboss.errai.cdi.async.test.producers.AsyncProducerTest"; } public void testProducer() { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(AsyncProducerDependentBean.class) .getInstance(new CreationalCallback<AsyncProducerDependentBean>() { @Override public void callback(final AsyncProducerDependentBean bean) { assertNotNull(bean); assertNotNull(bean.getMaBean()); assertNotNull(bean.getMaBean2()); assertNotSame(bean.getMaBean(), bean.getMaBean2()); finishTest(); } }); } }); } public void testSingletonProducer() { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(AsyncSingletonProducerDependentBean.class) .getInstance(new CreationalCallback<AsyncSingletonProducerDependentBean>() { @Override public void callback(final AsyncSingletonProducerDependentBean bean) { assertNotNull(bean); assertNotNull(bean.getLaBean()); assertNotNull(bean.getLaBean2()); assertSame(bean.getLaBean() + " != " + bean.getLaBean2(), bean.getLaBean(), bean.getLaBean2()); finishTest(); } }); } }); } public void testBeanConstrConsumesOwnProduer() { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(BeanConstrConsumesOwnProducer.class) .getInstance(new CreationalCallback<BeanConstrConsumesOwnProducer>() { @Override public void callback(final BeanConstrConsumesOwnProducer bean) { assertNotNull(bean); assertNotNull(bean.getWrappedKitten()); assertNotNull(bean.getWrappedKitten().getKitten()); finishTest(); } }); } }); } public void testProducerFromBeanIntoBean() { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(BeanConstrConsumesOwnProducer.class) .getInstance(new CreationalCallback<BeanConstrConsumesOwnProducer>() { @Override public void callback(final BeanConstrConsumesOwnProducer bean) { assertNotNull(bean); assertNotNull(bean.getWrappedKitten()); assertNotNull(bean.getWrappedKitten().getKitten()); finishTest(); } }); } }); } public void testProducerAcceptingInterfaceType() { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(AustenProducerDependnetBean.class) .getInstance(new CreationalCallback<AustenProducerDependnetBean>() { @Override public void callback(final AustenProducerDependnetBean bean) { assertNotNull(bean); assertNotNull(bean.getAusten()); finishTest(); } }); } }); } public void testDisposerMethod() { asyncTest(new Runnable() { @Override public void run() { final AsyncBeanQuery beanQuery = new AsyncBeanQuery(); final AsyncBeanFuture<FooblieMaker> makerFuture = beanQuery.load(FooblieMaker.class); final AsyncBeanFuture<FooblieDependentBean> fooblieDependentFuture1 = beanQuery.load(FooblieDependentBean.class); final AsyncBeanFuture<FooblieDependentBean> fooblieDependentFuture2 = beanQuery.load(FooblieDependentBean.class); beanQuery.query(new Runnable() { @Override public void run() { final FooblieMaker maker = makerFuture.get(); final FooblieDependentBean fooblieDependentBean1 = fooblieDependentFuture1.get(); final FooblieDependentBean fooblieDependentBean2 = fooblieDependentFuture2.get(); IOC.getAsyncBeanManager().destroyBean(fooblieDependentBean1); IOC.getAsyncBeanManager().destroyBean(fooblieDependentBean2); final List<Fooblie> foobliesResponse = maker.getDestroyedFoobliesResponse(); assertEquals("there should be two destroyed beans", 2, foobliesResponse.size()); assertEquals(fooblieDependentBean1.getFooblieResponse(), foobliesResponse.get(0)); assertEquals(fooblieDependentBean2.getFooblieResponse(), foobliesResponse.get(1)); final List<Fooblie> foobliesGreets = maker.getDestroyedFoobliesGreets(); assertEquals("there should be two destroyed beans", 2, foobliesGreets.size()); assertEquals(fooblieDependentBean1.getFooblieGreets(), foobliesGreets.get(0)); assertEquals(fooblieDependentBean2.getFooblieGreets(), foobliesGreets.get(1)); final List<Fooblie> foobliesParts = maker.getDestroyedFoobliesParts(); assertEquals("there should be two destroyed beans", 2, foobliesParts.size()); assertEquals(fooblieDependentBean1.getFooblieParts(), foobliesParts.get(0)); assertEquals(fooblieDependentBean2.getFooblieParts(), foobliesParts.get(1)); finishTest(); } }); } }); } public void testNormalDependentProducer() throws Exception { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(DepBeanProducerConsumer.class) .getInstance(new CreationalCallback<DepBeanProducerConsumer>() { @Override public void callback(DepBeanProducerConsumer bean) { assertNotNull(bean.getProducable()); finishTest(); } }); } }); } public void testPseudoProducer() throws Exception { asyncTest(new Runnable() { @Override public void run() { IOC.getAsyncBeanManager().lookupBean(PseudoBeanProducerConsumer.class) .getInstance(new CreationalCallback<PseudoBeanProducerConsumer>() { @Override public void callback(PseudoBeanProducerConsumer bean) { assertNotNull(bean.getProducable()); finishTest(); } }); } }); } }