Skip to content

Commit e738f56

Browse files
author
Vincent Potucek
committed
[rewrite] add org.junit.openrewrite.SanityCheck
- https://docs.openrewrite.org/recipes/java/testing/junit/jupiterbestpractices - https://docs.openrewrite.org/recipes/java/migrate/upgradetojava17 Signed-off-by: Vincent Potucek <vpotucek@me.com>
1 parent dbbacd6 commit e738f56

File tree

90 files changed

+524
-411
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+524
-411
lines changed

.github/workflows/sanity-check.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Sanity Check 🕊
2+
on:
3+
push:
4+
branches:
5+
- main
6+
- 'releases/**'
7+
paths:
8+
- '.github/**'
9+
pull_request:
10+
paths:
11+
- '.github/**'
12+
permissions: {}
13+
jobs:
14+
validate:
15+
name: Validate 📊
16+
runs-on: ubuntu-latest
17+
permissions:
18+
security-events: write
19+
steps:
20+
- name: Checkout Repository 📥
21+
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
22+
with:
23+
persist-credentials: false
24+
- name: Checkstyle ☑️
25+
uses: ./.github/actions/run-gradle
26+
with:
27+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
28+
arguments: checkstyleMain
29+
- name: Spotless ✨
30+
uses: ./.github/actions/run-gradle
31+
with:
32+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
33+
arguments: spotlessCheck
34+
- name: ArchUnit 🏛️
35+
uses: ./.github/actions/run-gradle
36+
with:
37+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
38+
arguments: archUnit
39+
- name: Verify OSGi 🧩
40+
uses: ./.github/actions/run-gradle
41+
with:
42+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
43+
arguments: verifyOSGiTask
44+
- name: Rewrite ⚙️
45+
uses: ./.github/actions/run-gradle
46+
with:
47+
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
48+
arguments: rewriteDryRun -Dorg.gradle.jvmargs=-Xmx2G

gradle/config/rewrite.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
type: specs.openrewrite.org/v1beta/recipe
3+
name: org.junit.openrewrite.SanityCheck
4+
displayName: Apply all common best practices
5+
description: Comprehensive code quality recipe combining modernization, security, and best practices.
6+
recipeList:
7+
- org.openrewrite.java.migrate.UpgradeToJava17
8+
- org.openrewrite.java.testing.junit.JupiterBestPractices # consider; org.openrewrite.java.testing.cleanup.BestPractices
9+
- org.openrewrite.staticanalysis.EqualsAvoidsNull
10+
---

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ commonCustomUserData = { id = "com.gradle.common-custom-user-data-gradle-plugin"
101101
develocity = { id = "com.gradle.develocity", version = "4.2.2" }
102102
download = { id = "de.undercouch.download", version = "5.6.0" }
103103
errorProne = { id = "net.ltgt.errorprone", version = "4.3.0" }
104+
rewrite = { id = "org.openrewrite.rewrite", version = "7.21.0" }
104105
foojayResolver = { id = "org.gradle.toolchains.foojay-resolver", version = "1.0.0" }
105106
gitPublish = { id = "org.ajoberstar.git-publish", version = "5.1.3" }
106107
jmh = { id = "me.champeau.jmh", version = "0.7.3" }

gradle/plugins/common/build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ plugins {
77

88
dependencies {
99
implementation("junitbuild.base:dsl-extensions")
10-
implementation(projects.buildParameters)
1110
implementation(projects.backwardCompatibility)
12-
implementation(libs.plugins.kotlin.markerCoordinates)
11+
implementation(projects.buildParameters)
1312
implementation(libs.plugins.bnd.markerCoordinates)
1413
implementation(libs.plugins.commonCustomUserData.markerCoordinates)
1514
implementation(libs.plugins.develocity.markerCoordinates)
1615
implementation(libs.plugins.errorProne.markerCoordinates)
1716
implementation(libs.plugins.foojayResolver.markerCoordinates)
1817
implementation(libs.plugins.jmh.markerCoordinates)
18+
implementation(libs.plugins.kotlin.markerCoordinates)
1919
implementation(libs.plugins.nullaway.markerCoordinates)
20+
implementation(libs.plugins.rewrite.markerCoordinates)
2021
implementation(libs.plugins.shadow.markerCoordinates)
2122
implementation(libs.plugins.spotless.markerCoordinates)
2223
}

gradle/plugins/common/src/main/kotlin/junitbuild.checkstyle-conventions.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ checkstyle {
2121
configDirectory = rootProject.layout.projectDirectory.dir("gradle/config/checkstyle")
2222
}
2323

24-
tasks.check {
25-
dependsOn(tasks.withType<Checkstyle>())
26-
}
24+
//tasks.check { // assuming spotless does the job already, checkstyle is first dedicated redundancy layer.
25+
// dependsOn(tasks.withType<Checkstyle>())
26+
//}

gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ plugins {
99
id("junitbuild.eclipse-conventions")
1010
id("junitbuild.jacoco-java-conventions")
1111
id("junitbuild.java-errorprone-conventions")
12+
id("junitbuild.rewrite-conventions")
1213
}
1314

1415
val mavenizedProjects: List<Project> by rootProject.extra

gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,21 @@ val osgiVerificationClasspath = configurations.resolvable("osgiVerificationClass
9999
extendsFrom(osgiVerification.get())
100100
}
101101

102+
// Make the task available for calling from outside
103+
tasks.register("verifyOSGiTask") {
104+
description = "Verifies OSGi metadata in the built jar"
105+
group = "verification"
106+
dependsOn(verify)
107+
}
108+
102109
// Bnd's Resolve task is what verifies that a jar can be used in OSGi and
103110
// that its metadata is valid. If the metadata is invalid this task will
104111
// fail.
105-
val verifyOSGi by tasks.registering(Resolve::class) {
112+
val verify by tasks.registering(Resolve::class) {
106113
bndrun = osgiProperties.flatMap { it.destinationFile }
107114
outputBndrun = layout.buildDirectory.file("resolvedOSGiProperties.bndrun")
108115
isReportOptional = false
109-
// By default bnd will use jars found in:
116+
// By default, bnd will use jars found in:
110117
// 1. project.sourceSets.main.runtimeClasspath
111118
// 2. project.configurations.archives.artifacts.files
112119
// to validate the metadata.
@@ -116,7 +123,3 @@ val verifyOSGi by tasks.registering(Resolve::class) {
116123
bundles(osgiVerificationClasspath)
117124
properties.empty()
118125
}
119-
120-
tasks.check {
121-
dependsOn(verifyOSGi)
122-
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
plugins {
2+
id("org.openrewrite.rewrite")
3+
}
4+
5+
dependencies {
6+
rewrite("org.openrewrite.recipe:rewrite-migrate-java:3.22.0")
7+
rewrite("org.openrewrite.recipe:rewrite-static-analysis:2.22.0")
8+
rewrite("org.openrewrite.recipe:rewrite-testing-frameworks:3.22.0")
9+
}
10+
11+
rewrite {
12+
activeRecipe("org.junit.openrewrite.SanityCheck")
13+
configFile = project.getRootProject().file("gradle/config/rewrite.yml")
14+
exclusion(
15+
// JupiterBestPractices: class scope issue;
16+
"**AggregatorIntegrationTests.java",
17+
"**BeforeAndAfterSuiteTests.java",
18+
"**BridgeMethods.java",
19+
"**CsvArgumentsProvider.java",
20+
"**DefaultArgumentsAccessor.java",
21+
"**DiscoverySelectorResolverTests.java",
22+
"**DiscoveryTests.java",
23+
"**DisplayNameGenerationTests.java",
24+
"**DynamicNodeGenerationTests.java",
25+
"**DynamicTestTests.java",
26+
"**EngineDiscoveryResultValidatorTests.java", // fixable with @DisabledOnOs(WINDOWS)
27+
"**ExceptionHandlingTests.java",
28+
"**ExecutionCancellationTests.java",
29+
"**ExtensionRegistrationViaParametersAndFieldsTests.java",
30+
"**InvocationInterceptorTests.java",
31+
"**IsTestMethodTests.java",
32+
"**IsTestTemplateMethodTests.java",
33+
"**JupiterTestDescriptorTests.java",
34+
"**LifecycleMethodUtilsTests.java",
35+
"**MultipleTestableAnnotationsTests.java",
36+
"**NestedContainerEventConditionTests.java",
37+
"**ParallelExecutionIntegrationTests.java",
38+
"**ParameterResolverTests.java",
39+
"**ParameterizedTestIntegrationTests.java",
40+
"**RepeatedTestTests.java",
41+
"**StaticPackagePrivateBeforeMethod.java",
42+
"**SubclassedAssertionsTests.java",
43+
"**TempDirectoryCleanupTests.java",
44+
"**TestCase.java",
45+
"**TestCases.java",
46+
"**TestExecutionExceptionHandlerTests.java",
47+
"**TestInstanceFactoryTests.java",
48+
"**TestTemplateInvocationTestDescriptorTests.java",
49+
"**TestTemplateInvocationTests.java",
50+
"**TestTemplateTestDescriptorTests.java",
51+
"**TestWatcherTests.java",
52+
"**TimeoutExtensionTests.java",
53+
"**UniqueIdTrackingListenerIntegrationTests.java",
54+
"**WorkerThreadPoolHierarchicalTestExecutorServiceTests.java",
55+
"**org/junit/jupiter/engine/bridge**",
56+
// trivial import fix.
57+
"**Assert**AssertionsTests.java",
58+
"**DynamicContainerTests.java",
59+
// legacy
60+
"**documentation/src/test/java/example**",
61+
"**testFixtures/java/org/junit/vintage/engine/samples**",
62+
)
63+
setExportDatatables(true)
64+
setFailOnDryRunResults(true)
65+
}

junit-platform-commons/src/main/java/org/junit/platform/commons/support/ModifierSupport.java

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import static org.apiguardian.api.API.Status.MAINTAINED;
1515

1616
import java.lang.reflect.Member;
17+
import java.lang.reflect.Modifier;
1718

1819
import org.apiguardian.api.API;
1920
import org.junit.platform.commons.util.ReflectionUtils;
@@ -47,7 +48,7 @@ private ModifierSupport() {
4748
*
4849
* @param clazz the class to check; never {@code null}
4950
* @return {@code true} if the class is {@code public}
50-
* @see java.lang.reflect.Modifier#isPublic(int)
51+
* @see Modifier#isPublic(int)
5152
*/
5253
public static boolean isPublic(Class<?> clazz) {
5354
return ReflectionUtils.isPublic(clazz);
@@ -58,7 +59,7 @@ public static boolean isPublic(Class<?> clazz) {
5859
*
5960
* @param member the member to check; never {@code null}
6061
* @return {@code true} if the member is {@code public}
61-
* @see java.lang.reflect.Modifier#isPublic(int)
62+
* @see Modifier#isPublic(int)
6263
*/
6364
public static boolean isPublic(Member member) {
6465
return ReflectionUtils.isPublic(member);
@@ -69,7 +70,7 @@ public static boolean isPublic(Member member) {
6970
*
7071
* @param clazz the class to check; never {@code null}
7172
* @return {@code true} if the class is {@code private}
72-
* @see java.lang.reflect.Modifier#isPrivate(int)
73+
* @see Modifier#isPrivate(int)
7374
*/
7475
public static boolean isPrivate(Class<?> clazz) {
7576
return ReflectionUtils.isPrivate(clazz);
@@ -80,7 +81,7 @@ public static boolean isPrivate(Class<?> clazz) {
8081
*
8182
* @param member the member to check; never {@code null}
8283
* @return {@code true} if the member is {@code private}
83-
* @see java.lang.reflect.Modifier#isPrivate(int)
84+
* @see Modifier#isPrivate(int)
8485
*/
8586
public static boolean isPrivate(Member member) {
8687
return ReflectionUtils.isPrivate(member);
@@ -96,9 +97,9 @@ public static boolean isPrivate(Member member) {
9697
*
9798
* @param clazz the class to check; never {@code null}
9899
* @return {@code true} if the class is not {@code private}
99-
* @see java.lang.reflect.Modifier#isPublic(int)
100-
* @see java.lang.reflect.Modifier#isProtected(int)
101-
* @see java.lang.reflect.Modifier#isPrivate(int)
100+
* @see Modifier#isPublic(int)
101+
* @see Modifier#isProtected(int)
102+
* @see Modifier#isPrivate(int)
102103
*/
103104
public static boolean isNotPrivate(Class<?> clazz) {
104105
return ReflectionUtils.isNotPrivate(clazz);
@@ -114,9 +115,9 @@ public static boolean isNotPrivate(Class<?> clazz) {
114115
*
115116
* @param member the member to check; never {@code null}
116117
* @return {@code true} if the member is not {@code private}
117-
* @see java.lang.reflect.Modifier#isPublic(int)
118-
* @see java.lang.reflect.Modifier#isProtected(int)
119-
* @see java.lang.reflect.Modifier#isPrivate(int)
118+
* @see Modifier#isPublic(int)
119+
* @see Modifier#isProtected(int)
120+
* @see Modifier#isPrivate(int)
120121
*/
121122
public static boolean isNotPrivate(Member member) {
122123
return ReflectionUtils.isNotPrivate(member);
@@ -127,7 +128,7 @@ public static boolean isNotPrivate(Member member) {
127128
*
128129
* @param clazz the class to check; never {@code null}
129130
* @return {@code true} if the class is {@code abstract}
130-
* @see java.lang.reflect.Modifier#isAbstract(int)
131+
* @see Modifier#isAbstract(int)
131132
*/
132133
public static boolean isAbstract(Class<?> clazz) {
133134
return ReflectionUtils.isAbstract(clazz);
@@ -138,7 +139,7 @@ public static boolean isAbstract(Class<?> clazz) {
138139
*
139140
* @param member the class to check; never {@code null}
140141
* @return {@code true} if the member is {@code abstract}
141-
* @see java.lang.reflect.Modifier#isAbstract(int)
142+
* @see Modifier#isAbstract(int)
142143
*/
143144
public static boolean isAbstract(Member member) {
144145
return ReflectionUtils.isAbstract(member);
@@ -150,7 +151,7 @@ public static boolean isAbstract(Member member) {
150151
* @param clazz the class to check; never {@code null}
151152
* @return {@code true} if the class is not {@code abstract}
152153
* @since 1.13
153-
* @see java.lang.reflect.Modifier#isAbstract(int)
154+
* @see Modifier#isAbstract(int)
154155
*/
155156
@API(status = EXPERIMENTAL, since = "6.0")
156157
public static boolean isNotAbstract(Class<?> clazz) {
@@ -163,7 +164,7 @@ public static boolean isNotAbstract(Class<?> clazz) {
163164
* @param member the class to check; never {@code null}
164165
* @return {@code true} if the member is not {@code abstract}
165166
* @since 1.13
166-
* @see java.lang.reflect.Modifier#isAbstract(int)
167+
* @see Modifier#isAbstract(int)
167168
*/
168169
@API(status = EXPERIMENTAL, since = "6.0")
169170
public static boolean isNotAbstract(Member member) {
@@ -175,7 +176,7 @@ public static boolean isNotAbstract(Member member) {
175176
*
176177
* @param clazz the class to check; never {@code null}
177178
* @return {@code true} if the class is {@code static}
178-
* @see java.lang.reflect.Modifier#isStatic(int)
179+
* @see Modifier#isStatic(int)
179180
*/
180181
public static boolean isStatic(Class<?> clazz) {
181182
return ReflectionUtils.isStatic(clazz);
@@ -186,7 +187,7 @@ public static boolean isStatic(Class<?> clazz) {
186187
*
187188
* @param member the member to check; never {@code null}
188189
* @return {@code true} if the member is {@code static}
189-
* @see java.lang.reflect.Modifier#isStatic(int)
190+
* @see Modifier#isStatic(int)
190191
*/
191192
public static boolean isStatic(Member member) {
192193
return ReflectionUtils.isStatic(member);
@@ -197,7 +198,7 @@ public static boolean isStatic(Member member) {
197198
*
198199
* @param clazz the class to check; never {@code null}
199200
* @return {@code true} if the class is not {@code static}
200-
* @see java.lang.reflect.Modifier#isStatic(int)
201+
* @see Modifier#isStatic(int)
201202
*/
202203
public static boolean isNotStatic(Class<?> clazz) {
203204
return ReflectionUtils.isNotStatic(clazz);
@@ -208,7 +209,7 @@ public static boolean isNotStatic(Class<?> clazz) {
208209
*
209210
* @param member the member to check; never {@code null}
210211
* @return {@code true} if the member is not {@code static}
211-
* @see java.lang.reflect.Modifier#isStatic(int)
212+
* @see Modifier#isStatic(int)
212213
*/
213214
public static boolean isNotStatic(Member member) {
214215
return ReflectionUtils.isNotStatic(member);
@@ -220,7 +221,7 @@ public static boolean isNotStatic(Member member) {
220221
* @param clazz the class to check; never {@code null}
221222
* @return {@code true} if the class is {@code final}
222223
* @since 1.5
223-
* @see java.lang.reflect.Modifier#isFinal(int)
224+
* @see Modifier#isFinal(int)
224225
*/
225226
@API(status = MAINTAINED, since = "1.5")
226227
public static boolean isFinal(Class<?> clazz) {
@@ -233,7 +234,7 @@ public static boolean isFinal(Class<?> clazz) {
233234
* @param clazz the class to check; never {@code null}
234235
* @return {@code true} if the class is not {@code final}
235236
* @since 1.5
236-
* @see java.lang.reflect.Modifier#isFinal(int)
237+
* @see Modifier#isFinal(int)
237238
*/
238239
@API(status = MAINTAINED, since = "1.5")
239240
public static boolean isNotFinal(Class<?> clazz) {
@@ -246,7 +247,7 @@ public static boolean isNotFinal(Class<?> clazz) {
246247
* @param member the member to check; never {@code null}
247248
* @return {@code true} if the member is {@code final}
248249
* @since 1.5
249-
* @see java.lang.reflect.Modifier#isFinal(int)
250+
* @see Modifier#isFinal(int)
250251
*/
251252
@API(status = MAINTAINED, since = "1.5")
252253
public static boolean isFinal(Member member) {
@@ -259,7 +260,7 @@ public static boolean isFinal(Member member) {
259260
* @param member the member to check; never {@code null}
260261
* @return {@code true} if the member is not {@code final}
261262
* @since 1.5
262-
* @see java.lang.reflect.Modifier#isFinal(int)
263+
* @see Modifier#isFinal(int)
263264
*/
264265
@API(status = MAINTAINED, since = "1.5")
265266
public static boolean isNotFinal(Member member) {

jupiter-tests/src/test/java/org/junit/jupiter/api/condition/DisabledIfConditionClassLoaderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
*
3030
* @since 5.10
3131
*/
32-
public class DisabledIfConditionClassLoaderTests {
32+
class DisabledIfConditionClassLoaderTests {
3333

3434
@Test
3535
// No need to introduce a "disabled" version of this test, since it would simply be the

0 commit comments

Comments
 (0)