// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.cdi.websocket.basicscope; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; import java.util.Set; import javax.enterprise.inject.spi.Bean; import org.eclipse.jetty.cdi.core.AnyLiteral; import org.eclipse.jetty.cdi.core.ScopedInstance; import org.eclipse.jetty.cdi.core.logging.Logging; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class ScopeBasicsTest { private static Weld weld; private static WeldContainer container; @BeforeClass public static void startWeld() { Logging.config(); weld = new Weld(); container = weld.initialize(); } @AfterClass public static void stopWeld() { weld.shutdown(); } /** * Validation of Scope / Inject logic on non-websocket-scoped classes * @throws Exception on test failure */ @Test public void testBasicBehavior() throws Exception { ScopedInstance<Meal> meal1Bean = newInstance(Meal.class); Meal meal1 = meal1Bean.instance; ScopedInstance<Meal> meal2Bean = newInstance(Meal.class); Meal meal2 = meal2Bean.instance; assertThat("Meals are not the same",meal1,not(sameInstance(meal2))); assertThat("Meal 1 Entree Constructed",meal1.getEntree().isConstructed(),is(true)); assertThat("Meal 1 Side Constructed",meal1.getSide().isConstructed(),is(true)); assertThat("Meal parts not the same",meal1.getEntree(),not(sameInstance(meal1.getSide()))); assertThat("Meal entrees are the same",meal1.getEntree(),not(sameInstance(meal2.getEntree()))); assertThat("Meal sides are the same",meal1.getSide(),not(sameInstance(meal2.getSide()))); } @SuppressWarnings({ "rawtypes", "unchecked" }) public static <T> ScopedInstance<T> newInstance(Class<T> clazz) throws Exception { ScopedInstance sbean = new ScopedInstance(); Set<Bean<?>> beans = container.getBeanManager().getBeans(clazz,AnyLiteral.INSTANCE); if (beans.size() > 0) { sbean.bean = beans.iterator().next(); sbean.creationalContext = container.getBeanManager().createCreationalContext(sbean.bean); sbean.instance = container.getBeanManager().getReference(sbean.bean,clazz,sbean.creationalContext); return sbean; } else { throw new Exception(String.format("Can't find class %s",clazz)); } } }