1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.junit.annotation;
16
17 import static org.htmlunit.junit.SetExpectedAlertsBeforeTestExecutionCallback.isDefined;
18
19 import java.lang.reflect.Method;
20 import java.util.Arrays;
21
22 import org.htmlunit.BrowserVersion;
23 import org.htmlunit.junit.SetExpectedAlertsBeforeTestExecutionCallback;
24 import org.junit.jupiter.api.Assertions;
25
26
27
28
29
30
31
32 public final class AnnotationUtils {
33
34
35
36
37 private AnnotationUtils() {
38
39 }
40
41
42
43
44
45
46 public static void assertAlerts(final Method method) {
47 final Alerts alerts = method.getAnnotation(Alerts.class);
48 if (alerts != null) {
49 if (!isDefined(alerts.value())) {
50 Assertions.assertFalse(
51 isDefined(alerts.DEFAULT())
52 && isDefined(alerts.CHROME())
53 && isDefined(alerts.FF())
54 && isDefined(alerts.FF_ESR())
55 && isDefined(alerts.EDGE()),
56 "Obsolete DEFAULT because all browser expectations defined individually ("
57 + method.getDeclaringClass().getName() + "." + method.getName());
58
59 assertNotEquals("@Alerts", method, BrowserVersion.CHROME, alerts.CHROME(), alerts.DEFAULT());
60 assertNotEquals("@Alerts", method, BrowserVersion.FIREFOX, alerts.FF(), alerts.DEFAULT());
61 assertNotEquals("@Alerts", method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), alerts.DEFAULT());
62 assertNotEquals("@Alerts", method, BrowserVersion.EDGE, alerts.EDGE(), alerts.DEFAULT());
63 }
64
65 final HtmlUnitNYI nyiAlerts = method.getAnnotation(HtmlUnitNYI.class);
66 if (nyiAlerts != null) {
67 if (isDefined(nyiAlerts.CHROME())) {
68 if (isDefined(alerts.CHROME())) {
69 assertNotEquals("@HtmlUnitNYI",
70 method, BrowserVersion.CHROME, alerts.CHROME(), nyiAlerts.CHROME());
71 }
72 else if (isDefined(alerts.DEFAULT())) {
73 assertNotEquals("@HtmlUnitNYI",
74 method, BrowserVersion.CHROME, alerts.DEFAULT(), nyiAlerts.CHROME());
75 }
76 else if (isDefined(alerts.value())) {
77 assertNotEquals("@HtmlUnitNYI",
78 method, BrowserVersion.CHROME, alerts.value(), nyiAlerts.CHROME());
79 }
80 }
81
82 if (isDefined(nyiAlerts.FF_ESR())) {
83 if (isDefined(alerts.FF_ESR())) {
84 assertNotEquals("@HtmlUnitNYI",
85 method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), nyiAlerts.FF_ESR());
86 }
87 else if (isDefined(alerts.DEFAULT())) {
88 assertNotEquals("@HtmlUnitNYI",
89 method, BrowserVersion.FIREFOX_ESR, alerts.DEFAULT(), nyiAlerts.FF_ESR());
90 }
91 else if (isDefined(alerts.value())) {
92 assertNotEquals("@HtmlUnitNYI",
93 method, BrowserVersion.FIREFOX_ESR, alerts.value(), nyiAlerts.FF_ESR());
94 }
95 }
96
97 if (isDefined(nyiAlerts.FF())) {
98 if (isDefined(alerts.FF())) {
99 assertNotEquals("@HtmlUnitNYI",
100 method, BrowserVersion.FIREFOX, alerts.FF(), nyiAlerts.FF());
101 }
102 else if (isDefined(alerts.DEFAULT())) {
103 assertNotEquals("@HtmlUnitNYI",
104 method, BrowserVersion.FIREFOX, alerts.DEFAULT(), nyiAlerts.FF());
105 }
106 else if (isDefined(alerts.value())) {
107 assertNotEquals("@HtmlUnitNYI",
108 method, BrowserVersion.FIREFOX, alerts.value(), nyiAlerts.FF());
109 }
110 }
111
112 if (isDefined(nyiAlerts.EDGE())) {
113 if (isDefined(alerts.EDGE())) {
114 assertNotEquals("@HtmlUnitNYI",
115 method, BrowserVersion.EDGE, alerts.EDGE(), nyiAlerts.EDGE());
116 }
117 else if (isDefined(alerts.DEFAULT())) {
118 assertNotEquals("@HtmlUnitNYI",
119 method, BrowserVersion.EDGE, alerts.DEFAULT(), nyiAlerts.EDGE());
120 }
121 else if (isDefined(alerts.value())) {
122 assertNotEquals("@HtmlUnitNYI",
123 method, BrowserVersion.EDGE, alerts.value(), nyiAlerts.EDGE());
124 }
125 }
126 }
127 }
128 }
129
130 private static void assertNotEquals(final String annotation, final Method method, final BrowserVersion browser,
131 final String[] value1, final String[] value2) {
132 if (value1.length != 0 && !SetExpectedAlertsBeforeTestExecutionCallback.EMPTY_DEFAULT.equals(value1[0])
133 && value1.length == value2.length
134 && Arrays.asList(value1).toString().equals(Arrays.asList(value2).toString())) {
135 final String nickname = browser == null ? "DEFAULT" : browser.getNickname();
136 throw new AssertionError("Redundant " + annotation + " for " + nickname + " in "
137 + method.getDeclaringClass().getSimpleName() + '.' + method.getName() + "()");
138 }
139 }
140 }