1
2
3
4
5
6 package mockit.internal.util;
7
8 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
9 import static org.junit.jupiter.api.Assertions.assertEquals;
10 import static org.junit.jupiter.api.Assertions.assertFalse;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12 import static org.junit.jupiter.api.Assertions.assertNull;
13 import static org.junit.jupiter.api.Assertions.assertTrue;
14
15 import java.util.NoSuchElementException;
16 import java.util.PrimitiveIterator;
17 import java.util.Spliterator;
18
19 import org.junit.jupiter.api.Test;
20
21 final class DefaultValuesTest {
22
23 @Test
24 void getReturnTypeDescExtracts() {
25 assertEquals("V", DefaultValues.getReturnTypeDesc("()V"));
26 assertEquals("I", DefaultValues.getReturnTypeDesc("(I)I"));
27 assertEquals("Ljava/lang/String;", DefaultValues.getReturnTypeDesc("()Ljava/lang/String;"));
28 }
29
30 @Test
31 void computeForTypeVoidReturnsNull() {
32 assertNull(DefaultValues.computeForType("V"));
33 }
34
35 @Test
36 void computeForTypePrimitiveInt() {
37 assertEquals(0, DefaultValues.computeForType("I"));
38 }
39
40 @Test
41 void computeForTypeBoolean() {
42 assertEquals(Boolean.FALSE, DefaultValues.computeForType("Z"));
43 }
44
45 @Test
46 void computeForTypeLong() {
47 assertEquals(0L, DefaultValues.computeForType("J"));
48 }
49
50 @Test
51 void computeForTypeDouble() {
52 assertEquals(0.0, DefaultValues.computeForType("D"));
53 }
54
55 @Test
56 void computeForTypeFloat() {
57 assertEquals(0.0f, DefaultValues.computeForType("F"));
58 }
59
60 @Test
61 void computeForTypeObjectReturnsNull() {
62
63 assertNull(DefaultValues.computeForType("Ljava/lang/Object;"));
64 }
65
66 @Test
67 void computeForTypeIntArray() {
68 Object result = DefaultValues.computeForType("[I");
69 assertNotNull(result);
70 assertTrue(result instanceof int[]);
71 assertEquals(0, ((int[]) result).length);
72 }
73
74 @Test
75 void computeForTypeStringArray() {
76 Object result = DefaultValues.computeForType("[Ljava/lang/String;");
77 assertNotNull(result);
78 assertTrue(result instanceof String[]);
79 }
80
81 @Test
82 void computeForTypeMultiDimArray() {
83 Object result = DefaultValues.computeForType("[[I");
84 assertNotNull(result);
85 }
86
87 @Test
88 void computeForClassArray() {
89 Object result = DefaultValues.computeForType(int[].class);
90 assertNotNull(result);
91 assertArrayEquals(new int[0], (int[]) result);
92 }
93
94 @Test
95 void computeForClassPrimitive() {
96 assertEquals(0, DefaultValues.computeForType(int.class));
97 }
98
99 @Test
100 void computeForClassVoid() {
101 assertNull(DefaultValues.computeForType(void.class));
102 }
103
104 @Test
105 void computeForClassWrapper() {
106 assertEquals(0, DefaultValues.computeForType(Integer.class));
107 }
108
109 @Test
110 void defaultValueForPrimitiveBoolean() {
111 assertEquals(Boolean.FALSE, DefaultValues.defaultValueForPrimitiveType(boolean.class));
112 }
113
114 @Test
115 void defaultValueForPrimitiveLong() {
116 assertEquals(0L, DefaultValues.defaultValueForPrimitiveType(long.class));
117 }
118
119 @Test
120 void defaultValueForPrimitiveDouble() {
121 assertEquals(0.0, DefaultValues.defaultValueForPrimitiveType(double.class));
122 }
123
124 @Test
125 void defaultValueForPrimitiveFloat() {
126 Object result = DefaultValues.defaultValueForPrimitiveType(float.class);
127 assertEquals(0.0f, (Float) result, 0.0f);
128 }
129
130 @Test
131 void defaultValueForPrimitiveChar() {
132 assertEquals('\0', DefaultValues.defaultValueForPrimitiveType(char.class));
133 }
134
135 @Test
136 void defaultValueForPrimitiveByte() {
137 Object result = DefaultValues.defaultValueForPrimitiveType(byte.class);
138 assertEquals(0, ((Byte) result).intValue());
139 }
140
141 @Test
142 void defaultValueForPrimitiveShort() {
143 Object result = DefaultValues.defaultValueForPrimitiveType(short.class);
144 assertEquals(0, ((Short) result).intValue());
145 }
146
147 @Test
148 void computeForWrapperBoolean() {
149 assertEquals(Boolean.FALSE, DefaultValues.computeForWrapperType(Boolean.class));
150 }
151
152 @Test
153 void computeForWrapperLong() {
154 Object result = DefaultValues.computeForWrapperType(Long.class);
155 assertEquals(0L, ((Long) result).longValue());
156 }
157
158 @Test
159 void computeForWrapperDouble() {
160 assertEquals(0.0, DefaultValues.computeForWrapperType(Double.class));
161 }
162
163 @Test
164 void computeForWrapperFloat() {
165 Object result = DefaultValues.computeForWrapperType(Float.class);
166 assertEquals(0.0f, (Float) result, 0.0f);
167 }
168
169 @Test
170 void computeForWrapperCharacter() {
171 Object result = DefaultValues.computeForWrapperType(Character.class);
172 assertEquals('\0', ((Character) result).charValue());
173 }
174
175 @Test
176 void computeForWrapperByte() {
177 Object result = DefaultValues.computeForWrapperType(Byte.class);
178 assertEquals(0, ((Byte) result).intValue());
179 }
180
181 @Test
182 void computeForWrapperShort() {
183 Object result = DefaultValues.computeForWrapperType(Short.class);
184 assertEquals(0, ((Short) result).intValue());
185 }
186
187 @Test
188 void computeForWrapperUnknownReturnsNull() {
189 assertNull(DefaultValues.computeForWrapperType(Object.class));
190 }
191
192 @Test
193 void computeForReturnType() {
194 assertNull(DefaultValues.computeForReturnType("doSomething()V"));
195 assertEquals(0, DefaultValues.computeForReturnType("getValue()I"));
196 }
197
198 @Test
199 void primitiveIteratorOfIntBehavior() {
200
201 Object result = DefaultValues.computeForType("Ljava/util/PrimitiveIterator$OfInt;");
202 assertNotNull(result);
203 assertTrue(result instanceof PrimitiveIterator.OfInt);
204 PrimitiveIterator.OfInt iter = (PrimitiveIterator.OfInt) result;
205 assertFalse(iter.hasNext());
206 assertThrowsNoSuchElement(iter::nextInt);
207 assertThrowsNoSuchElement(iter::next);
208 }
209
210 @Test
211 void primitiveIteratorOfLongBehavior() {
212 Object result = DefaultValues.computeForType("Ljava/util/PrimitiveIterator$OfLong;");
213 assertNotNull(result);
214 assertTrue(result instanceof PrimitiveIterator.OfLong);
215 PrimitiveIterator.OfLong iter = (PrimitiveIterator.OfLong) result;
216 assertFalse(iter.hasNext());
217 assertThrowsNoSuchElement(iter::nextLong);
218 }
219
220 @Test
221 void primitiveIteratorOfDoubleBehavior() {
222 Object result = DefaultValues.computeForType("Ljava/util/PrimitiveIterator$OfDouble;");
223 assertNotNull(result);
224 assertTrue(result instanceof PrimitiveIterator.OfDouble);
225 PrimitiveIterator.OfDouble iter = (PrimitiveIterator.OfDouble) result;
226 assertFalse(iter.hasNext());
227 assertThrowsNoSuchElement(iter::nextDouble);
228 }
229
230 @Test
231 void computeForTypeOptional() {
232 Object opt = DefaultValues.computeForType("Ljava/util/Optional;");
233 assertNotNull(opt);
234 }
235
236 @Test
237 void computeForTypeSpliterator() {
238 Object spliterator = DefaultValues.computeForType("Ljava/util/Spliterator;");
239 assertNotNull(spliterator);
240 assertTrue(spliterator instanceof Spliterator);
241 }
242
243 @Test
244 void computeForTypeStream() {
245 Object stream = DefaultValues.computeForType("Ljava/util/stream/Stream;");
246 assertNotNull(stream);
247 }
248
249 private static void assertThrowsNoSuchElement(Runnable action) {
250 try {
251 action.run();
252 throw new AssertionError("Expected NoSuchElementException");
253 } catch (NoSuchElementException e) {
254
255 }
256 }
257 }