1   /*
2    * Created on 2005/08/26
3    *
4    * TODO To change the template for this generated file go to
5    * Window - Preferences - Java - Code Style - Code Templates
6    */
7   package test.tuigwaa;
8   
9   import junit.framework.TestCase;
10  
11  import org.aopalliance.intercept.MethodInvocation;
12  import org.apache.commons.beanutils.PropertyUtils;
13  import org.seasar.framework.aop.Aspect;
14  import org.seasar.framework.aop.Pointcut;
15  import org.seasar.framework.aop.impl.AspectImpl;
16  import org.seasar.framework.aop.impl.PointcutImpl;
17  import org.seasar.framework.aop.interceptors.AbstractInterceptor;
18  import org.seasar.framework.aop.proxy.AopProxy;
19  import org.seasar.framework.container.S2Container;
20  import org.seasar.framework.container.factory.S2ContainerFactory;
21  import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
22  import org.seasar.tuigwaa.model.JavaClassService;
23  import org.seasar.tuigwaa.model.core.TgwAttribute;
24  import org.seasar.tuigwaa.model.core.TgwEntity;
25  import org.seasar.tuigwaa.model.core.impl.FkAttribute;
26  import org.seasar.tuigwaa.model.core.impl.StringAttribute;
27  import org.seasar.tuigwaa.model.core.impl.TgwEntityImpl;
28  
29  
30  /***
31   * @author nishioka
32   * 
33   * TODO To change the template for this generated type comment go to Window -
34   * Preferences - Java - Code Style - Code Templates
35   */
36  public class JavaClassServiceTest extends TestCase {
37  
38  	private JavaClassService javaService_;
39  
40  	public void setUp() {
41  		SingletonS2ContainerFactory.init();
42  
43  		S2Container container = S2ContainerFactory.create("app.dicon");
44  		javaService_ = (JavaClassService) container
45  				.getComponent(JavaClassService.class);
46  	}
47  
48  	public void testCreateSimple() {
49  		TgwEntity entity = getSimpleEntity();
50  		int fieldSize = entity.getFieldList().size();
51  		try {
52  			javaService_.createClass(entity);
53  
54  			assertEquals(1, entity.getJavaClass().getInterfaces().length);
55  			assertEquals((fieldSize + 1), entity.getJavaClass()
56  					.getDeclaredFields().length);
57  			assertEquals((fieldSize + 1) * 2, entity.getJavaClass()
58  					.getDeclaredMethods().length);
59  
60  		} catch (Exception e) {
61  			e.printStackTrace();
62  			fail();
63  		}
64  	}
65  
66  	public void testFk() {
67  		try {
68  			TgwEntity to = getToRefEntity();
69  			// Class toClass =
70  			javaService_.createClass(to);
71  			TgwEntity from = getFromRefEntity(to);
72  			javaService_.createClass(from);
73  
74  			assertEquals(to.getJavaClass(), from.getJavaClass()
75  					.getDeclaredField("fk").getType());
76  
77  			TgwAttribute field = from.getField("fk.test");
78  
79  			assertEquals(StringAttribute.class, field.getClass());
80  			assertEquals("test", field.getName());
81  
82  		} catch (Exception e) {
83  			e.printStackTrace();
84  			fail();
85  		}
86  	}
87  
88  	public void testAOP() {
89  		try {
90  			TgwEntity entity = new TgwEntityImpl("junit", "aoptest");
91  			putField(entity, "test", new StringAttribute());
92  			javaService_.createClass(entity);
93  
94  			Pointcut pointcut = new PointcutImpl(new String[] { "getTest" });
95  			Aspect aspect = new AspectImpl(new AbstractInterceptor() {
96  				private static final long serialVersionUID = -8161054734654371789L;
97  
98  				public Object invoke(MethodInvocation invocation)
99  						throws Throwable {
100 					// Object obj = invocation.proceed();
101 					return "hoge";
102 				}
103 			}, pointcut);
104 			AopProxy aopProxy = new AopProxy(entity.getJavaClass(), new Aspect[] { aspect });
105 
106 			Object obj = aopProxy.create();
107 			PropertyUtils.setProperty(obj, "test", "AAAAAAAAA");
108 			assertEquals("hoge", PropertyUtils.getProperty(obj, "test"));
109 
110 		} catch (Exception e) {
111 			e.printStackTrace();
112 			fail();
113 		}
114 	}
115 
116 	class ReturnHogeInterceptor extends AbstractInterceptor {
117 		private static final long serialVersionUID = -4061328783417139547L;
118 
119 		public Object invoke(MethodInvocation invocation) throws Throwable {
120 			return "aop";
121 		}
122 	}
123 
124 	private TgwEntity getSimpleEntity() {
125 		TgwEntity entity = new TgwEntityImpl("junit", "javatest");
126 		putField(entity, "test", new StringAttribute());
127 		return entity;
128 	}
129 
130 	private TgwEntity getFromRefEntity(TgwEntity to) {
131 		TgwEntity entity = new TgwEntityImpl("junit", "to");
132 		FkAttribute fk = new FkAttribute();
133 		fk.setRefEntity(to);
134 		putField(entity, "fk", fk);
135 		return entity;
136 	}
137 
138 	private TgwEntity getToRefEntity() {
139 		TgwEntity entity = new TgwEntityImpl("junit", "from");
140 		putField(entity, "test", new StringAttribute());
141 		return entity;
142 	}
143 	
144 	private void putField(TgwEntity entity, String name, TgwAttribute attr){
145 		attr.setName(name);
146 		entity.addField(attr);
147 	}
148 }