Skip to content

Commit 44e7ca3

Browse files
committed
[Cdi2] Do not add step definitions to the synthetic bean archive
Fixes: #2241
1 parent 65a6882 commit 44e7ca3

File tree

4 files changed

+54
-27
lines changed

4 files changed

+54
-27
lines changed

.github/workflows/build.yml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ jobs:
3030
run: mvn install -DskipTests=true -DskipITs=true -Darchetype.test.skip=true -Dmaven.javadoc.skip=true -B -V --toolchains .github/workflows/.toolchains.xml
3131
- name: test
3232
run: mvn verify -P-spotless-apply --toolchains .github/workflows/.toolchains.xml
33+
- name: test cdi2-weld
34+
run: cd cdi2 && mvn verify -Pcdi2-weld --toolchains ../.github/workflows/.toolchains.xml
3335

3436
javadoc:
3537
name: 'Javadoc'

cdi2/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ And for Weld it is:
2727
<dependency>
2828
<groupId>org.jboss.weld.se</groupId>
2929
<artifactId>weld-se-core</artifactId>
30-
<version>3.1.1.Final</version>
30+
<version>4.0.0.Final</version>
3131
<scope>test</scope>
3232
</dependency>
3333
```

cdi2/src/main/java/io/cucumber/cdi2/Cdi2Factory.java

+7-14
Original file line numberDiff line numberDiff line change
@@ -16,48 +16,41 @@
1616
public final class Cdi2Factory implements ObjectFactory {
1717

1818
private final Map<Class<?>, Unmanaged.UnmanagedInstance<?>> standaloneInstances = new HashMap<>();
19-
private SeContainerInitializer initializer;
2019
private SeContainer container;
2120

2221
@Override
2322
public void start() {
24-
container = getInitializer().initialize();
23+
if (container == null) {
24+
SeContainerInitializer initializer = SeContainerInitializer.newInstance();
25+
container = initializer.initialize();
26+
}
2527
}
2628

2729
@Override
2830
public void stop() {
2931
if (container != null) {
3032
container.close();
3133
container = null;
32-
initializer = null;
3334
}
34-
for (final Unmanaged.UnmanagedInstance<?> unmanaged : standaloneInstances.values()) {
35+
for (Unmanaged.UnmanagedInstance<?> unmanaged : standaloneInstances.values()) {
3536
unmanaged.preDestroy();
3637
unmanaged.dispose();
3738
}
3839
standaloneInstances.clear();
3940
}
4041

41-
private SeContainerInitializer getInitializer() {
42-
if (initializer == null) {
43-
initializer = SeContainerInitializer.newInstance();
44-
}
45-
return initializer;
46-
}
47-
4842
@Override
4943
public boolean addClass(final Class<?> clazz) {
50-
getInitializer().addBeanClasses(clazz);
5144
return true;
5245
}
5346

5447
@Override
5548
public <T> T getInstance(final Class<T> type) {
56-
final Unmanaged.UnmanagedInstance<?> instance = standaloneInstances.get(type);
49+
Unmanaged.UnmanagedInstance<?> instance = standaloneInstances.get(type);
5750
if (instance != null) {
5851
return type.cast(instance.get());
5952
}
60-
final Instance<T> selected = container.select(type);
53+
Instance<T> selected = container.select(type);
6154
if (selected.isUnsatisfied()) {
6255
BeanManager beanManager = container.getBeanManager();
6356
Unmanaged<T> unmanaged = new Unmanaged<>(beanManager, type);

cdi2/src/test/java/io/cucumber/cdi2/Cdi2FactoryTest.java

+44-12
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,46 @@
11
package io.cucumber.cdi2;
22

33
import io.cucumber.core.backend.ObjectFactory;
4+
import org.junit.jupiter.api.AfterEach;
45
import org.junit.jupiter.api.Test;
56

67
import javax.enterprise.context.ApplicationScoped;
78
import javax.enterprise.inject.Vetoed;
9+
import javax.inject.Inject;
810

911
import static org.hamcrest.MatcherAssert.assertThat;
1012
import static org.hamcrest.core.Is.is;
1113
import static org.hamcrest.core.IsEqual.equalTo;
1214
import static org.hamcrest.core.IsNot.not;
1315
import static org.hamcrest.core.IsNull.notNullValue;
1416
import static org.junit.jupiter.api.Assertions.assertAll;
15-
import static org.junit.jupiter.api.Assertions.assertNotNull;
17+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1618

1719
class Cdi2FactoryTest {
1820

1921
final ObjectFactory factory = new Cdi2Factory();
2022

23+
@AfterEach
24+
void stop(){
25+
factory.stop();
26+
}
27+
28+
@Test
29+
void lifecycleIsIdempotent(){
30+
assertDoesNotThrow(factory::stop);
31+
factory.start();
32+
assertDoesNotThrow(factory::start);
33+
factory.stop();
34+
assertDoesNotThrow(factory::stop);
35+
}
36+
2137
@Vetoed
2238
static class VetoedBean {
2339

2440
}
2541

2642
@Test
2743
void shouldCreateNewInstancesForEachScenario() {
28-
factory.addClass(VetoedBean.class);
29-
3044
// Scenario 1
3145
factory.start();
3246
VetoedBean a1 = factory.getInstance(VetoedBean.class);
@@ -54,28 +68,46 @@ static class ApplicationScopedBean {
5468

5569
@Test
5670
void shouldCreateApplicationScopedInstance() {
57-
factory.addClass(ApplicationScopedBean.class);
5871
factory.start();
59-
ApplicationScopedBean cdiStep = factory.getInstance(ApplicationScopedBean.class);
72+
ApplicationScopedBean bean = factory.getInstance(ApplicationScopedBean.class);
6073
assertAll(
6174
// assert that it is is a CDI proxy
62-
() -> assertThat(cdiStep.getClass(), not(is(ApplicationScopedBean.class))),
63-
() -> assertThat(cdiStep.getClass().getSuperclass(), is(ApplicationScopedBean.class)));
75+
() -> assertThat(bean.getClass(), not(is(ApplicationScopedBean.class))),
76+
() -> assertThat(bean.getClass().getSuperclass(), is(ApplicationScopedBean.class)));
6477
factory.stop();
6578
}
6679

80+
static class UnmanagedBean {
81+
82+
}
83+
6784
@Test
6885
void shouldCreateUnmanagedInstance() {
69-
factory.addClass(UnmanagedBean.class);
7086
factory.start();
71-
assertNotNull(factory.getInstance(UnmanagedBean.class));
72-
UnmanagedBean cdiStep = factory.getInstance(UnmanagedBean.class);
73-
assertThat(cdiStep.getClass(), is(UnmanagedBean.class));
87+
UnmanagedBean bean = factory.getInstance(UnmanagedBean.class);
88+
assertThat(bean.getClass(), is(UnmanagedBean.class));
7489
factory.stop();
7590
}
7691

77-
static class UnmanagedBean {
92+
static class OtherStepDefinitions {
93+
94+
}
95+
96+
static class StepDefinitions {
97+
98+
@Inject
99+
OtherStepDefinitions injected;
78100

79101
}
80102

103+
@Test
104+
void shouldInjectStepDefinitions() {
105+
factory.addClass(OtherStepDefinitions.class);
106+
factory.addClass(StepDefinitions.class);
107+
factory.start();
108+
StepDefinitions stepDefinitions = factory.getInstance(StepDefinitions.class);
109+
assertThat(stepDefinitions.injected, is(notNullValue()));
110+
factory.stop();
111+
}
112+
81113
}

0 commit comments

Comments
 (0)