1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
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.Path;
27  import org.seasar.cubby.exception.ActionRuntimeException;
28  import org.seasar.framework.util.ClassUtil;
29  
30  public class CubbyUtilsTest extends TestCase {
31  
32  	public void testGetObjectSize() {
33  		// array
34  		assertEquals(0, CubbyUtils.getObjectSize(null));
35  		assertEquals(1, CubbyUtils.getObjectSize(""));
36  		assertEquals(0, CubbyUtils.getObjectSize(new Object[] {}));
37  		assertEquals(3, CubbyUtils.getObjectSize(new Object[] { 1, 2, 3 }));
38  		assertEquals(3, CubbyUtils.getObjectSize(new Object[] { null, 2, 3 }));
39  
40  		// collection
41  		assertEquals(0, CubbyUtils.getObjectSize(toCollection(new Object[] {})));
42  		assertEquals(3, CubbyUtils.getObjectSize(toCollection(new Object[] { 1,
43  				2, 3 })));
44  		assertEquals(3, CubbyUtils.getObjectSize(toCollection(new Object[] {
45  				null, 2, 3 })));
46  
47  	}
48  
49  	@SuppressWarnings("unchecked")
50  	private Collection toCollection(Object[] objects) {
51  		List<Object> list = new ArrayList<Object>();
52  		for (Object o : objects) {
53  			list.add(o);
54  		}
55  		return list;
56  	}
57  
58  	public void testGetActionPath() {
59  		assertEquals("/hoge/m1", CubbyUtils.getActionPath(Hoge1Action.class,
60  				ClassUtil.getMethod(Hoge1Action.class, "m1", null)));
61  		assertEquals("/hoge/m/m2", CubbyUtils.getActionPath(Hoge1Action.class,
62  				ClassUtil.getMethod(Hoge1Action.class, "m2", null)));
63  		assertEquals("/hoge/", CubbyUtils.getActionPath(Hoge1Action.class,
64  				ClassUtil.getMethod(Hoge1Action.class, "index", null)));
65  		assertEquals("/hoge/index2", CubbyUtils.getActionPath(
66  				Hoge1Action.class, ClassUtil.getMethod(Hoge1Action.class,
67  						"index2", null)));
68  		assertEquals("/hoge2/m1", CubbyUtils.getActionPath(Hoge2Action.class,
69  				ClassUtil.getMethod(Hoge2Action.class, "m1", null)));
70  		assertEquals("/hoge/m2", CubbyUtils.getActionPath(Hoge2Action.class,
71  				ClassUtil.getMethod(Hoge2Action.class, "m2", null)));
72  		assertEquals("/", CubbyUtils.getActionPath(MockAction.class, ClassUtil
73  				.getMethod(MockAction.class, "index", null)));
74  		assertEquals("/dummy1", CubbyUtils.getActionPath(MockAction.class,
75  				ClassUtil.getMethod(MockAction.class, "dummy1", null)));
76  		assertEquals("/dummy2", CubbyUtils.getActionPath(MockAction.class,
77  				ClassUtil.getMethod(MockAction.class, "dummy2", null)));
78  		assertEquals("/todo/lists", CubbyUtils.getActionPath(MockAction.class,
79  				ClassUtil.getMethod(MockAction.class, "todolist", null)));
80  		assertEquals("/tasklists", CubbyUtils.getActionPath(MockAction.class,
81  				ClassUtil.getMethod(MockAction.class, "tasklist", null)));
82  	}
83  
84  	public void testGetActionClassName() {
85  		assertEquals("hoge", CubbyUtils.getActionDirectory(Hoge1Action.class));
86  		assertEquals("hoge2", CubbyUtils.getActionDirectory(Hoge2Action.class));
87  	}
88  
89  	public void testReplaceFirst() {
90  		assertNull(CubbyUtils.replaceFirst(null, "", ""));
91  		assertEquals("abaa", CubbyUtils.replaceFirst("abaa", null, null));
92  		assertEquals("abaa", CubbyUtils.replaceFirst("abaa", "a", null));
93  		assertEquals("baa", CubbyUtils.replaceFirst("abaa", "a", ""));
94  		assertEquals("zbaa", CubbyUtils.replaceFirst("abaa", "a", "z"));
95  		assertEquals("xyzaab", CubbyUtils.replaceFirst("abaab", "ab", "xyz"));
96  		assertNull(CubbyUtils.replaceFirst(null, "", ""));
97  		assertEquals("3abaa", CubbyUtils.replaceFirst("3abaa", null, null));
98  		assertEquals("3abaa", CubbyUtils.replaceFirst("3abaa", "a", null));
99  		assertEquals("3baa", CubbyUtils.replaceFirst("3abaa", "a", ""));
100 		assertEquals("3zbaa", CubbyUtils.replaceFirst("3abaa", "a", "z"));
101 		assertEquals("3xyzaab", CubbyUtils.replaceFirst("3abaab", "ab", "xyz"));
102 	}
103 
104 	public void testSplit2() {
105 		assertNull(CubbyUtils.split2(null, '_'));
106 		assertTrue(Arrays.deepEquals(new String[] { "" }, CubbyUtils.split2("",
107 				'_')));
108 		assertTrue(Arrays.deepEquals(new String[] { "ab", "" }, CubbyUtils
109 				.split2("ab_", '_')));
110 		assertTrue(Arrays.deepEquals(new String[] { "ab_cd_de_" }, CubbyUtils
111 				.split2("ab_cd_de_", ',')));
112 		assertTrue(Arrays.deepEquals(new String[] { "ab", "cd_de_" },
113 				CubbyUtils.split2("ab_cd_de_", '_')));
114 	}
115 
116 	public void testGetPriority() throws Exception {
117 		Method method = TestGetPriprity.class.getMethod("m1", new Class[0]);
118 		assertEquals(Integer.MAX_VALUE, CubbyUtils.getPriority(method));
119 
120 		method = TestGetPriprity.class.getMethod("m2", new Class[0]);
121 		assertEquals(Integer.MAX_VALUE, CubbyUtils.getPriority(method));
122 
123 		method = TestGetPriprity.class.getMethod("m3", new Class[0]);
124 		assertEquals(0, CubbyUtils.getPriority(method));
125 	}
126 
127 	static class TestGetPriprity {
128 		public void m1() {
129 		}
130 
131 		@Path
132 		public void m2() {
133 
134 		}
135 
136 		@Path(value = "", priority = 0)
137 		public void m3() {
138 
139 		}
140 	}
141 
142 	public void testGetFormBean1() throws Exception {
143 		MockFormAction action = new MockFormAction();
144 		Method method = ClassUtil.getMethod(action.getClass(), "normal",
145 				new Class[0]);
146 		Object actual = CubbyUtils
147 				.getFormBean(action, MockAction.class, method);
148 		assertSame(action, actual);
149 	}
150 
151 	public void testGetFormBean2() throws Exception {
152 		MockFormAction action = new MockFormAction();
153 		Method method = ClassUtil.getMethod(action.getClass(), "legalForm",
154 				new Class[0]);
155 		Object actual = CubbyUtils
156 				.getFormBean(action, MockAction.class, method);
157 		assertSame(action.form, actual);
158 	}
159 
160 	public void testGetFormBean3() throws Exception {
161 		MockFormAction action = new MockFormAction();
162 		Method method = ClassUtil.getMethod(action.getClass(), "illegalForm",
163 				new Class[0]);
164 		try {
165 			CubbyUtils.getFormBean(action, MockAction.class, method);
166 			fail();
167 		} catch (ActionRuntimeException e) {
168 			// ok
169 			e.printStackTrace();
170 		}
171 	}
172 
173 }