1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.dxo.impl;
17
18 import java.text.SimpleDateFormat;
19 import java.util.Arrays;
20 import java.util.Calendar;
21 import java.util.Date;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.seasar.cubby.dxo.FormDxo;
27 import org.seasar.extension.unit.S2TestCase;
28
29
30
31
32
33
34 public class FormDxoImplTest extends S2TestCase {
35
36 public FormDxo formDxo;
37
38 @Override
39 protected void setUp() throws Exception {
40 super.setUp();
41 include(getClass().getName().replace('.', '/') + ".dicon");
42 }
43
44 public void testBeanToMapNullSource() {
45 TestBean bean = null;
46 Map<String, String[]> map = new HashMap<String, String[]>();
47 formDxo.convert(bean, map);
48 }
49
50 public void testMapToBeanNullSource() {
51 TestBean bean = new TestBean();
52 Map<String, Object[]> map = null;
53 formDxo.convert(map, bean);
54 }
55
56 public void testBeanToMap() {
57 Calendar cal = Calendar.getInstance();
58 cal.set(2006, 0, 1);
59
60 TestBean bean = new TestBean();
61 bean.setDate(cal.getTime());
62 bean.setNum1(5);
63 bean.setNum2(new Integer[] { 2, 3, 4 });
64 bean.setNum3(Arrays.asList(new String[] { "abc", "def" }));
65
66 Map<String, String[]> map = new HashMap<String, String[]>();
67
68 formDxo.convert(bean, map);
69 assertTrue(map.containsKey("date"));
70 String[] values = map.get("date");
71 assertEquals(1, values.length);
72 assertEquals("2006-01-01", values[0]);
73 }
74
75 public void testMapToBean() {
76 Map<String, Object[]> map = new HashMap<String, Object[]>();
77 map.put("date", new Object[] { "2006-01-01" });
78
79 TestBean bean = new TestBean();
80
81 formDxo.convert(map, bean);
82 Calendar cal = Calendar.getInstance();
83 cal.set(2006, 0, 1);
84 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
85 assertEquals(format.format(cal.getTime()), format
86 .format(bean.getDate()));
87 }
88
89 public void testMapToBean_OneValue() {
90 Map<String, Object[]> map = new HashMap<String, Object[]>();
91 map.put("num1", new Object[] { "1" });
92 map.put("num2", new Object[] { "2" });
93 map.put("num3", new Object[] { "def" });
94
95 TestBean bean = new TestBean();
96
97 formDxo.convert(map, bean);
98 assertNotNull(bean.getNum1());
99 assertEquals(Integer.valueOf(1), bean.getNum1());
100 assertNotNull(bean.getNum2());
101 assertEquals(1, bean.getNum2().length);
102 assertEquals(Integer.valueOf(2), bean.getNum2()[0]);
103 assertNotNull(bean.getNum3());
104 assertEquals(1, bean.getNum3().size());
105 assertEquals("def", bean.getNum3().get(0));
106 }
107
108 public void testMapToBean_MultiValue() {
109 Map<String, Object[]> map = new HashMap<String, Object[]>();
110 map.put("num2", new Object[] { "1", "2" });
111 map.put("num3", new Object[] { "abc", "def" });
112
113 TestBean bean = new TestBean();
114
115 formDxo.convert(map, bean);
116 assertNotNull(bean.getNum2());
117 assertEquals(2, bean.getNum2().length);
118 assertEquals(Integer.valueOf(1), bean.getNum2()[0]);
119 assertEquals(Integer.valueOf(2), bean.getNum2()[1]);
120 assertNotNull(bean.getNum3());
121 assertEquals(2, bean.getNum3().size());
122 assertEquals("abc", bean.getNum3().get(0));
123 assertEquals("def", bean.getNum3().get(1));
124 }
125
126 public void testMapToBean_MultiValueIncludesEmptyValue() {
127 Map<String, Object[]> map = new HashMap<String, Object[]>();
128 map.put("num2", new String[] { "1", "", "2" });
129
130 TestBean bean = new TestBean();
131
132 formDxo.convert(map, bean);
133 assertEquals(3, bean.getNum2().length);
134 assertEquals(Integer.valueOf(1), bean.getNum2()[0]);
135 assertEquals(null, bean.getNum2()[1]);
136 assertEquals(Integer.valueOf(2), bean.getNum2()[2]);
137 }
138
139 public void testNoCloneableObject() {
140 Map<String, Object[]> map = new HashMap<String, Object[]>();
141 NoDefaultConstructorBean bean = new NoDefaultConstructorBean("1");
142 map.put("bean", new Object[] { bean });
143
144 NoDefaultConstructorBeanHolder dest = new NoDefaultConstructorBeanHolder();
145
146 formDxo.convert(map, dest);
147 assertNotNull(dest.bean);
148 assertSame(bean, dest.bean);
149 }
150
151 public static class TestBean {
152
153 Date date;
154
155 Integer num1;
156
157 Integer[] num2;
158
159 List<String> num3;
160
161 public Date getDate() {
162 return new Date(date.getTime());
163 }
164
165 public void setDate(Date date) {
166 this.date = new Date(date.getTime());
167 }
168
169 public Integer getNum1() {
170 return num1;
171 }
172
173 public void setNum1(Integer num1) {
174 this.num1 = num1;
175 }
176
177 public Integer[] getNum2() {
178 return num2 == null ? null : num2.clone();
179 }
180
181 public void setNum2(Integer[] num2) {
182 this.num2 = num2 == null ? null : num2.clone();
183 }
184
185 public List<String> getNum3() {
186 return num3;
187 }
188
189 public void setNum3(List<String> num3) {
190 this.num3 = num3;
191 }
192
193 }
194
195 public static class NoDefaultConstructorBeanHolder {
196 public NoDefaultConstructorBean bean;
197 }
198
199 public static class NoDefaultConstructorBean {
200 public String prop1;
201
202 public NoDefaultConstructorBean(String prop1) {
203 this.prop1 = prop1;
204 }
205 }
206 }