/* * Copyright 2005-2010 the original author or authors. * * 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.wamblee.cdi; import static junit.framework.Assert.*; import static org.mockito.Mockito.*; import javax.naming.InitialContext; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.wamblee.inject.Injector; import org.wamblee.inject.InjectorFactory; import org.wamblee.inject.SimpleInjector; import org.wamblee.support.jndi.StubInitialContextFactory; public class SimpleInjectorTest { private BeanManagerSetup setup; @Before public void setUp() throws Exception { setup = new BeanManagerSetup(); setup.initialize(); StubInitialContextFactory.register(); InitialContext ctx = new InitialContext(); ctx.bind(BeanManagerLookup.BEAN_MANAGER_JNDI, setup.getBeanManager()); MySingleton.reset(); } @After public void tearDown() { StubInitialContextFactory.unregister(); setup.shutdown(); } @Test public void testGetSingleton() { MyPojo pojo = new MyPojo(); SimpleInjector injector = new SimpleInjector(new CdiInjectorFactory(BeanManagerLookup.lookup())); injector.inject(pojo); MySingleton obj = pojo.getSingleton(); assertNotNull(obj); MyPojo pojo2 = new MyPojo(); injector.inject(pojo2); // Objects will not be the same as they are contextual references to the // same object. // assertSame(pojo2, pojo); assertEquals(1, MySingleton.getInstances()); } @Test public void testGetSingletonCustomInjector() { MyPojo pojo = new MyPojo(); InjectorFactory factory = mock(InjectorFactory.class); SimpleInjector injector = new SimpleInjector(factory); final MySingleton singleton = new MySingleton(); when(factory.create(MyPojo.class)).thenReturn(new Injector() { @Override public void inject(Object aComponent) { MyPojo pojo2 = (MyPojo) aComponent; pojo2.setSingleton(singleton); } }); injector.inject(pojo); // verify the custom injector was called. assertSame(singleton, pojo.getSingleton()); } }