-
-
Notifications
You must be signed in to change notification settings - Fork 490
/
Copy pathBoxTest.java
84 lines (67 loc) · 2.3 KB
/
BoxTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.bobocode.basics;
import lombok.SneakyThrows;
import org.junit.jupiter.api.*;
import static org.assertj.core.api.Assertions.assertThat;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BoxTest {
private final String TYPE_PARAMETER_NAME = "T";
@Test
@Order(1)
@DisplayName("Box class has one type parameter")
void boxClassHasOneTypeParameter() {
var typeParameters = Box.class.getTypeParameters();
assertThat(typeParameters.length).isEqualTo(1);
}
@Test
@Order(2)
@DisplayName("Type parameter is called \"T\"")
void typeParameterIsCalledT() {
var typeParameter = Box.class.getTypeParameters()[0];
assertThat(typeParameter.getName()).isEqualTo(TYPE_PARAMETER_NAME);
}
@Test
@Order(3)
@DisplayName("Type parameter \"T\" is not bounded")
void typeParameterIsNotBounded() {
var typeParameter = Box.class.getTypeParameters()[0];
assertThat(typeParameter.getBounds()).hasSize(1);
assertThat(typeParameter.getBounds()[0].getTypeName()).isEqualTo(Object.class.getTypeName());
}
@Test
@SneakyThrows
@Order(4)
@DisplayName("Field \"value\" is \"T\"")
void valueFieldIsGeneric() {
var valueField = Box.class.getDeclaredField("value");
var genericType = valueField.getGenericType();
assertThat(genericType.getTypeName()).isEqualTo(TYPE_PARAMETER_NAME);
}
@Test
@SneakyThrows
@Order(5)
@DisplayName("Constructor parameter type is \"T\"")
void constructorParameterIsGeneric() {
var constructor = Box.class.getDeclaredConstructors()[0];
assert (constructor.getParameters().length == 1);
var parameter = constructor.getParameters()[0];
assertThat(parameter.getParameterizedType().getTypeName()).isEqualTo(TYPE_PARAMETER_NAME);
}
@Test
@SneakyThrows
@Order(6)
@DisplayName("Getter return type is \"T\"")
void getterReturnTypeIsGeneric() {
var getter = Box.class.getDeclaredMethod("getValue");
assertThat(getter.getGenericReturnType().getTypeName()).isEqualTo(TYPE_PARAMETER_NAME);
}
@Test
@SneakyThrows
@Order(7)
@DisplayName("Setter parameter type is \"T\"")
void setterParameterIsGeneric() {
var setter = Box.class.getDeclaredMethod("setValue", Object.class);
assert (setter.getParameters().length == 1);
var parameter = setter.getParameters()[0];
assertThat(parameter.getParameterizedType().getTypeName()).isEqualTo(TYPE_PARAMETER_NAME);
}
}