-
-
Notifications
You must be signed in to change notification settings - Fork 346
/
MapTypeTest.groovy
66 lines (50 loc) · 1.76 KB
/
MapTypeTest.groovy
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
package org.javers.core.metamodel.type
import com.google.gson.reflect.TypeToken
import org.javers.common.exception.JaversException
import spock.lang.Specification
import spock.lang.Unroll
import java.lang.reflect.Type
import static org.javers.common.exception.JaversExceptionCode.GENERIC_TYPE_NOT_PARAMETRIZED
import static org.javers.common.reflection.ReflectionTestHelper.getFieldFromClass
/**
* @author bartosz walacik
*/
class MapTypeTest extends Specification{
class Dummy <T> {
Map noGeneric
Map<?, String> wildcardGeneric
Map<String, T> parametrizedGeneric
Map<String, Integer> genericWithArgument
}
@Unroll
def "should not be fully parametrized if baseJavaType is not #geneticKind"(){
given:
Type noGeneric = getFieldFromClass(Dummy, geneticKind).genericType
when:
MapType mType = new MapType(noGeneric)
then:
mType.fullyParametrized == false
when:
mType.getKeyType()
then:
def e = thrown(JaversException)
e.code == GENERIC_TYPE_NOT_PARAMETRIZED;
when:
mType.getValueType()
then:
e = thrown(JaversException)
e.code == GENERIC_TYPE_NOT_PARAMETRIZED;
where:
geneticKind << ["noGeneric","wildcardGeneric","parametrizedGeneric"]
}
def "should return key & value Class if baseJavaType is generic with actual Class argument"(){
given:
Type noGeneric = getFieldFromClass(Dummy, "genericWithArgument").genericType
when:
MapType mType = new MapType(noGeneric)
then:
mType.baseJavaType == new TypeToken<Map<String,Integer>>(){}.type
mType.keyType == String
mType.valueType == Integer
}
}