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.junit.Assert.assertFalse;
18
19 import java.lang.reflect.Method;
20 import java.util.Arrays;
21
22 import org.htmlunit.BrowserVersion;
23 import org.htmlunit.junit.BrowserRunner;
24 import org.htmlunit.junit.BrowserVersionClassRunner;
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 (!BrowserVersionClassRunner.isDefined(alerts.value())) {
50 assertFalse("Obsolete DEFAULT because all browser expectations defined individually",
51 BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
52 && BrowserVersionClassRunner.isDefined(alerts.CHROME())
53 && BrowserVersionClassRunner.isDefined(alerts.FF())
54 && BrowserVersionClassRunner.isDefined(alerts.FF_ESR())
55 && BrowserVersionClassRunner.isDefined(alerts.EDGE()));
56
57 assertNotEquals("@Alerts", method, BrowserVersion.CHROME, alerts.CHROME(), alerts.DEFAULT());
58 assertNotEquals("@Alerts", method, BrowserVersion.FIREFOX, alerts.FF(), alerts.DEFAULT());
59 assertNotEquals("@Alerts", method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), alerts.DEFAULT());
60 assertNotEquals("@Alerts", method, BrowserVersion.EDGE, alerts.EDGE(), alerts.DEFAULT());
61 }
62
63 final HtmlUnitNYI nyiAlerts = method.getAnnotation(HtmlUnitNYI.class);
64 if (nyiAlerts != null) {
65 if (BrowserVersionClassRunner.isDefined(nyiAlerts.value())) {
66 if (BrowserVersionClassRunner.isDefined(alerts.CHROME())) {
67 assertNotEquals("@HtmlUnitNYI",
68 method, null, alerts.CHROME(), nyiAlerts.value());
69 }
70 else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())) {
71 assertNotEquals("@HtmlUnitNYI",
72 method, null, alerts.DEFAULT(), nyiAlerts.value());
73 }
74 else if (BrowserVersionClassRunner.isDefined(alerts.value())) {
75 assertNotEquals("@HtmlUnitNYI",
76 method, null, alerts.value(), nyiAlerts.value());
77 }
78 }
79
80 if (BrowserVersionClassRunner.isDefined(nyiAlerts.CHROME())) {
81 if (BrowserVersionClassRunner.isDefined(alerts.CHROME())) {
82 assertNotEquals("@HtmlUnitNYI",
83 method, BrowserVersion.CHROME, alerts.CHROME(), nyiAlerts.CHROME());
84 }
85 else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())) {
86 assertNotEquals("@HtmlUnitNYI",
87 method, BrowserVersion.CHROME, alerts.DEFAULT(), nyiAlerts.CHROME());
88 }
89 else if (BrowserVersionClassRunner.isDefined(alerts.value())) {
90 assertNotEquals("@HtmlUnitNYI",
91 method, BrowserVersion.CHROME, alerts.value(), nyiAlerts.CHROME());
92 }
93 }
94
95 if (BrowserVersionClassRunner.isDefined(nyiAlerts.FF_ESR())) {
96 if (BrowserVersionClassRunner.isDefined(alerts.FF_ESR())) {
97 assertNotEquals("@HtmlUnitNYI",
98 method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), nyiAlerts.FF_ESR());
99 }
100 else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())) {
101 assertNotEquals("@HtmlUnitNYI",
102 method, BrowserVersion.FIREFOX_ESR, alerts.DEFAULT(), nyiAlerts.FF_ESR());
103 }
104 else if (BrowserVersionClassRunner.isDefined(alerts.value())) {
105 assertNotEquals("@HtmlUnitNYI",
106 method, BrowserVersion.FIREFOX_ESR, alerts.value(), nyiAlerts.FF_ESR());
107 }
108 }
109
110 if (BrowserVersionClassRunner.isDefined(nyiAlerts.FF())) {
111 if (BrowserVersionClassRunner.isDefined(alerts.FF())) {
112 assertNotEquals("@HtmlUnitNYI",
113 method, BrowserVersion.FIREFOX, alerts.FF(), nyiAlerts.FF());
114 }
115 else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())) {
116 assertNotEquals("@HtmlUnitNYI",
117 method, BrowserVersion.FIREFOX, alerts.DEFAULT(), nyiAlerts.FF());
118 }
119 else if (BrowserVersionClassRunner.isDefined(alerts.value())) {
120 assertNotEquals("@HtmlUnitNYI",
121 method, BrowserVersion.FIREFOX, alerts.value(), nyiAlerts.FF());
122 }
123 }
124
125 if (BrowserVersionClassRunner.isDefined(nyiAlerts.EDGE())) {
126 if (BrowserVersionClassRunner.isDefined(alerts.EDGE())) {
127 assertNotEquals("@HtmlUnitNYI",
128 method, BrowserVersion.EDGE, alerts.EDGE(), nyiAlerts.EDGE());
129 }
130 else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())) {
131 assertNotEquals("@HtmlUnitNYI",
132 method, BrowserVersion.EDGE, alerts.DEFAULT(), nyiAlerts.EDGE());
133 }
134 else if (BrowserVersionClassRunner.isDefined(alerts.value())) {
135 assertNotEquals("@HtmlUnitNYI",
136 method, BrowserVersion.EDGE, alerts.value(), nyiAlerts.EDGE());
137 }
138 }
139 }
140 }
141 }
142
143 private static void assertNotEquals(final String annotation, final Method method, final BrowserVersion browser,
144 final String[] value1, final String[] value2) {
145 if (value1.length != 0 && !BrowserRunner.EMPTY_DEFAULT.equals(value1[0])
146 && value1.length == value2.length
147 && Arrays.asList(value1).toString().equals(Arrays.asList(value2).toString())) {
148 final String nickname = browser == null ? "DEFAULT" : browser.getNickname();
149 throw new AssertionError("Redundant " + annotation + " for " + nickname + " in "
150 + method.getDeclaringClass().getSimpleName() + '.' + method.getName() + "()");
151 }
152 }
153 }