Skip to content

Commit 90a16a1

Browse files
committed
Implement some ordering fron runorder parameter and fix IT Surefire806SpecifiedTestControlsIT
Signed-off-by: Olivier Lamy <[email protected]>
1 parent 521db93 commit 90a16a1

File tree

5 files changed

+101
-3
lines changed

5 files changed

+101
-3
lines changed

surefire-its/src/test/resources/surefire-806-specifiedTests-multi/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<dependency>
3838
<groupId>junit</groupId>
3939
<artifactId>junit</artifactId>
40-
<version>3.8.1</version>
40+
<version>4.13.2</version>
4141
<scope>test</scope>
4242
</dependency>
4343
</dependencies>

surefire-its/src/test/resources/surefire-806-specifiedTests-single/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<dependency>
3838
<groupId>junit</groupId>
3939
<artifactId>junit</artifactId>
40-
<version>3.8.1</version>
40+
<version>4.13.2</version>
4141
<scope>test</scope>
4242
</dependency>
4343
</dependencies>

surefire-providers/surefire-junit-platform/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
<dependency>
103103
<groupId>org.junit.jupiter</groupId>
104104
<artifactId>junit-jupiter-api</artifactId>
105-
<scope>test</scope>
105+
<scope>provided</scope>
106106
</dependency>
107107
<dependency>
108108
<groupId>org.junit.jupiter</groupId>

surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public JUnitPlatformProvider(ProviderParameters parameters) {
115115
this.parameters = parameters;
116116
this.launcherSessionFactory = launcherSessionFactory;
117117
filters = newFilters();
118+
setupRunOrder();
118119
parameters.getProviderProperties().entrySet().stream()
119120
.filter(entry -> entry.getKey().startsWith("junit.vintage.execution.parallel"))
120121
.forEach(entry -> getConfigurationParameters().put(entry.getKey(), entry.getValue()));
@@ -153,6 +154,34 @@ public JUnitPlatformProvider(ProviderParameters parameters) {
153154
getConfigurationParameters().put("testng.dataProviderThreadCount", dataproviderthreadcount));
154155
}
155156

157+
private void setupRunOrder() {
158+
String runOrder = parameters.getProviderProperties().get("runOrder");
159+
if (runOrder != null) {
160+
if (runOrder.equals("random")) {
161+
getConfigurationParameters()
162+
.put("junit.jupiter.testmethod.order.default", "org.junit.jupiter.api.MethodOrderer$Random");
163+
getConfigurationParameters()
164+
.put("junit.jupiter.testclass.order.default", "org.junit.jupiter.api.ClassOrderer$Random");
165+
} else if (runOrder.equals("alphabetical")) {
166+
getConfigurationParameters()
167+
.put(
168+
"junit.jupiter.testmethod.order.default",
169+
"org.junit.jupiter.api.MethodOrderer$MethodName");
170+
getConfigurationParameters()
171+
.put("junit.jupiter.testclass.order.default", "org.junit.jupiter.api.ClassOrderer$ClassName");
172+
} else if (runOrder.equals("reversealphabetical")) {
173+
getConfigurationParameters()
174+
.put(
175+
"junit.jupiter.testmethod.order.default",
176+
"org.apache.maven.surefire.junitplatform.ReverseOrdering$ReverseMethodOrder");
177+
getConfigurationParameters()
178+
.put(
179+
"junit.jupiter.testclass.order.default",
180+
"org.apache.maven.surefire.junitplatform.ReverseOrdering$ReverseClassOrder");
181+
}
182+
}
183+
}
184+
156185
@Override
157186
public Iterable<Class<?>> getSuites() {
158187
try (LauncherSessionAdapter launcherSession = launcherSessionFactory.openSession()) {
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.maven.surefire.junitplatform;
20+
21+
import java.lang.reflect.Method;
22+
import java.util.Collections;
23+
import java.util.Comparator;
24+
import java.util.Optional;
25+
26+
import org.junit.jupiter.api.ClassDescriptor;
27+
import org.junit.jupiter.api.ClassOrderer;
28+
import org.junit.jupiter.api.ClassOrdererContext;
29+
import org.junit.jupiter.api.MethodDescriptor;
30+
import org.junit.jupiter.api.MethodOrderer;
31+
import org.junit.jupiter.api.MethodOrdererContext;
32+
import org.junit.jupiter.api.parallel.ExecutionMode;
33+
import org.junit.platform.commons.util.ClassUtils;
34+
35+
public class ReverseOrdering {
36+
37+
public static class ReverseMethodOrder implements MethodOrderer {
38+
39+
private static final Comparator<MethodDescriptor> COMPARATOR =
40+
Comparator.comparing((descriptor) -> descriptor.getMethod().getName());
41+
42+
@Override
43+
public void orderMethods(MethodOrdererContext context) {
44+
context.getMethodDescriptors().sort(COMPARATOR);
45+
Collections.reverse(context.getMethodDescriptors());
46+
}
47+
48+
private static String parameterList(Method method) {
49+
return ClassUtils.nullSafeToString(method.getParameterTypes());
50+
}
51+
52+
@Override
53+
public Optional<ExecutionMode> getDefaultExecutionMode() {
54+
return MethodOrderer.super.getDefaultExecutionMode();
55+
}
56+
}
57+
58+
public static class ReverseClassOrder implements ClassOrderer {
59+
60+
private static final Comparator<ClassDescriptor> COMPARATOR =
61+
Comparator.comparing((descriptor) -> descriptor.getTestClass().getName());
62+
63+
@Override
64+
public void orderClasses(ClassOrdererContext context) {
65+
context.getClassDescriptors().sort(COMPARATOR);
66+
Collections.reverse(context.getClassDescriptors());
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)