Skip to content

Commit e278c77

Browse files
committed
Provide cleaner solution for marking tests as beans
1 parent 059eaa5 commit e278c77

File tree

4 files changed

+57
-9
lines changed

4 files changed

+57
-9
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.quarkus.deployment.builditem;
2+
3+
import org.jboss.builder.item.MultiBuildItem;
4+
5+
/**
6+
* This is an optional build item that allows us to track annotations that will define test classes
7+
* It is only available during tests
8+
*/
9+
public final class TestAnnotationBuildItem extends MultiBuildItem {
10+
11+
private final String annotationClassName;
12+
13+
public TestAnnotationBuildItem(String annotationClassName) {
14+
this.annotationClassName = annotationClassName;
15+
}
16+
17+
public String getAnnotationClassName() {
18+
return annotationClassName;
19+
}
20+
}
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
package io.quarkus.arc.deployment;
22

3+
import java.util.List;
4+
35
import org.jboss.jandex.DotName;
46

57
import io.quarkus.deployment.annotations.BuildProducer;
68
import io.quarkus.deployment.annotations.BuildStep;
7-
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
8-
import io.quarkus.runtime.LaunchMode;
9+
import io.quarkus.deployment.builditem.TestAnnotationBuildItem;
910

1011
public class TestsAsBeanDefiningAnnotationsProcessor {
1112

1213
@BuildStep
13-
public void testsAsBeanDefiningAnnotations(LaunchModeBuildItem launchMode,
14-
BuildProducer<BeanDefiningAnnotationBuildItem> producer) {
15-
if (launchMode.getLaunchMode() != LaunchMode.TEST) {
16-
return;
14+
public void produce(List<TestAnnotationBuildItem> items, BuildProducer<BeanDefiningAnnotationBuildItem> producer) {
15+
for (TestAnnotationBuildItem item : items) {
16+
producer.produce(new BeanDefiningAnnotationBuildItem(DotName.createSimple(item.getAnnotationClassName())));
1717
}
18-
19-
producer.produce(new BeanDefiningAnnotationBuildItem(DotName.createSimple("io.quarkus.test.junit.QuarkusTest")));
20-
producer.produce(new BeanDefiningAnnotationBuildItem(DotName.createSimple("org.junit.runner.RunWith")));
2118
}
2219

2320
}

test-framework/junit4/src/main/java/io/quarkus/test/junit4/QuarkusTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@
2020
import static io.quarkus.test.common.PathTestHelper.getTestClassesLocation;
2121

2222
import java.io.IOException;
23+
import java.util.function.Consumer;
2324

25+
import org.jboss.builder.BuildChainBuilder;
26+
import org.jboss.builder.BuildContext;
27+
import org.jboss.builder.BuildStep;
28+
import org.junit.runner.RunWith;
2429
import org.junit.runner.notification.RunNotifier;
2530
import org.junit.runners.model.InitializationError;
2631

32+
import io.quarkus.deployment.builditem.TestAnnotationBuildItem;
2733
import io.quarkus.runner.RuntimeRunner;
2834
import io.quarkus.runtime.LaunchMode;
2935
import io.quarkus.test.common.PropertyTestUtil;
@@ -50,6 +56,18 @@ protected void startQuarkus() {
5056
.setClassLoader(getClass().getClassLoader())
5157
.setTarget(getAppClassLocation(getTestClass()))
5258
.setFrameworkClassesPath(getTestClassesLocation(getTestClass()))
59+
.addChainCustomizer(new Consumer<BuildChainBuilder>() {
60+
@Override
61+
public void accept(BuildChainBuilder buildChainBuilder) {
62+
buildChainBuilder.addBuildStep(new BuildStep() {
63+
@Override
64+
public void execute(BuildContext context) {
65+
context.produce(new TestAnnotationBuildItem(RunWith.class.getName()));
66+
}
67+
}).produces(TestAnnotationBuildItem.class)
68+
.build();
69+
}
70+
})
5371
.build();
5472
runtimeRunner.run();
5573
}

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import io.quarkus.bootstrap.util.PropertyUtils;
5757
import io.quarkus.deployment.ClassOutput;
5858
import io.quarkus.deployment.QuarkusClassWriter;
59+
import io.quarkus.deployment.builditem.TestAnnotationBuildItem;
5960
import io.quarkus.deployment.builditem.TestClassPredicateBuildItem;
6061
import io.quarkus.deployment.util.IoUtil;
6162
import io.quarkus.runner.RuntimeRunner;
@@ -243,6 +244,18 @@ public boolean test(String className) {
243244
.build();
244245
}
245246
})
247+
.addChainCustomizer(new Consumer<BuildChainBuilder>() {
248+
@Override
249+
public void accept(BuildChainBuilder buildChainBuilder) {
250+
buildChainBuilder.addBuildStep(new BuildStep() {
251+
@Override
252+
public void execute(BuildContext context) {
253+
context.produce(new TestAnnotationBuildItem(QuarkusTest.class.getName()));
254+
}
255+
}).produces(TestAnnotationBuildItem.class)
256+
.build();
257+
}
258+
})
246259
.build();
247260
runtimeRunner.run();
248261

0 commit comments

Comments
 (0)