-
Notifications
You must be signed in to change notification settings - Fork 45
/
Assert.java
133 lines (109 loc) · 4.67 KB
/
Assert.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* JBoss, Home of Professional Open Source
* Copyright 2012, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.cdi.tck.util;
import jakarta.enterprise.inject.spi.Annotated;
import jakarta.enterprise.inject.spi.AnnotatedMember;
import jakarta.enterprise.inject.spi.AnnotatedParameter;
import jakarta.enterprise.inject.spi.AnnotatedType;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* @author Martin Kouba
*
*/
public class Assert {
private Assert() {
}
/**
*
* @param annotations
* @param requiredAnnotationTypes
* @throws AssertionError if the annotations set and required annotations do not match
*/
public static void assertAnnotationSetMatches(Set<? extends Annotation> annotations,
Class<? extends Annotation>... requiredAnnotationTypes) {
if(annotations == null) {
throw new IllegalArgumentException();
}
if (annotations.size() != requiredAnnotationTypes.length) {
fail(String.format("Set %s (%s) does not match array %s (%s)", annotations, annotations.size(), Arrays.toString(requiredAnnotationTypes), requiredAnnotationTypes.length));
}
if (annotations.isEmpty() && requiredAnnotationTypes.length == 0) {
return;
}
List<Class<? extends Annotation>> requiredAnnotationTypesList = Arrays.asList(requiredAnnotationTypes);
for (Annotation annotation : annotations) {
if (!requiredAnnotationTypesList.contains(annotation.annotationType())) {
fail(String.format("Set %s (%s) does not match array %s (%s)", annotations, annotations.size(), requiredAnnotationTypesList, requiredAnnotationTypesList.size()));
}
}
}
/**
*
* @param types
* @param requiredTypes
*/
public static void assertTypeSetMatches(Set<? extends Type> types, Type... requiredTypes) {
if(types == null) {
throw new IllegalArgumentException();
}
List<Type> requiredTypeList = Arrays.asList(requiredTypes);
if (requiredTypes.length != types.size() || !types.containsAll(requiredTypeList)) {
fail(String.format("Set %s (%s) does not match array %s (%s)", types, types.size(), requiredTypeList, requiredTypeList.size()));
}
}
/**
*
* @param types
* @param requiredTypes
*/
public static void assertTypeListMatches(List<? extends Type> types, Type... requiredTypes) {
if(types == null) {
throw new IllegalArgumentException();
}
List<Type> requiredTypeList = Arrays.asList(requiredTypes);
if (requiredTypes.length != types.size() || !types.containsAll(requiredTypeList)) {
fail(String.format("List %s (%s) does not match array %s (%s)", types, types.size(), requiredTypeList, requiredTypeList.size()));
}
}
/**
* Helper method to compare 2 Annotated. They don't necessarily implement equals()/hashcode() so we need to
* compare the underlying java.lang.reflect objects.
*
* @param expected The expected Annotated instance
* @param actual The actual Annotated instance to compare
*/
public static void assertAnnotated(final Annotated expected, final Annotated actual) {
assertEquals(unwrap(expected), unwrap(actual));
}
private static Object unwrap(final Annotated annotated) {
if (annotated instanceof AnnotatedMember) {
return ((AnnotatedMember) annotated).getJavaMember();
} else if (annotated instanceof AnnotatedParameter) {
return ((AnnotatedParameter) annotated).getJavaParameter();
} else if (annotated instanceof AnnotatedType) {
return ((AnnotatedType) annotated).getJavaClass();
} else {
throw new UnsupportedOperationException("Unknown Annotated instance: " + annotated);
}
}
}