1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.reflection;
17
18 import static org.junit.jupiter.api.Assertions.assertEquals;
19 import static org.junit.jupiter.api.Assertions.assertFalse;
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21 import static org.junit.jupiter.api.Assertions.fail;
22
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.ibatis.domain.misc.RichType;
27 import org.apache.ibatis.domain.misc.generics.GenericConcrete;
28 import org.junit.jupiter.api.Test;
29
30 class MetaClassTest {
31
32 @Test
33 void shouldTestDataTypeOfGenericMethod() {
34 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
35 MetaClass meta = MetaClass.forClass(GenericConcrete.class, reflectorFactory);
36 assertEquals(Long.class, meta.getGetterType("id"));
37 assertEquals(Long.class, meta.getSetterType("id"));
38 }
39
40 @Test
41 void shouldThrowReflectionExceptionGetGetterType() {
42 try {
43 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
44 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
45 meta.getGetterType("aString");
46 fail("should have thrown ReflectionException");
47 } catch (ReflectionException expected) {
48 assertEquals(
49 "There is no getter for property named \'aString\' in \'class org.apache.ibatis.domain.misc.RichType\'",
50 expected.getMessage());
51 }
52 }
53
54 @Test
55 void shouldCheckGetterExistance() {
56 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
57 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
58 assertTrue(meta.hasGetter("richField"));
59 assertTrue(meta.hasGetter("richProperty"));
60 assertTrue(meta.hasGetter("richList"));
61 assertTrue(meta.hasGetter("richMap"));
62 assertTrue(meta.hasGetter("richList[0]"));
63
64 assertTrue(meta.hasGetter("richType"));
65 assertTrue(meta.hasGetter("richType.richField"));
66 assertTrue(meta.hasGetter("richType.richProperty"));
67 assertTrue(meta.hasGetter("richType.richList"));
68 assertTrue(meta.hasGetter("richType.richMap"));
69 assertTrue(meta.hasGetter("richType.richList[0]"));
70
71 assertEquals("richType.richProperty", meta.findProperty("richType.richProperty", false));
72
73 assertFalse(meta.hasGetter("[0]"));
74 }
75
76 @Test
77 void shouldCheckSetterExistance() {
78 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
79 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
80 assertTrue(meta.hasSetter("richField"));
81 assertTrue(meta.hasSetter("richProperty"));
82 assertTrue(meta.hasSetter("richList"));
83 assertTrue(meta.hasSetter("richMap"));
84 assertTrue(meta.hasSetter("richList[0]"));
85
86 assertTrue(meta.hasSetter("richType"));
87 assertTrue(meta.hasSetter("richType.richField"));
88 assertTrue(meta.hasSetter("richType.richProperty"));
89 assertTrue(meta.hasSetter("richType.richList"));
90 assertTrue(meta.hasSetter("richType.richMap"));
91 assertTrue(meta.hasSetter("richType.richList[0]"));
92
93 assertFalse(meta.hasSetter("[0]"));
94 }
95
96 @Test
97 void shouldCheckTypeForEachGetter() {
98 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
99 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
100 assertEquals(String.class, meta.getGetterType("richField"));
101 assertEquals(String.class, meta.getGetterType("richProperty"));
102 assertEquals(List.class, meta.getGetterType("richList"));
103 assertEquals(Map.class, meta.getGetterType("richMap"));
104 assertEquals(List.class, meta.getGetterType("richList[0]"));
105
106 assertEquals(RichType.class, meta.getGetterType("richType"));
107 assertEquals(String.class, meta.getGetterType("richType.richField"));
108 assertEquals(String.class, meta.getGetterType("richType.richProperty"));
109 assertEquals(List.class, meta.getGetterType("richType.richList"));
110 assertEquals(Map.class, meta.getGetterType("richType.richMap"));
111 assertEquals(List.class, meta.getGetterType("richType.richList[0]"));
112 }
113
114 @Test
115 void shouldCheckTypeForEachSetter() {
116 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
117 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
118 assertEquals(String.class, meta.getSetterType("richField"));
119 assertEquals(String.class, meta.getSetterType("richProperty"));
120 assertEquals(List.class, meta.getSetterType("richList"));
121 assertEquals(Map.class, meta.getSetterType("richMap"));
122 assertEquals(List.class, meta.getSetterType("richList[0]"));
123
124 assertEquals(RichType.class, meta.getSetterType("richType"));
125 assertEquals(String.class, meta.getSetterType("richType.richField"));
126 assertEquals(String.class, meta.getSetterType("richType.richProperty"));
127 assertEquals(List.class, meta.getSetterType("richType.richList"));
128 assertEquals(Map.class, meta.getSetterType("richType.richMap"));
129 assertEquals(List.class, meta.getSetterType("richType.richList[0]"));
130 }
131
132 @Test
133 void shouldCheckGetterAndSetterNames() {
134 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
135 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
136 assertEquals(5, meta.getGetterNames().length);
137 assertEquals(5, meta.getSetterNames().length);
138 }
139
140 @Test
141 void shouldFindPropertyName() {
142 ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
143 MetaClass meta = MetaClass.forClass(RichType.class, reflectorFactory);
144 assertEquals("richField", meta.findProperty("RICHfield"));
145 }
146
147 }