1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.reflection.wrapper;
17
18 import static org.assertj.core.api.Assertions.assertThat;
19 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.util.ArrayList;
26 import java.util.Arrays;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 import org.apache.ibatis.domain.misc.RichType;
32 import org.apache.ibatis.reflection.SystemMetaObject;
33 import org.apache.ibatis.reflection.property.PropertyTokenizer;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36
37
38
39
40
41
42 class BeanWrapperUnitTest extends ObjectWrapperBase {
43
44 private RichType richType;
45
46 private ObjectWrapper wrapper;
47
48 @BeforeEach
49 void setup() {
50 this.richType = new RichType();
51 this.wrapper = new BeanWrapper(SystemMetaObject.forObject(richType), richType);
52 }
53
54 @Test
55 @Override
56 void shouldGet() {
57 richType.setRichProperty("mybatis");
58
59 Object value = wrapper.get(new PropertyTokenizer("richProperty"));
60
61 assertEquals("mybatis", value);
62 }
63
64 @Test
65 void shouldGetWhichContainsDelim() {
66 RichType nested = new RichType();
67 nested.setRichProperty("mybatis");
68 richType.setRichType(nested);
69
70 Object value = wrapper.get(new PropertyTokenizer("richType.richProperty"));
71
72 assertEquals("mybatis", value);
73 }
74
75 @Test
76 void shouldGetWhichContainsIndex() {
77 richType.setRichList(Arrays.asList(1L, "abc"));
78 richType.setRichMap(new HashMap<String, Object>() {
79 private static final long serialVersionUID = 1L;
80
81 {
82 put("key1", "value1");
83 put("key2", "value2");
84 }
85 });
86
87 assertEquals("abc", wrapper.get(new PropertyTokenizer("richList[1]")));
88 assertEquals("value2", wrapper.get(new PropertyTokenizer("richMap[key2]")));
89
90 }
91
92 @Test
93 @Override
94 void shouldSet() {
95 wrapper.set(new PropertyTokenizer("richProperty"), "mybatis");
96
97 assertEquals("mybatis", richType.getRichProperty());
98 }
99
100 @Test
101 void shouldSetWhichContainsDelim() {
102 wrapper.set(new PropertyTokenizer("richType.richProperty"), "mybatis");
103
104 assertEquals("mybatis", richType.getRichType().getRichProperty());
105 }
106
107 @Test
108 void shouldSetWhichContainsIndex() {
109 List<Object> list = Arrays.asList(1L, 2L);
110 richType.setRichList(list);
111
112 wrapper.set(new PropertyTokenizer("richList[0]"), "mybatis");
113
114 assertEquals("mybatis", list.get(0));
115 }
116
117 @Test
118 @Override
119 void shouldFindProperty() {
120 String property = wrapper.findProperty("richProperty", false);
121
122 assertEquals("richProperty", property);
123 }
124
125 @Test
126 void shouldFindPropertyContainsDelim() {
127 String property = wrapper.findProperty("richType.richProperty", false);
128
129 assertEquals("richType.richProperty", property);
130 }
131
132 @Test
133 void shouldFindPropertyContainsIndex() {
134 String property = wrapper.findProperty("richList[0]", false);
135
136 assertNull(property);
137 }
138
139 @Test
140 @Override
141 void shouldGetGetterNames() {
142 String[] getterNames = wrapper.getGetterNames();
143
144 assertThat(getterNames).containsExactlyInAnyOrder("richType", "richProperty", "richList", "richMap", "richField");
145 }
146
147 @Test
148 @Override
149 void shouldGetSetterNames() {
150 String[] setterNames = wrapper.getSetterNames();
151
152 assertThat(setterNames).containsExactlyInAnyOrder("richType", "richProperty", "richList", "richMap", "richField");
153 }
154
155 @Test
156 @Override
157 void shouldGetGetterType() {
158 assertEquals(RichType.class, wrapper.getGetterType("richType"));
159 assertEquals(String.class, wrapper.getGetterType("richField"));
160 assertEquals(String.class, wrapper.getGetterType("richProperty"));
161 assertEquals(Map.class, wrapper.getGetterType("richMap"));
162 assertEquals(List.class, wrapper.getGetterType("richList"));
163 }
164
165 @Test
166 @Override
167 void shouldGetSetterType() {
168 assertEquals(RichType.class, wrapper.getSetterType("richType"));
169 assertEquals(String.class, wrapper.getSetterType("richField"));
170 assertEquals(String.class, wrapper.getSetterType("richProperty"));
171 assertEquals(Map.class, wrapper.getSetterType("richMap"));
172 assertEquals(List.class, wrapper.getSetterType("richList"));
173 }
174
175 @Test
176 @Override
177 void shouldHasGetter() {
178 assertTrue(wrapper.hasGetter("richType"));
179 assertTrue(wrapper.hasGetter("richField"));
180 assertTrue(wrapper.hasGetter("richProperty"));
181 assertTrue(wrapper.hasGetter("richMap"));
182 assertTrue(wrapper.hasGetter("richList"));
183 }
184
185 @Test
186 @Override
187 void shouldHasSetter() {
188 assertTrue(wrapper.hasGetter("richType"));
189 assertTrue(wrapper.hasGetter("richField"));
190 assertTrue(wrapper.hasGetter("richProperty"));
191 assertTrue(wrapper.hasGetter("richMap"));
192 assertTrue(wrapper.hasGetter("richList"));
193 }
194
195 @Test
196 @Override
197 void shouldIsCollection() {
198 assertFalse(wrapper.isCollection());
199 }
200
201 @Test
202 @Override
203 void shouldInstantiatePropertyValue() {
204
205 }
206
207 @Test
208 @Override
209 void shouldAddElement() {
210 assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> wrapper.add("1"));
211 }
212
213 @Test
214 @Override
215 void shouldAddAll() {
216 assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> wrapper.addAll(new ArrayList<>()));
217 }
218
219 }