/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * 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.seasar.framework.container.factory; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import javax.ejb.EJBException; import org.seasar.extension.unit.S2TestCase; import org.seasar.framework.aop.interceptors.TraceInterceptor; import org.seasar.framework.beans.BeanDesc; import org.seasar.framework.beans.PropertyDesc; import org.seasar.framework.beans.factory.BeanDescFactory; import org.seasar.framework.container.AspectDef; import org.seasar.framework.container.AutoBindingDef; import org.seasar.framework.container.ComponentDef; import org.seasar.framework.container.DestroyMethodDef; import org.seasar.framework.container.IllegalDestroyMethodAnnotationRuntimeException; import org.seasar.framework.container.IllegalInitMethodAnnotationRuntimeException; import org.seasar.framework.container.InitMethodDef; import org.seasar.framework.container.InstanceDef; import org.seasar.framework.container.InterTypeDef; import org.seasar.framework.container.PropertyDef; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.assembler.AutoBindingDefFactory; import org.seasar.framework.container.deployer.InstanceDefFactory; import org.seasar.framework.container.factory.component.EJB3ComponentDefBuilder; import org.seasar.framework.container.factory.component.PojoComponentDefBuilder; import org.seasar.framework.container.factory.property.BindingPropertyDefBuilder; import org.seasar.framework.container.factory.property.EJBPropertyDefBuilder; import org.seasar.framework.container.factory.property.PersistenceContextPropertyDefBuilder; import org.seasar.framework.container.factory.property.PersistenceUnitPropertyDefBuilder; import org.seasar.framework.container.factory.property.ResourcePropertyDefBuilder; import org.seasar.framework.container.impl.ComponentDefImpl; import org.seasar.framework.container.impl.PropertyDefImpl; import org.seasar.framework.container.impl.S2ContainerImpl; import org.seasar.framework.container.ognl.OgnlExpression; import org.seasar.framework.ejb.SEJBException; import org.seasar.framework.jpa.impl.TxScopedEntityManagerProxy; /** * @author higa */ public class TigerAnnotationHandlerTest extends S2TestCase { private TigerAnnotationHandler handler = new TigerAnnotationHandler(); @Override protected void setUp() throws Exception { super.setUp(); TigerAnnotationHandler.initialize(); } /** * @throws Exception */ public void testCreateComponentDef() throws Exception { assertNotNull(handler.createComponentDef(Hoge.class, null)); ComponentDef cd = handler.createComponentDef(Hoge2.class, null); assertEquals("aaa", cd.getComponentName()); assertEquals("prototype", cd.getInstanceDef().getName()); assertEquals("property", cd.getAutoBindingDef().getName()); assertTrue(cd.isExternalBinding()); ComponentDef cd2 = handler.createComponentDef(Hoge.class, InstanceDefFactory.REQUEST); assertEquals(InstanceDef.REQUEST_NAME, cd2.getInstanceDef().getName()); assertFalse(cd2.isExternalBinding()); ComponentDef cd3 = handler.createComponentDef(Hoge7.class, null); assertEquals("hoge77", cd3.getComponentName()); assertEquals(InstanceDef.PROTOTYPE_NAME, cd3.getInstanceDef().getName()); assertEquals(AutoBindingDef.SEMIAUTO_NAME, cd3.getAutoBindingDef() .getName()); ComponentDef cd4 = handler.createComponentDef(Hoge8.class, null); assertEquals("hoge7", cd4.getComponentName()); assertEquals(InstanceDef.PROTOTYPE_NAME, cd4.getInstanceDef().getName()); assertEquals(AutoBindingDef.SEMIAUTO_NAME, cd4.getAutoBindingDef() .getName()); ComponentDef cd5 = handler.createComponentDef(Hoge7.class, InstanceDefFactory.REQUEST); assertEquals(InstanceDef.REQUEST_NAME, cd5.getInstanceDef().getName()); ComponentDef cd6 = handler.createComponentDef(Hoge9.class, null); assertEquals("hoge99", cd6.getComponentName()); assertEquals(InstanceDef.PROTOTYPE_NAME, cd6.getInstanceDef().getName()); assertEquals(AutoBindingDef.SEMIAUTO_NAME, cd6.getAutoBindingDef() .getName()); ComponentDef cd7 = handler.createComponentDef(Hoge10.class, null); assertNull(cd7.getComponentName()); assertEquals(InstanceDef.PROTOTYPE_NAME, cd7.getInstanceDef().getName()); assertEquals(AutoBindingDef.SEMIAUTO_NAME, cd7.getAutoBindingDef() .getName()); ComponentDef cd8 = handler.createComponentDef(Hoge9.class, InstanceDefFactory.REQUEST); assertEquals(InstanceDef.REQUEST_NAME, cd8.getInstanceDef().getName()); ComponentDef cd9 = handler.createComponentDef(Hoge.class, InstanceDefFactory.REQUEST, AutoBindingDefFactory.NONE); assertEquals(AutoBindingDef.NONE_NAME, cd9.getAutoBindingDef() .getName()); ComponentDef cd10 = handler.createComponentDef(Hoge2.class, InstanceDefFactory.REQUEST, AutoBindingDefFactory.NONE); assertEquals(AutoBindingDef.PROPERTY_NAME, cd10.getAutoBindingDef() .getName()); ComponentDef cd11 = handler.createComponentDef(Hoge3.class, InstanceDefFactory.REQUEST, AutoBindingDefFactory.NONE); assertEquals(AutoBindingDef.PROPERTY_NAME, cd11.getAutoBindingDef() .getName()); ComponentDef cd12 = handler.createComponentDef(Hoge7.class, InstanceDefFactory.REQUEST, AutoBindingDefFactory.NONE, true); assertTrue(cd12.isExternalBinding()); } /** * @throws Exception */ public void testCreatePropertyDef() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(Hoge.class); PropertyDesc propDesc = beanDesc.getPropertyDesc("aaa"); assertNull("1", handler.createPropertyDef(beanDesc, propDesc)); ComponentDef cd = handler.createComponentDef(Hoge.class, InstanceDefFactory.SINGLETON); handler.appendDI(cd); PropertyDef propDef = cd.getPropertyDef("bbb"); assertEquals("field", propDef.getAccessTypeDef().getName()); assertEquals("hoge", ((OgnlExpression) propDef.getExpression()) .getSource()); propDef = cd.getPropertyDef("ccc"); assertEquals("property", propDef.getAccessTypeDef().getName()); assertEquals("bar", ((OgnlExpression) propDef.getExpression()) .getSource()); propDef = cd.getPropertyDef("ddd"); assertNotNull(propDef); assertEquals("field", propDef.getAccessTypeDef().getName()); assertEquals("ddd", ((OgnlExpression) propDef.getExpression()) .getSource()); beanDesc = BeanDescFactory.getBeanDesc(Hoge2.class); propDesc = beanDesc.getPropertyDesc("aaa"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("2", "aaa", propDef.getPropertyName()); assertEquals("3", "aaa2", ((OgnlExpression) propDef.getExpression()) .getSource()); propDesc = beanDesc.getPropertyDesc("bbb"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("4", "none", propDef.getBindingTypeDef().getName()); } /** * @throws Exception */ public void testCreatePropertyDefForEJB3() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(Hoge2.class); PropertyDesc propDesc = beanDesc.getPropertyDesc("ddd"); PropertyDef propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("1", "ddd", propDef.getPropertyName()); assertNull("2", propDef.getExpression()); propDesc = beanDesc.getPropertyDesc("eee"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("3", "eee2", ((OgnlExpression) propDef.getExpression()) .getSource()); propDesc = beanDesc.getPropertyDesc("iii"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("4", "ejb.iii", ((OgnlExpression) propDef.getExpression()) .getSource()); propDesc = beanDesc.getPropertyDesc("jjj"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("5", "jjj2", ((OgnlExpression) propDef.getExpression()) .getSource()); propDesc = beanDesc.getPropertyDesc("kkk"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("6", "kkk2", ((OgnlExpression) propDef.getExpression()) .getSource()); } /** * @throws Exception */ public void testCreatePropertyDefForEJB3ForField() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(Hoge2.class); Field field = beanDesc.getField("fff"); PropertyDef propDef = handler.createPropertyDef(beanDesc, field); assertEquals("1", "fff", propDef.getPropertyName()); assertNull("2", propDef.getExpression()); field = beanDesc.getField("ggg"); propDef = handler.createPropertyDef(beanDesc, field); assertEquals("3", "ggg2", ((OgnlExpression) propDef.getExpression()) .getSource()); field = beanDesc.getField("hhh"); propDef = handler.createPropertyDef(beanDesc, field); assertEquals("3", "ejb.hhh", ((OgnlExpression) propDef.getExpression()) .getSource()); field = beanDesc.getField("lll"); propDef = handler.createPropertyDef(beanDesc, field); assertEquals("4", "lll2", ((OgnlExpression) propDef.getExpression()) .getSource()); field = beanDesc.getField("mmm"); propDef = handler.createPropertyDef(beanDesc, field); assertEquals("5", "mmm2", ((OgnlExpression) propDef.getExpression()) .getSource()); } /** * @throws Exception */ public void testAppendDIForEJB3() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge2.class, null); handler.appendDI(cd); PropertyDef propDef = cd.getPropertyDef("ggg"); assertEquals("1", "ggg2", ((OgnlExpression) propDef.getExpression()) .getSource()); } /** * @throws Exception */ public void testCreatePropertyDefForConstantAnnotation() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(Hoge.class); PropertyDesc propDesc = beanDesc.getPropertyDesc("aaa"); assertNull("1", handler.createPropertyDef(beanDesc, propDesc)); beanDesc = BeanDescFactory.getBeanDesc(Hoge3.class); propDesc = beanDesc.getPropertyDesc("aaa"); PropertyDef propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("2", "aaa", propDef.getPropertyName()); assertEquals("3", "aaa2", ((OgnlExpression) propDef.getExpression()) .getSource()); propDesc = beanDesc.getPropertyDesc("bbb"); propDef = handler.createPropertyDef(beanDesc, propDesc); assertEquals("4", "none", propDef.getBindingTypeDef().getName()); } /** * @throws Exception */ public void testAppendAspect() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge.class, null); handler.appendAspect(cd); assertEquals("1", 1, cd.getAspectDefSize()); AspectDef aspectDef = cd.getAspectDef(0); assertEquals("2", "aop.traceInterceptor", ((OgnlExpression) aspectDef .getExpression()).getSource()); } /** * @throws Exception */ public void testAppendAspectForMethod() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge4.class, null); handler.appendAspect(cd); assertEquals("1", 1, cd.getAspectDefSize()); AspectDef aspectDef = cd.getAspectDef(0); assertEquals("2", "aop.traceInterceptor", ((OgnlExpression) aspectDef .getExpression()).getSource()); assertTrue("3", aspectDef.getPointcut().isApplied( Hoge4.class.getMethod("getAaa"))); assertFalse("4", aspectDef.getPointcut().isApplied( Hoge4.class.getMethod("getAaa", new Class[] { String.class }))); } /** * @throws Exception */ public void testAppendInterceptorForClass() throws Exception { S2Container container = new S2ContainerImpl(); S2ContainerFactory.include(container, "aop.dicon"); ComponentDef cd = handler.createComponentDef(Hoge20.class, null); container.register(cd); handler.appendAspect(cd); assertEquals(1, cd.getAspectDefSize()); AspectDef aspectDef = cd.getAspectDef(0); assertNotNull(aspectDef.getValue()); assertTrue(aspectDef.getValue() instanceof TraceInterceptor); assertNull(aspectDef.getPointcut()); } /** * @throws Exception */ public void testAppendInterceptorForMethod() throws Exception { S2Container container = new S2ContainerImpl(); S2ContainerFactory.include(container, "aop.dicon"); ComponentDef cd = handler.createComponentDef(Hoge21.class, null); container.register(cd); handler.appendAspect(cd); assertEquals(1, cd.getAspectDefSize()); AspectDef aspectDef = cd.getAspectDef(0); assertTrue(aspectDef.getValue() instanceof TraceInterceptor); assertTrue(aspectDef.getPointcut().isApplied( Hoge21.class.getMethod("foo", null))); assertFalse(aspectDef.getPointcut().isApplied( Hoge21.class.getMethod("bar", null))); } /** * @throws Exception */ public void testAppendAspectForConstantAnnotation() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge3.class, null); handler.appendAspect(cd); assertEquals("1", 1, cd.getAspectDefSize()); AspectDef aspectDef = cd.getAspectDef(0); assertEquals("2", "aop.traceInterceptor", ((OgnlExpression) aspectDef .getExpression()).getSource()); } /** * @throws Exception */ public void testAppendAspectForEJB3CMT1() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendAspect(cd); assertEquals("1", 7, cd.getAspectDefSize()); String[] methodNames = new String[] { "mandatory", "required", "requiresNew", "notSupported", "never", "defaultValue", "notAnnotated" }; Map<String, String> map = gatherAspect(cd, methodNames); assertEquals("2", "ejb3tx.mandatoryTx", map.get("mandatory")); assertEquals("3", "ejb3tx.requiredTx", map.get("required")); assertEquals("4", "ejb3tx.requiresNewTx", map.get("requiresNew")); assertEquals("5", "ejb3tx.notSupportedTx", map.get("notSupported")); assertEquals("6", "ejb3tx.neverTx", map.get("never")); assertEquals("7", "ejb3tx.requiredTx", map.get("defaultValue")); assertEquals("8", "ejb3tx.requiredTx", map.get("notAnnotated")); } /** * @throws Exception */ public void testAppendAspectForEJB3CMT2() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge12.class, null); handler.appendAspect(cd); assertEquals("1", 2, cd.getAspectDefSize()); String[] methodNames = new String[] { "mandatory", "notAnnotated" }; Map<String, String> map = gatherAspect(cd, methodNames); assertEquals("2", "ejb3tx.mandatoryTx", map.get("mandatory")); assertEquals("3", "ejb3tx.requiresNewTx", map.get("notAnnotated")); } /** * @throws Exception */ public void testAppendAspectForEJB3CMT3() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge19Derived.class, null); handler.appendAspect(cd); assertEquals("1", 2, cd.getAspectDefSize()); String[] methodNames = new String[] { "aMethod", "bMethod", "cMethod" }; Map<String, String> map = gatherAspect(cd, methodNames); assertEquals("2", "ejb3tx.requiredTx", map.get("aMethod")); assertNull("3", map.get("bMethod")); assertEquals("4", "ejb3tx.requiresNewTx", map.get("cMethod")); } /** * @throws Exception */ public void testAppendAspectForEJB3BMT() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge13.class, null); handler.appendAspect(cd); assertEquals("1", 0, cd.getAspectDefSize()); } /** * @throws Exception */ public void testAppendAspectForEJB3Interceptor() throws Exception { include("ejb3tx.dicon"); ComponentDef cd = handler.createComponentDef(Hoge14.class, null); handler.appendAspect(cd); handler.appendInterType(cd); register(cd); assertEquals("1", 10, cd.getAspectDefSize()); Hoge14 hoge14 = (Hoge14) cd.getComponent(); assertEquals("2", "start-BEFORE-before-foo-after-AFTER", hoge14 .foo("start")); assertEquals("3", "start-BEFORE-Before-before-bar-after-After-AFTER", hoge14.bar("start")); assertEquals("4", "start-Before-before-baz-after-After", hoge14 .baz("start")); assertEquals("4", "start-hoge", hoge14.hoge("start")); } /** * @throws Exception */ public void testAppendAspectForEJB3InterceptorInvalid1() throws Exception { try { ComponentDef cd = handler.createComponentDef(Hoge15.class, null); handler.appendAspect(cd); fail("1"); } catch (EJBException ex) { System.out.println(ex); } } /** * @throws Exception */ public void testAppendAspectForEJB3InterceptorInvalid2() throws Exception { try { ComponentDef cd = handler.createComponentDef(Hoge16.class, null); handler.appendAspect(cd); fail("1"); } catch (EJBException ex) { System.out.println(ex); } } /** * @throws Exception */ public void testAppendAspectForEJB3InterceptorInvalid3() throws Exception { try { ComponentDef cd = handler.createComponentDef(Hoge17.class, null); handler.appendAspect(cd); fail("1"); } catch (EJBException ex) { System.out.println(ex); } } /** * @throws Exception */ public void testPersistenceContextForEJB3ByField() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(PropertyDefImpl.class); ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("em1"); assertNull(pd1.getExpression()); assertEquals("field", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("em2"); assertNull(pd2.getExpression()); assertEquals("field", pd2.getAccessTypeDef().getName()); ComponentDef cd2 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd2); assertEquals(TxScopedEntityManagerProxy.class, cd2.getComponentClass()); PropertyDef pd3 = cd2.getPropertyDef("emf"); assertEquals("emf", ((OgnlExpression) pd3.getExpression()).getSource()); PropertyDef pd4 = cd.getPropertyDef("em3"); assertNull(pd4.getExpression()); assertEquals("field", pd4.getAccessTypeDef().getName()); ComponentDef cd3 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd4); assertEquals(TxScopedEntityManagerProxy.class, cd3.getComponentClass()); PropertyDef pd5 = cd3.getPropertyDef("emf"); ComponentDef cd4 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd5); assertEquals( "hibernate", ((PersistenceUnitPropertyDefBuilder.PersistenceUnitExpression) cd4 .getExpression()).getUnitName()); } /** * @throws Exception */ public void testPersistenceContextForEJB3ByProperty() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(PropertyDefImpl.class); ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("em4"); assertNull(pd1.getExpression()); assertEquals("property", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("em5"); assertNull(pd2.getExpression()); assertEquals("property", pd2.getAccessTypeDef().getName()); ComponentDef cd2 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd2); assertEquals(TxScopedEntityManagerProxy.class, cd2.getComponentClass()); PropertyDef pd3 = cd2.getPropertyDef("emf"); assertEquals("emf", ((OgnlExpression) pd3.getExpression()).getSource()); PropertyDef pd4 = cd.getPropertyDef("em6"); assertNull(pd4.getExpression()); assertEquals("property", pd4.getAccessTypeDef().getName()); ComponentDef cd3 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd4); assertEquals(TxScopedEntityManagerProxy.class, cd3.getComponentClass()); PropertyDef pd5 = cd3.getPropertyDef("emf"); ComponentDef cd4 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd5); assertEquals( "hibernate", ((PersistenceUnitPropertyDefBuilder.PersistenceUnitExpression) cd4 .getExpression()).getUnitName()); } /** * @throws Exception */ public void testPersistenceUnitForEJB3ByField() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(PropertyDefImpl.class); ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("emf1"); assertNull(pd1.getExpression()); assertEquals("field", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("emf2"); assertEquals("emf", ((OgnlExpression) pd2.getExpression()).getSource()); assertEquals("field", pd2.getAccessTypeDef().getName()); PropertyDef pd3 = cd.getPropertyDef("emf3"); assertNull(pd3.getExpression()); assertEquals("field", pd3.getAccessTypeDef().getName()); ComponentDef cd3 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd3); assertEquals( "hibernate", ((PersistenceUnitPropertyDefBuilder.PersistenceUnitExpression) cd3 .getExpression()).getUnitName()); } /** * @throws Exception */ public void testPersistenceUnitForEJB3ByProperty() throws Exception { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(PropertyDefImpl.class); ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("emf4"); assertNull(pd1.getExpression()); assertEquals("property", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("emf5"); assertEquals("emf", ((OgnlExpression) pd2.getExpression()).getSource()); assertEquals("property", pd2.getAccessTypeDef().getName()); PropertyDef pd3 = cd.getPropertyDef("emf6"); assertNull(pd3.getExpression()); assertEquals("property", pd3.getAccessTypeDef().getName()); ComponentDef cd3 = (ComponentDef) beanDesc .getField("childComponentDef").get(pd3); assertEquals( "hibernate", ((PersistenceUnitPropertyDefBuilder.PersistenceUnitExpression) cd3 .getExpression()).getUnitName()); } /** * @throws Exception */ public void testResourceForEJB3ByField() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("ds1"); assertNull(pd1.getExpression()); assertEquals("field", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("ds2"); assertEquals("jdbc.DataSource", ((OgnlExpression) pd2.getExpression()) .getSource()); assertEquals("field", pd2.getAccessTypeDef().getName()); } /** * @throws Exception */ public void testResourceForEJB3ByProperty() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("ds3"); assertNull(pd1.getExpression()); assertEquals("property", pd1.getAccessTypeDef().getName()); PropertyDef pd2 = cd.getPropertyDef("ds4"); assertEquals("DataSource", ((OgnlExpression) pd2.getExpression()) .getSource()); assertEquals("property", pd2.getAccessTypeDef().getName()); } /** * @throws Exception */ public void testResourceForPojo() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge22.class, null); handler.appendDI(cd); PropertyDef pd1 = cd.getPropertyDef("ds1"); assertNull(pd1.getExpression()); assertEquals("field", pd1.getAccessTypeDef().getName()); } /** * @throws Exception */ public void testInterType() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge.class, null); handler.appendInterType(cd); assertEquals("1", 1, cd.getInterTypeDefSize()); InterTypeDef interTypeDef = cd.getInterTypeDef(0); assertEquals("2", "fieldInterType", ((OgnlExpression) interTypeDef .getExpression()).getSource()); } /** * @throws Exception */ public void testAppendInterTypeForConstantAnnotation() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge3.class, null); handler.appendInterType(cd); assertEquals("1", 1, cd.getInterTypeDefSize()); InterTypeDef interTypeDef = cd.getInterTypeDef(0); assertEquals("2", "fieldInterType", ((OgnlExpression) interTypeDef .getExpression()).getSource()); } /** * @throws Exception */ public void testAppendInitMethod() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge.class, null); handler.appendInitMethod(cd); assertEquals("1", 1, cd.getInitMethodDefSize()); InitMethodDef initMethodDef = cd.getInitMethodDef(0); assertEquals("2", "init", initMethodDef.getMethod().getName()); } /** * @throws Exception */ public void testAppendInitMethodForConstantAnnotation() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge3.class, null); handler.appendInitMethod(cd); assertEquals("1", 1, cd.getInitMethodDefSize()); InitMethodDef initMethodDef = cd.getInitMethodDef(0); assertEquals("2", "init", initMethodDef.getMethodName()); } /** * @throws Exception */ public void setUpAppendInitMethodForDicon() throws Exception { include("TigerAnnotationHandlerTest.dicon"); } /** * @throws Exception */ public void testAppendInitMethodForDicon() throws Exception { ComponentDef cd = getComponentDef(Hoge5.class); assertEquals("1", 1, cd.getInitMethodDefSize()); } /** * @throws Exception */ public void testAppendInitMethodForException() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge6.class, null); try { handler.appendInitMethod(cd); fail("1"); } catch (IllegalInitMethodAnnotationRuntimeException ex) { System.out.println(ex); } } /** * @throws Exception */ public void testAppendInitMethodForEJB3() throws Exception { include("ejb3tx.dicon"); ComponentDef cd = handler.createComponentDef(Hoge11.class, null); handler.appendAspect(cd); handler.appendInterType(cd); handler.appendInitMethod(cd); register(cd); assertEquals("1", 1, cd.getInitMethodDefSize()); InitMethodDef initMethodDef = cd.getInitMethodDef(0); assertEquals("3", "initialize", initMethodDef.getMethod().getName()); cd.init(); Hoge11 hoge = (Hoge11) cd.getComponent(); assertEquals("4", "FOO", hoge.foo); } /** * @throws Exception */ public void testAppendInitMethodForEJB3Exception() throws Exception { try { ComponentDef cd = handler.createComponentDef(Hoge18.class, null); handler.appendInitMethod(cd); fail("1"); } catch (SEJBException ex) { System.out.println(ex); } } /** * @throws Exception */ public void testAppendDestroyMethod() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge.class, null); handler.appendDestroyMethod(cd); assertEquals("1", 1, cd.getDestroyMethodDefSize()); DestroyMethodDef destroyMethodDef = cd.getDestroyMethodDef(0); assertEquals("2", "destroy", destroyMethodDef.getMethod().getName()); } /** * @throws Exception */ public void testAppendDestroyMethodForConstantAnnotation() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge3.class, null); handler.appendDestroyMethod(cd); assertEquals("1", 1, cd.getDestroyMethodDefSize()); DestroyMethodDef destroyMethodDef = cd.getDestroyMethodDef(0); assertEquals("2", "destroy", destroyMethodDef.getMethodName()); } /** * @throws Exception */ public void setUpAppendDestroyMethodForDicon() throws Exception { include("TigerAnnotationHandlerTest.dicon"); } /** * @throws Exception */ public void testAppendDestroyMethodForDicon() throws Exception { ComponentDef cd = getComponentDef(Hoge5.class); assertEquals("1", 1, cd.getDestroyMethodDefSize()); } /** * @throws Exception */ public void testAppendDestroyMethodForException() throws Exception { ComponentDef cd = handler.createComponentDef(Hoge6.class, null); try { handler.appendDestroyMethod(cd); fail("1"); } catch (IllegalDestroyMethodAnnotationRuntimeException ex) { System.out.println(ex); } } /** * */ public void testAddComponentDefFactory() { TigerAnnotationHandler .addComponentDefBuilder(new TestComponentDefFactory()); ComponentDef componentDef = handler.createComponentDef(getClass(), null, null); assertTrue("1", componentDef instanceof TestComponentDef); } /** * */ public void tearDownAddComponentDefFactory() { TigerAnnotationHandler.loadDefaultComponentDefBuilder(); } /** * */ public void testClearAndReloadComponentDefFactory() { assertEquals(2, TigerAnnotationHandler.componentDefBuilders.size()); TigerAnnotationHandler.clearComponentDefBuilder(); assertEquals(0, TigerAnnotationHandler.componentDefBuilders.size()); TigerAnnotationHandler .addComponentDefBuilder(new TestComponentDefFactory()); TigerAnnotationHandler.loadDefaultComponentDefBuilder(); assertEquals(3, TigerAnnotationHandler.componentDefBuilders.size()); assertTrue(TigerAnnotationHandler.componentDefBuilders.get(0) instanceof TestComponentDefFactory); assertTrue(TigerAnnotationHandler.componentDefBuilders.get(1) instanceof EJB3ComponentDefBuilder); assertTrue(TigerAnnotationHandler.componentDefBuilders.get(2) instanceof PojoComponentDefBuilder); } /** * @throws Exception */ public void testAddPropertyDefFactory() throws Exception { TigerAnnotationHandler .addPropertyDefBuilder(new TestPropertyDefFactory()); PropertyDef propertyDef = handler.createPropertyDef(BeanDescFactory .getBeanDesc(getClass()), getClass() .getDeclaredField("handler")); assertTrue("1", propertyDef instanceof TestPropertyDef); } /** * */ public void testClearAndReloadPropertyDefFactory() { assertEquals(5, TigerAnnotationHandler.propertyDefBuilders.size()); TigerAnnotationHandler.clearPropertyDefBuilder(); assertEquals(0, TigerAnnotationHandler.propertyDefBuilders.size()); TigerAnnotationHandler .addPropertyDefBuilder(new TestPropertyDefFactory()); TigerAnnotationHandler.loadDefaultPropertyDefBuilder(); assertEquals(5, TigerAnnotationHandler.propertyDefBuilders.size()); assertTrue(TigerAnnotationHandler.propertyDefBuilders.get(0) instanceof BindingPropertyDefBuilder); assertTrue(TigerAnnotationHandler.propertyDefBuilders.get(1) instanceof EJBPropertyDefBuilder); assertTrue(TigerAnnotationHandler.propertyDefBuilders.get(2) instanceof PersistenceContextPropertyDefBuilder); assertTrue(TigerAnnotationHandler.propertyDefBuilders.get(3) instanceof PersistenceUnitPropertyDefBuilder); assertTrue(TigerAnnotationHandler.propertyDefBuilders.get(4) instanceof ResourcePropertyDefBuilder); } /** * @throws Exception */ public void tearDownAddPropertyDefFactory() throws Exception { TigerAnnotationHandler.loadDefaultPropertyDefBuilder(); } private Map<String, String> gatherAspect(ComponentDef cd, String[] methodNames) throws NoSuchMethodException { Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < methodNames.length; ++i) { Method method = cd.getComponentClass().getMethod(methodNames[i], null); for (int j = 0; j < cd.getAspectDefSize(); ++j) { AspectDef aspectDef = cd.getAspectDef(j); if (aspectDef.getPointcut().isApplied(method)) { map.put(methodNames[i], ((OgnlExpression) aspectDef .getExpression()).getSource()); } } } return map; } /** * */ public static class TestComponentDefFactory implements ComponentDefBuilder { public ComponentDef createComponentDef(AnnotationHandler handler, Class<?> componentClass, InstanceDef defaultInstanceDef, AutoBindingDef defaultAutoBindingDef, boolean defaultExternalBinding) { return new TestComponentDef(); } } /** * */ public static class TestComponentDef extends ComponentDefImpl { } /** * */ public static class TestPropertyDefFactory implements PropertyDefBuilder { public PropertyDef createPropertyDef(AnnotationHandler handler, BeanDesc beanDesc, Field field) { return new TestPropertyDef("foo"); } public PropertyDef createPropertyDef(AnnotationHandler handler, BeanDesc beanDesc, PropertyDesc propertyDesc) { return new TestPropertyDef("bar"); } } /** * */ public static class TestPropertyDef extends PropertyDefImpl { /** * @param propertyName */ public TestPropertyDef(String propertyName) { super(propertyName); } } }