1
2
3
4
5
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
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
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 }