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