Skip to content

Commit 66a02f9

Browse files
committed
move annotation checking to the archunit tests
1 parent 7fd5fa8 commit 66a02f9

File tree

5 files changed

+322
-60
lines changed

5 files changed

+322
-60
lines changed

src/test/java/org/htmlunit/archunit/Architecture2Test.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,28 @@
1414
*/
1515
package org.htmlunit.archunit;
1616

17+
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.methods;
1718
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
1819

1920
import java.util.HashSet;
2021
import java.util.Set;
2122
import java.util.stream.Collectors;
2223

2324
import org.htmlunit.BrowserVersion;
25+
import org.htmlunit.junit.annotation.AnnotationUtils;
2426
import org.junit.Assert;
27+
import org.junit.Test;
2528
import org.junit.runner.RunWith;
2629

2730
import com.tngtech.archunit.core.domain.JavaClasses;
31+
import com.tngtech.archunit.core.domain.JavaMethod;
2832
import com.tngtech.archunit.junit.AnalyzeClasses;
2933
import com.tngtech.archunit.junit.ArchTest;
3034
import com.tngtech.archunit.junit.ArchUnitRunner;
35+
import com.tngtech.archunit.lang.ArchCondition;
3136
import com.tngtech.archunit.lang.ArchRule;
37+
import com.tngtech.archunit.lang.ConditionEvents;
38+
import com.tngtech.archunit.lang.SimpleConditionEvent;
3239

3340
/**
3441
* Architecture tests for our test cases.
@@ -176,4 +183,26 @@ else if (oneTests.size() == 0) {
176183
@ArchTest
177184
public static final ArchRule hamcrest = noClasses()
178185
.should().dependOnClassesThat().resideInAPackage("org.hamcrest..");
186+
187+
private static final ArchCondition<JavaMethod> haveConsistentTestAnnotations =
188+
new ArchCondition<JavaMethod>("have consistent HtmlUnit test annotations") {
189+
@Override
190+
public void check(final JavaMethod method, final ConditionEvents events) {
191+
try {
192+
AnnotationUtils.assertAlerts(method.reflect());
193+
}
194+
catch (final AssertionError e) {
195+
events.add(SimpleConditionEvent.violated(method, e.getMessage()));
196+
}
197+
}
198+
};
199+
200+
/**
201+
* Validate test annotations.
202+
*/
203+
@ArchTest
204+
public static final ArchRule jsxGetterAnnotationStartsWithGet = methods()
205+
.that().areAnnotatedWith(Test.class)
206+
.and().areNotDeclaredIn("org.htmlunit.junit.annotation.AnnotationUtilsTest")
207+
.should(haveConsistentTestAnnotations);
179208
}

src/test/java/org/htmlunit/javascript/host/css/property/ElementClientHeightTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,9 +1195,7 @@ public void nolayer() throws Exception {
11951195
@Test
11961196
@Alerts("0")
11971197
@HtmlUnitNYI(CHROME = "18",
1198-
EDGE = "18",
1199-
FF = "0",
1200-
FF_ESR = "0")
1198+
EDGE = "18")
12011199
public void noscript() throws Exception {
12021200
loadPageVerifyTitle2(test("noscript"));
12031201
}

src/test/java/org/htmlunit/junit/BrowserStatement.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import org.htmlunit.BrowserVersion;
1818
import org.htmlunit.WebDriverTestCase;
19-
import org.htmlunit.junit.annotation.AnnotationUtils;
2019
import org.junit.runners.model.FrameworkMethod;
2120
import org.junit.runners.model.Statement;
2221

@@ -69,7 +68,6 @@ public void evaluate() throws Throwable {
6968
}
7069
}
7170
}
72-
AnnotationUtils.assertAlerts(method_.getMethod());
7371
}
7472

7573
public void evaluateSolo() throws Throwable {

src/test/java/org/htmlunit/junit/annotation/AnnotationUtils.java

Lines changed: 79 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -47,62 +47,94 @@ public static void assertAlerts(final Method method) {
4747
final Alerts alerts = method.getAnnotation(Alerts.class);
4848
if (alerts != null) {
4949
if (!BrowserVersionClassRunner.isDefined(alerts.value())) {
50-
assertFalse("Obsolete DEFAULT because all browser expectations are 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-
assertFalse("Obsolete DEFAULT because all browser expectations are defined individually",
50+
assertFalse("Obsolete DEFAULT because all browser expectations defined individually",
5851
BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
5952
&& BrowserVersionClassRunner.isDefined(alerts.CHROME())
6053
&& BrowserVersionClassRunner.isDefined(alerts.FF())
6154
&& BrowserVersionClassRunner.isDefined(alerts.FF_ESR())
6255
&& BrowserVersionClassRunner.isDefined(alerts.EDGE()));
6356

64-
assertNotEquals(method, BrowserVersion.EDGE, alerts.EDGE(), alerts.DEFAULT());
65-
assertNotEquals(method, BrowserVersion.CHROME, alerts.CHROME(), alerts.DEFAULT());
66-
assertNotEquals(method, BrowserVersion.FIREFOX, alerts.FF(), alerts.DEFAULT());
67-
assertNotEquals(method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), alerts.DEFAULT());
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());
6861
}
6962

7063
final HtmlUnitNYI nyiAlerts = method.getAnnotation(HtmlUnitNYI.class);
7164
if (nyiAlerts != null) {
72-
if (BrowserVersionClassRunner.isDefined(alerts.CHROME())
73-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.CHROME())) {
74-
assertNotEquals(method, BrowserVersion.CHROME, alerts.CHROME(), nyiAlerts.CHROME());
75-
}
76-
else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
77-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.CHROME())) {
78-
assertNotEquals(method, BrowserVersion.CHROME, alerts.DEFAULT(), nyiAlerts.CHROME());
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+
}
7978
}
8079

81-
if (BrowserVersionClassRunner.isDefined(alerts.FF_ESR())
82-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.FF_ESR())) {
83-
assertNotEquals(method, BrowserVersion.FIREFOX_ESR, alerts.FF_ESR(), nyiAlerts.FF_ESR());
84-
}
85-
else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
86-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.FF_ESR())) {
87-
assertNotEquals(method, BrowserVersion.FIREFOX_ESR, alerts.DEFAULT(), nyiAlerts.FF_ESR());
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+
}
8893
}
8994

90-
if (BrowserVersionClassRunner.isDefined(alerts.FF())
91-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.FF())) {
92-
assertNotEquals(method, BrowserVersion.FIREFOX, alerts.FF(), nyiAlerts.FF());
93-
}
94-
else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
95-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.FF())) {
96-
assertNotEquals(method, BrowserVersion.FIREFOX, alerts.DEFAULT(), nyiAlerts.FF());
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+
}
97108
}
98109

99-
if (BrowserVersionClassRunner.isDefined(alerts.EDGE())
100-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.EDGE())) {
101-
assertNotEquals(method, BrowserVersion.EDGE, alerts.EDGE(), nyiAlerts.EDGE());
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+
}
102123
}
103-
else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
104-
&& BrowserVersionClassRunner.isDefined(nyiAlerts.EDGE())) {
105-
assertNotEquals(method, BrowserVersion.EDGE, alerts.DEFAULT(), nyiAlerts.EDGE());
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+
}
106138
}
107139
}
108140
}
@@ -117,20 +149,22 @@ else if (BrowserVersionClassRunner.isDefined(alerts.DEFAULT())
117149
&& BrowserVersionClassRunner.isDefined(alerts2.FF_ESR())
118150
&& BrowserVersionClassRunner.isDefined(alerts2.EDGE()));
119151

120-
assertNotEquals(method, BrowserVersion.EDGE, alerts2.EDGE(), alerts2.DEFAULT());
121-
assertNotEquals(method, BrowserVersion.CHROME, alerts2.CHROME(), alerts2.DEFAULT());
122-
assertNotEquals(method, BrowserVersion.FIREFOX, alerts2.FF(), alerts2.DEFAULT());
123-
assertNotEquals(method, BrowserVersion.FIREFOX_ESR, alerts2.FF_ESR(), alerts2.DEFAULT());
152+
assertNotEquals("@AlertsStandards", method, BrowserVersion.EDGE, alerts2.EDGE(), alerts2.DEFAULT());
153+
assertNotEquals("@AlertsStandards", method, BrowserVersion.CHROME, alerts2.CHROME(), alerts2.DEFAULT());
154+
assertNotEquals("@AlertsStandards", method, BrowserVersion.FIREFOX, alerts2.FF(), alerts2.DEFAULT());
155+
assertNotEquals("@AlertsStandards",
156+
method, BrowserVersion.FIREFOX_ESR, alerts2.FF_ESR(), alerts2.DEFAULT());
124157
}
125158
}
126159
}
127160

128-
private static void assertNotEquals(final Method method, final BrowserVersion browser,
161+
private static void assertNotEquals(final String annotation, final Method method, final BrowserVersion browser,
129162
final String[] value1, final String[] value2) {
130163
if (value1.length != 0 && !BrowserRunner.EMPTY_DEFAULT.equals(value1[0])
131164
&& value1.length == value2.length
132165
&& Arrays.asList(value1).toString().equals(Arrays.asList(value2).toString())) {
133-
throw new AssertionError("Redundant alert for " + browser.getNickname() + " in "
166+
final String nickname = browser == null ? "DEFAULT" : browser.getNickname();
167+
throw new AssertionError("Redundant " + annotation + " for " + nickname + " in "
134168
+ method.getDeclaringClass().getSimpleName() + '.' + method.getName() + "()");
135169
}
136170
}

0 commit comments

Comments
 (0)