Skip to content

Commit ae2df7c

Browse files
committed
Deprecate junit-vintage-engine to clarify its purpose
1 parent 64b71e9 commit ae2df7c

File tree

5 files changed

+53
-9
lines changed

5 files changed

+53
-9
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ repository on GitHub.
132132
[[release-notes-6.0.0-M1-junit-vintage-deprecations-and-breaking-changes]]
133133
==== Deprecations and Breaking Changes
134134

135-
* ❓
135+
* The JUnit Vintage engine is now deprecated and will report an INFO level discovery issue
136+
when it finds at least one JUnit 4 test class. For now, the intent of the deprecation is
137+
not to signal removal in the next major version but to clarify the intended purpose of
138+
the engine. It should only be used temporarily while migrating tests to JUnit Jupiter or
139+
another testing framework with native JUnit Platform support.
136140

137141
[[release-notes-6.0.0-M1-junit-vintage-new-features-and-improvements]]
138142
==== New Features and Improvements

junit-vintage-engine/src/main/java/org/junit/vintage/engine/Constants.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
1010

1111
package org.junit.vintage.engine;
1212

13+
import static org.apiguardian.api.API.Status.DEPRECATED;
1314
import static org.apiguardian.api.API.Status.EXPERIMENTAL;
14-
import static org.apiguardian.api.API.Status.STABLE;
1515

1616
import org.apiguardian.api.API;
1717

1818
/**
1919
* Collection of constants related to the {@link VintageTestEngine}.
2020
*
21-
* @since 5.12
21+
* @deprecated Should only be used temporarily while migrating tests to JUnit
22+
* Jupiter or another testing framework with native JUnit Platform support
2223
*/
23-
@API(status = STABLE, since = "5.12")
24+
@Deprecated(since = "6.0")
25+
@API(status = DEPRECATED, since = "6.0")
2426
public final class Constants {
2527

2628
/**

junit-vintage-engine/src/main/java/org/junit/vintage/engine/VintageTestEngine.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
package org.junit.vintage.engine;
1212

13-
import static org.apiguardian.api.API.Status.INTERNAL;
13+
import static org.apiguardian.api.API.Status.DEPRECATED;
1414
import static org.junit.platform.engine.TestExecutionResult.successful;
1515
import static org.junit.vintage.engine.descriptor.VintageTestDescriptor.ENGINE_ID;
1616

@@ -31,8 +31,11 @@
3131
* The JUnit Vintage {@link TestEngine}.
3232
*
3333
* @since 4.12
34+
* @deprecated Should only be used temporarily while migrating tests to JUnit
35+
* Jupiter or another testing framework with native JUnit Platform support
3436
*/
35-
@API(status = INTERNAL, since = "4.12")
37+
@Deprecated(since = "6.0")
38+
@API(status = DEPRECATED, since = "6.0")
3639
public final class VintageTestEngine implements TestEngine {
3740

3841
@Override

junit-vintage-engine/src/main/java/org/junit/vintage/engine/discovery/VintageDiscoverer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import org.apiguardian.api.API;
1616
import org.junit.platform.commons.support.scanning.ClassFilter;
17+
import org.junit.platform.engine.DiscoveryIssue;
1718
import org.junit.platform.engine.EngineDiscoveryRequest;
1819
import org.junit.platform.engine.TestDescriptor;
1920
import org.junit.platform.engine.UniqueId;
@@ -45,6 +46,13 @@ public VintageEngineDescriptor discover(EngineDiscoveryRequest discoveryRequest,
4546
RunnerTestDescriptor runnerTestDescriptor = (RunnerTestDescriptor) testDescriptor;
4647
postProcessor.applyFiltersAndCreateDescendants(runnerTestDescriptor);
4748
}
49+
if (!engineDescriptor.getChildren().isEmpty()) {
50+
var issue = DiscoveryIssue.create(DiscoveryIssue.Severity.INFO, //
51+
"The JUnit Vintage engine is deprecated and should only be " //
52+
+ "used temporarily while migrating tests to JUnit Jupiter or another testing " //
53+
+ "framework with native JUnit Platform support.");
54+
discoveryRequest.getDiscoveryListener().issueEncountered(uniqueId, issue);
55+
}
4856
return engineDescriptor;
4957
}
5058

junit-vintage-engine/src/test/java/org/junit/vintage/engine/VintageTestEngineDiscoveryTests.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@
4040

4141
import org.junit.jupiter.api.Test;
4242
import org.junit.platform.commons.util.ClassUtils;
43+
import org.junit.platform.engine.DiscoveryIssue.Severity;
4344
import org.junit.platform.engine.TestDescriptor;
4445
import org.junit.platform.engine.TestTag;
4546
import org.junit.platform.engine.UniqueId;
4647
import org.junit.platform.engine.support.descriptor.ClassSource;
4748
import org.junit.platform.engine.support.descriptor.MethodSource;
4849
import org.junit.platform.launcher.LauncherDiscoveryRequest;
50+
import org.junit.platform.testkit.engine.EngineDiscoveryResults;
51+
import org.junit.platform.testkit.engine.EngineTestKit;
4952
import org.junit.runner.manipulation.Filter;
5053
import org.junit.vintage.engine.samples.PlainOldJavaClassWithoutAnyTestsTestCase;
5154
import org.junit.vintage.engine.samples.junit3.JUnit3SuiteWithSingleTestCaseWithSingleTestWhichFails;
@@ -76,8 +79,6 @@
7679
*/
7780
class VintageTestEngineDiscoveryTests {
7881

79-
VintageTestEngine engine = new VintageTestEngine();
80-
8182
@Test
8283
void resolvesSimpleJUnit4TestClass() throws Exception {
8384
Class<?> testClass = PlainJUnit4TestCaseWithSingleTestWhichFails.class;
@@ -702,6 +703,28 @@ void resolvesTestSourceForParameterizedTests() throws Exception {
702703
assertMethodSource(testClass.getMethod("test"), testMethodDescriptor);
703704
}
704705

706+
@Test
707+
void reportsNoDiscoveryIssuesWhenNoTestsAreFound() {
708+
var request = discoveryRequestForClass(PlainOldJavaClassWithoutAnyTestsTestCase.class);
709+
710+
var results = discover(request);
711+
712+
assertThat(results.getDiscoveryIssues()).isEmpty();
713+
}
714+
715+
@Test
716+
void reportDiscoveryIssueWhenTestsAreFound() {
717+
var request = discoveryRequestForClass(PlainJUnit4TestCaseWithSingleTestWhichFails.class);
718+
719+
var results = discover(request);
720+
721+
assertThat(results.getDiscoveryIssues()).hasSize(1);
722+
723+
var issue = results.getDiscoveryIssues().getFirst();
724+
assertThat(issue.severity()).isEqualTo(Severity.INFO);
725+
assertThat(issue.message()).contains("JUnit Vintage engine is deprecated");
726+
}
727+
705728
private TestDescriptor findChildByDisplayName(TestDescriptor runnerDescriptor, String displayName) {
706729
// @formatter:off
707730
var children = runnerDescriptor.getChildren();
@@ -715,7 +738,11 @@ private TestDescriptor findChildByDisplayName(TestDescriptor runnerDescriptor, S
715738
}
716739

717740
private TestDescriptor discoverTests(LauncherDiscoveryRequest discoveryRequest) {
718-
return engine.discover(discoveryRequest, UniqueId.forEngine(engine.getId()));
741+
return discover(discoveryRequest).getEngineDescriptor();
742+
}
743+
744+
private static EngineDiscoveryResults discover(LauncherDiscoveryRequest discoveryRequest) {
745+
return EngineTestKit.discover(new VintageTestEngine(), discoveryRequest);
719746
}
720747

721748
private Path getClasspathRoot(Class<?> testClass) throws Exception {

0 commit comments

Comments
 (0)