1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.util;
17
18 import java.lang.reflect.Method;
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Collection;
22 import java.util.List;
23
24 import junit.framework.TestCase;
25
26 import org.seasar.cubby.action.Action;
27 import org.seasar.cubby.action.ActionResult;
28 import org.seasar.cubby.action.Path;
29 import org.seasar.cubby.exception.ActionRuntimeException;
30 import org.seasar.framework.util.ClassUtil;
31
32 public class CubbyUtilsTest extends TestCase {
33
34 public void testGetObjectSize() {
35
36 assertEquals(0, CubbyUtils.getObjectSize(null));
37 assertEquals(1, CubbyUtils.getObjectSize(""));
38 assertEquals(0, CubbyUtils.getObjectSize(new Object[] {}));
39 assertEquals(3, CubbyUtils.getObjectSize(new Object[] { 1, 2, 3 }));
40 assertEquals(3, CubbyUtils.getObjectSize(new Object[] { null, 2, 3 }));
41
42
43 assertEquals(0, CubbyUtils.getObjectSize(toCollection(new Object[] {})));
44 assertEquals(3, CubbyUtils.getObjectSize(toCollection(new Object[] { 1,
45 2, 3 })));
46 assertEquals(3, CubbyUtils.getObjectSize(toCollection(new Object[] {
47 null, 2, 3 })));
48
49 }
50
51 @SuppressWarnings("unchecked")
52 private Collection toCollection(Object[] objects) {
53 List<Object> list = new ArrayList<Object>();
54 for (Object o : objects) {
55 list.add(o);
56 }
57 return list;
58 }
59
60 public void testGetActionPath() {
61 assertEquals("/hoge/m1", CubbyUtils.getActionPath(Hoge1Action.class,
62 ClassUtil.getMethod(Hoge1Action.class, "m1", null)));
63 assertEquals("/hoge/m/m2", CubbyUtils.getActionPath(Hoge1Action.class,
64 ClassUtil.getMethod(Hoge1Action.class, "m2", null)));
65 assertEquals("/hoge/", CubbyUtils.getActionPath(Hoge1Action.class,
66 ClassUtil.getMethod(Hoge1Action.class, "index", null)));
67 assertEquals("/hoge/index2", CubbyUtils.getActionPath(
68 Hoge1Action.class, ClassUtil.getMethod(Hoge1Action.class,
69 "index2", null)));
70 assertEquals("/hoge2/m1", CubbyUtils.getActionPath(Hoge2Action.class,
71 ClassUtil.getMethod(Hoge2Action.class, "m1", null)));
72 assertEquals("/hoge/m2", CubbyUtils.getActionPath(Hoge2Action.class,
73 ClassUtil.getMethod(Hoge2Action.class, "m2", null)));
74 assertEquals("/", CubbyUtils.getActionPath(MockAction.class, ClassUtil
75 .getMethod(MockAction.class, "index", null)));
76 assertEquals("/dummy1", CubbyUtils.getActionPath(MockAction.class,
77 ClassUtil.getMethod(MockAction.class, "dummy1", null)));
78 assertEquals("/dummy2", CubbyUtils.getActionPath(MockAction.class,
79 ClassUtil.getMethod(MockAction.class, "dummy2", null)));
80 assertEquals("/todo/lists", CubbyUtils.getActionPath(MockAction.class,
81 ClassUtil.getMethod(MockAction.class, "todolist", null)));
82 assertEquals("/tasklists", CubbyUtils.getActionPath(MockAction.class,
83 ClassUtil.getMethod(MockAction.class, "tasklist", null)));
84 }
85
86 public void testGetActionClassName() {
87 assertEquals("hoge", CubbyUtils.getActionDirectory(Hoge1Action.class));
88 assertEquals("hoge2", CubbyUtils.getActionDirectory(Hoge2Action.class));
89 }
90
91 public void testReplaceFirst() {
92 assertNull(CubbyUtils.replaceFirst(null, "", ""));
93 assertEquals("abaa", CubbyUtils.replaceFirst("abaa", null, null));
94 assertEquals("abaa", CubbyUtils.replaceFirst("abaa", "a", null));
95 assertEquals("baa", CubbyUtils.replaceFirst("abaa", "a", ""));
96 assertEquals("zbaa", CubbyUtils.replaceFirst("abaa", "a", "z"));
97 assertEquals("xyzaab", CubbyUtils.replaceFirst("abaab", "ab", "xyz"));
98 assertNull(CubbyUtils.replaceFirst(null, "", ""));
99 assertEquals("3abaa", CubbyUtils.replaceFirst("3abaa", null, null));
100 assertEquals("3abaa", CubbyUtils.replaceFirst("3abaa", "a", null));
101 assertEquals("3baa", CubbyUtils.replaceFirst("3abaa", "a", ""));
102 assertEquals("3zbaa", CubbyUtils.replaceFirst("3abaa", "a", "z"));
103 assertEquals("3xyzaab", CubbyUtils.replaceFirst("3abaab", "ab", "xyz"));
104 }
105
106 public void testSplit2() {
107 assertNull(CubbyUtils.split2(null, '_'));
108 assertTrue(Arrays.deepEquals(new String[] { "" }, CubbyUtils.split2("",
109 '_')));
110 assertTrue(Arrays.deepEquals(new String[] { "ab", "" }, CubbyUtils
111 .split2("ab_", '_')));
112 assertTrue(Arrays.deepEquals(new String[] { "ab_cd_de_" }, CubbyUtils
113 .split2("ab_cd_de_", ',')));
114 assertTrue(Arrays.deepEquals(new String[] { "ab", "cd_de_" },
115 CubbyUtils.split2("ab_cd_de_", '_')));
116 }
117
118 public void testGetPriority() throws Exception {
119 Method method = TestGetPriprity.class.getMethod("m1", new Class[0]);
120 assertEquals(Integer.MAX_VALUE, CubbyUtils.getPriority(method));
121
122 method = TestGetPriprity.class.getMethod("m2", new Class[0]);
123 assertEquals(Integer.MAX_VALUE, CubbyUtils.getPriority(method));
124
125 method = TestGetPriprity.class.getMethod("m3", new Class[0]);
126 assertEquals(0, CubbyUtils.getPriority(method));
127 }
128
129 static class TestGetPriprity {
130 public void m1() {
131 }
132
133 @Path
134 public void m2() {
135
136 }
137
138 @Path(value = "", priority = 0)
139 public void m3() {
140
141 }
142 }
143
144 public void testGetFormBean1() throws Exception {
145 MockFormAction action = new MockFormAction();
146 Method method = ClassUtil.getMethod(action.getClass(), "normal",
147 new Class[0]);
148 Object actual = CubbyUtils
149 .getFormBean(action, MockAction.class, method);
150 assertSame(action, actual);
151 }
152
153 public void testGetFormBean2() throws Exception {
154 MockFormAction action = new MockFormAction();
155 Method method = ClassUtil.getMethod(action.getClass(), "legalForm",
156 new Class[0]);
157 Object actual = CubbyUtils
158 .getFormBean(action, MockAction.class, method);
159 assertSame(action.form, actual);
160 }
161
162 public void testGetFormBean3() throws Exception {
163 MockFormAction action = new MockFormAction();
164 Method method = ClassUtil.getMethod(action.getClass(), "illegalForm",
165 new Class[0]);
166 try {
167 CubbyUtils.getFormBean(action, MockAction.class, method);
168 fail();
169 } catch (ActionRuntimeException e) {
170
171 assertTrue(true);
172 }
173 }
174
175 public void testIsActionClass() throws Exception {
176 assertTrue("アクションクラスであればtrue", CubbyUtils.isActionClass(ChildAction.class));
177 assertFalse("Actionを継承していないクラスはアクションクラスではない", CubbyUtils.isActionClass(Object.class));
178 assertFalse("抽象クラスはアクションクラスではない", CubbyUtils.isActionClass(ParentAction.class));
179 }
180
181 public void testIsActionMethod() throws Exception {
182 assertTrue("親クラスのアクションメソッド", CubbyUtils.isActionMethod(ChildAction.class.getMethod("m1")));
183 assertTrue("オーバーライドした親クラスのアクションメソッド", CubbyUtils.isActionMethod(ChildAction.class.getMethod("m2")));
184 assertTrue("子クラスのアクションメソッド", CubbyUtils.isActionMethod(ChildAction.class.getMethod("m3")));
185 assertFalse("メソッドの引数が不正", CubbyUtils.isActionMethod(ChildAction.class.getMethod("m4", int.class)));
186 assertFalse("メソッドの戻り値が不正", CubbyUtils.isActionMethod(ChildAction.class.getMethod("m5")));
187 }
188
189 public abstract class ParentAction extends Action {
190 public ActionResult m1() {
191 return null;
192 }
193 public abstract ActionResult m2();
194 }
195
196 public class ChildAction extends ParentAction {
197 @Override
198 public ActionResult m2() {
199 return null;
200 }
201 public ActionResult m3() {
202 return null;
203 }
204 public ActionResult m4(int value) {
205 return null;
206 }
207 public Object m5() {
208 return null;
209 }
210 }
211 }