X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Ftest%2Finject%2FJavaEETestInjectorFactoryTest.java;h=4ad8cad8a0984ffe8181b64bca68adbab94bee91;hb=ca6cd90ac2aeca2f61320ac15c2403dde120f3de;hp=682ea88256adb646ad35e7fe9f25809c47d47283;hpb=3176eb654a388bda2eefced0debd6cf698fe5092;p=utils diff --git a/test/enterprise/src/test/java/org/wamblee/test/inject/JavaEETestInjectorFactoryTest.java b/test/enterprise/src/test/java/org/wamblee/test/inject/JavaEETestInjectorFactoryTest.java index 682ea882..4ad8cad8 100644 --- a/test/enterprise/src/test/java/org/wamblee/test/inject/JavaEETestInjectorFactoryTest.java +++ b/test/enterprise/src/test/java/org/wamblee/test/inject/JavaEETestInjectorFactoryTest.java @@ -1,54 +1,126 @@ +/* + * 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.test.inject; +import static junit.framework.Assert.*; +import static org.mockito.Mockito.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; + import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import org.junit.Before; import org.junit.Test; +import org.mockito.Mock; import org.wamblee.inject.InjectorBuilder; - -import static org.mockito.Mockito.*; -import static junit.framework.TestCase.*; +import org.wamblee.reflection.ObjectTraversal; public class JavaEETestInjectorFactoryTest { - - @PersistenceContext - private EntityManager entityManager; - - private EntityManager entityManager2; - - @PersistenceContext - public EntityManager getEntityManager() { - return entityManager2; + + @Before + public void setUp() { + ObjectTraversal.LOGGER.setLevel(Level.FINEST); + ConsoleHandler handler = new ConsoleHandler(); + handler.setLevel(Level.FINEST); + ObjectTraversal.LOGGER.addHandler(handler); } - - public void setEntityManager(EntityManager aEm) { - entityManager2 = aEm; + + public static final class X { + + @PersistenceContext + private EntityManager entityManager; + + private EntityManager entityManager2; + + @PersistenceContext + public EntityManager getEntityManager() { + return entityManager2; + } + + public void setEntityManager(EntityManager aEm) { + entityManager2 = aEm; + } } @Test - public void testXyz() { + public void testXyz() { EntityManager em = mock(EntityManager.class); - InjectorBuilder.setInjectorFactory(new JavaEETestInjectorFactory(em)); - - assertNull(entityManager); - assertNull(entityManager2); - InjectorBuilder.getInjector().inject(this); - + InjectorBuilder.setInjectorFactory(new JavaEETestInjectorFactory().addEntityManagerBinding(em)); + + X x = new X(); + + assertNull(x.entityManager); + assertNull(x.entityManager2); + InjectorBuilder.getInjector().inject(x); + assertNotNull(em); - assertSame(em, entityManager); - assertSame(em, entityManager2); + assertSame(em, x.entityManager); + assertSame(em, x.entityManager2); + } - - public static class X { + + public static class Y { @PersistenceContext - Integer wrongType; + Integer wrongType; } - - @Test(expected = IllegalArgumentException.class) - public void testWrongType() { + + @Test + public void testWrongType() { EntityManager em = mock(EntityManager.class); - InjectorBuilder.setInjectorFactory(new JavaEETestInjectorFactory(em)); - X x= new X(); - InjectorBuilder.getInjector().inject(x); + InjectorBuilder.setInjectorFactory(new JavaEETestInjectorFactory().addEntityManagerBinding(em)); + Y y = new Y(); + InjectorBuilder.getInjector().inject(y); + assertNull(y.wrongType); + } + + @Retention(RetentionPolicy.RUNTIME) + @Target( { ElementType.FIELD, ElementType.METHOD }) + public static @interface MyAnnotation { + } + + public static class Z { + @MyAnnotation + private int x; + + // any annotation will force traversal. + @Mock + private Z z; + + } + + @Test + public void testCustomInjection() { + JavaEETestInjectorFactory factory = new JavaEETestInjectorFactory(); + factory.addBinding(new Binding(int.class, MyAnnotation.class, 100)); + InjectorBuilder.setInjectorFactory(factory); + + Z z = new Z(); + z.z = new Z(); + assertEquals(0, z.x); + InjectorBuilder.getInjector().inject(z); + assertEquals(100, z.x); + assertEquals(100, z.z.x); + } + + }