You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2024/12/04 22:39:08 UTC
(wicket) 02/04: WICKET-7125 setBeanManager method test
This is an automated email from the ASF dual-hosted git repository.
pedro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
commit 61f4695ae61bb3e5866d4a39771f36492d280d8c
Author: Pedro Santos <pe...@apache.org>
AuthorDate: Mon Nov 4 15:54:07 2024 -0300
WICKET-7125 setBeanManager method test
---
pom.xml | 4 +-
wicket-cdi/pom.xml | 17 ++----
.../apache/wicket/cdi/CdiConfigurationTest.java | 51 +++++++++++++++---
.../org/apache/wicket/cdi/CdiWicketTester.java | 12 +++--
.../java/org/apache/wicket/cdi/ContextManager.java | 13 ++---
.../wicket/cdi/ConversationPropagatorTest.java | 8 +--
.../org/apache/wicket/cdi/WicketCdiTestCase.java | 63 +++++++++++-----------
.../cdi/testapp/AlternativeTestAppScope.java | 34 ++++++++++++
.../cdi/testapp/ModelWithInjectedDependency.java | 40 ++++++++++++++
9 files changed, 170 insertions(+), 72 deletions(-)
diff --git a/pom.xml b/pom.xml
index 556953b51e..26ad083928 100644
--- a/pom.xml
+++ b/pom.xml
@@ -145,7 +145,7 @@
<assertj-core.version>3.26.3</assertj-core.version>
<bouncycastle.version>1.79</bouncycastle.version>
<byte-buddy.version>1.15.10</byte-buddy.version>
- <cdi-unit.version>4.2.0</cdi-unit.version>
+ <cdi-unit.version>5.0.0-EA7</cdi-unit.version>
<commons-collections4.version>4.4</commons-collections4.version>
<commons-fileupload.version>2.0.0-M2</commons-fileupload.version>
<commons-io.version>2.17.0</commons-io.version>
@@ -638,7 +638,7 @@
</exclusions>
</dependency>
<dependency>
- <groupId>org.jglue.cdi-unit</groupId>
+ <groupId>io.github.cdi-unit</groupId>
<artifactId>cdi-unit</artifactId>
<version>${cdi-unit.version}</version>
<scope>test</scope>
diff --git a/wicket-cdi/pom.xml b/wicket-cdi/pom.xml
index e34624a5e6..ae40a917cf 100644
--- a/wicket-cdi/pom.xml
+++ b/wicket-cdi/pom.xml
@@ -68,20 +68,9 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.junit.vintage</groupId>
- <artifactId>junit-vintage-engine</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.jglue.cdi-unit</groupId>
- <artifactId>cdi-unit</artifactId>
- <exclusions>
- <exclusion>
- <artifactId>org.jboss.spec.javax.annotation</artifactId>
- <groupId>jboss-annotations-api_1.2_spec</groupId>
- </exclusion>
- </exclusions>
+ <groupId>io.github.cdi-unit</groupId>
+ <artifactId>cdi-unit</artifactId>
+ <scope>test</scope>
</dependency>
</dependencies>
<build>
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiConfigurationTest.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiConfigurationTest.java
index 0ee921bade..c7cb4218e6 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiConfigurationTest.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiConfigurationTest.java
@@ -16,22 +16,30 @@
*/
package org.apache.wicket.cdi;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
+import io.github.cdiunit.ActivatedAlternatives;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.inject.Inject;
+import org.apache.wicket.Application;
+import org.apache.wicket.cdi.testapp.AlternativeTestAppScope;
+import org.apache.wicket.cdi.testapp.ModelWithInjectedDependency;
import org.apache.wicket.cdi.testapp.TestConversationPage;
import org.apache.wicket.cdi.testapp.TestPage;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
/**
* @author jsarman
*/
-// FIXME Wicket 10. Re-enable once cdi-unit is adapted to jakarta.**
+// FIXME Wicket 11. Re-enable once the tests are moved to its own module
@Disabled
+@ActivatedAlternatives(AlternativeTestAppScope.class)
class CdiConfigurationTest extends WicketCdiTestCase
{
+ @Inject
+ BeanManager beanManager;
+
@Test
void testApplicationScope()
{
@@ -40,6 +48,14 @@ class CdiConfigurationTest extends WicketCdiTestCase
tester.assertLabel("appscope", "Test ok");
}
+ @Test
+ void testUsesCdiJUnitConfiguration()
+ {
+ configure(new CdiConfiguration().setBeanManager(beanManager));
+ tester.startPage(TestPage.class);
+ tester.assertLabel("appscope", "Alternative ok");
+ }
+
@Test
void testConversationScope()
{
@@ -52,6 +68,26 @@ class CdiConfigurationTest extends WicketCdiTestCase
}
}
+ @Test
+ void testNotConfigured()
+ {
+ assertThrows(IllegalStateException.class, () -> {
+ new ModelWithInjectedDependency();
+ });
+
+ }
+
+ @Test
+ void testAlreadyConfigured()
+ {
+ configure(new CdiConfiguration());
+
+ assertThrows(IllegalStateException.class, () -> {
+ CdiConfiguration.get(Application.get()).setBeanManager(beanManager);
+ });
+
+ }
+
@Test
void testConfigureTwice()
{
@@ -66,13 +102,12 @@ class CdiConfigurationTest extends WicketCdiTestCase
@Test
void testApplicationLevelConfiguration()
{
- WicketTester tester = new WicketTester();
CdiConfiguration config = new CdiConfiguration();
for (ConversationPropagation cp : ConversationPropagation.values())
{
config.setPropagation(cp);
assertEquals(cp, config.getPropagation());
}
- config.configure(tester.getApplication());
+ configure(config);
}
}
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
index e4a4bc4d55..1547b00bc2 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
@@ -22,9 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jakarta.annotation.PreDestroy;
-import jakarta.inject.Inject;
-
import org.apache.wicket.Page;
import org.apache.wicket.core.request.handler.IPageRequestHandler;
import org.apache.wicket.protocol.http.WebApplication;
@@ -35,6 +32,8 @@ import org.apache.wicket.util.tester.WicketTester;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.annotation.PreDestroy;
+
/**
* @author jsarman
*/
@@ -43,16 +42,19 @@ public class CdiWicketTester extends WicketTester
private static final Pattern COUNT_PATTERN = Pattern.compile("COUNT=x([0-9]+)x");
private static final Logger logger = LoggerFactory.getLogger(CdiWicketTester.class);
- @Inject
ContextManager contextManager;
public CdiWicketTester(WebApplication app)
{
super(app);
- NonContextual.of(CdiWicketTester.class).inject(this);
getHttpSession().setTemporary(false);
}
+ public void setContextManager(ContextManager contextManager)
+ {
+ this.contextManager = contextManager;
+ }
+
/**
* Process the request by first activating the contexts on initial call. This call is called
* recursively in the super class so keep track of the topmost call and only activate and
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
index 7017c963eb..1a440498c2 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
@@ -16,6 +16,12 @@
*/
package org.apache.wicket.cdi;
+import org.jboss.weld.bean.builtin.BeanManagerProxy;
+import org.jboss.weld.module.web.servlet.HttpContextLifecycle;
+import org.jboss.weld.servlet.spi.helpers.AcceptingHttpContextActivationFilter;
+
+import io.github.cdiunit.internal.servlet.CdiUnitInitialListenerImpl;
+import io.github.cdiunit.internal.servlet.LifecycleAwareRequest;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.spi.BeanManager;
@@ -23,10 +29,6 @@ import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
-import org.jboss.weld.bean.builtin.BeanManagerProxy;
-import org.jboss.weld.module.web.servlet.HttpContextLifecycle;
-import org.jboss.weld.servlet.spi.helpers.AcceptingHttpContextActivationFilter;
-
/**
* @author jsarman
*/
@@ -72,8 +74,7 @@ public class ContextManager
if (currentRequest != null)
return;
- // FIXME Wicket 10
- currentRequest = null;// new LifecycleAwareRequest(new CdiUnitInitialListenerImpl(), new javax.servlet.http.HttpServletRequest(request));
+ currentRequest = new LifecycleAwareRequest(new CdiUnitInitialListenerImpl(), request);
lifecycle.requestInitialized(currentRequest, null);
}
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ConversationPropagatorTest.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ConversationPropagatorTest.java
index e18971cfd4..d61cf2d577 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ConversationPropagatorTest.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ConversationPropagatorTest.java
@@ -18,9 +18,6 @@ package org.apache.wicket.cdi;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import jakarta.enterprise.context.Conversation;
-import jakarta.inject.Inject;
-
import org.apache.wicket.cdi.testapp.TestConversationPage;
import org.apache.wicket.cdi.testapp.TestConversationalPage;
import org.apache.wicket.core.request.mapper.MountedMapper;
@@ -28,10 +25,13 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import jakarta.enterprise.context.Conversation;
+import jakarta.inject.Inject;
+
/**
* @author jsarman
*/
-// FIXME Wicket 10. Re-enable once cdi-unit is adapted to jakarta.**
+//FIXME Wicket 11. Re-enable once the tests are moved to its own module
@Disabled
class ConversationPropagatorTest extends WicketCdiTestCase
{
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/WicketCdiTestCase.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/WicketCdiTestCase.java
index b63b00c58b..a2d9c8df37 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/WicketCdiTestCase.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/WicketCdiTestCase.java
@@ -16,8 +16,6 @@
*/
package org.apache.wicket.cdi;
-import jakarta.inject.Inject;
-
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ThreadContext;
@@ -29,16 +27,18 @@ import org.apache.wicket.mock.MockApplication;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.tester.WicketTester;
-import org.jglue.cdiunit.AdditionalClasses;
-import org.jglue.cdiunit.CdiRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import io.github.cdiunit.AdditionalClasses;
+import io.github.cdiunit.junit5.CdiJUnit5Extension;
+import jakarta.inject.Inject;
/**
* @author jsarman
*/
-@RunWith(CdiRunner.class) // TODO upgrade to junit 5 ExtendWith when Cdi project has Junit 5 support
+@ExtendWith(CdiJUnit5Extension.class)
@AdditionalClasses({ CdiWicketTester.class, BehaviorInjector.class, CdiConfiguration.class,
CdiShutdownCleaner.class, ComponentInjector.class, ConversationExpiryChecker.class,
ConversationPropagator.class, DetachEventEmitter.class, SessionInjector.class,
@@ -53,7 +53,9 @@ public abstract class WicketCdiTestCase
protected CdiWicketTester newWicketTester(WebApplication app)
{
- return new CdiWicketTester(app);
+ CdiWicketTester cdiWicketTester = new CdiWicketTester(app);
+ cdiWicketTester.setContextManager(contextManager);
+ return cdiWicketTester;
}
public void configure(CdiConfiguration configuration)
@@ -61,7 +63,7 @@ public abstract class WicketCdiTestCase
configuration.configure(tester.getApplication());
}
- @After
+ @AfterEach
public void end()
{
if (contextManager.isRequestActive())
@@ -69,9 +71,13 @@ public abstract class WicketCdiTestCase
contextManager.deactivateContexts();
contextManager.destroy();
}
+ tester.destroy();
+
+ // make sure no leaked BeanManager are present
+ BeanManagerLookup.detach();
}
- @Before
+ @BeforeEach
public void commonBefore()
{
// make sure no leaked threadlocals are present
@@ -90,17 +96,8 @@ public abstract class WicketCdiTestCase
}
/**
- *
- */
- @After
- public void commonAfter()
- {
- tester.destroy();
- }
-
- /**
- * Use <code>-Dwicket.replace.expected.results=true</code> to automatically
- * replace the expected output file.
+ * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected
+ * output file.
*
* @param <T>
*
@@ -109,14 +106,14 @@ public abstract class WicketCdiTestCase
* @throws Exception
*/
protected <T extends Page> void executeTest(final Class<T> pageClass, final String filename)
- throws Exception
+ throws Exception
{
tester.executeTest(getClass(), pageClass, filename);
}
/**
- * Use <code>-Dwicket.replace.expected.results=true</code> to automatically
- * replace the expected output file.
+ * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected
+ * output file.
*
* @param page
* @param filename
@@ -128,8 +125,8 @@ public abstract class WicketCdiTestCase
}
/**
- * Use <code>-Dwicket.replace.expected.results=true</code> to automatically
- * replace the expected output file.
+ * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected
+ * output file.
*
* @param <T>
*
@@ -138,8 +135,8 @@ public abstract class WicketCdiTestCase
* @param filename
* @throws Exception
*/
- protected <T extends Page> void executeTest(final Class<T> pageClass,
- PageParameters parameters, final String filename) throws Exception
+ protected <T extends Page> void executeTest(final Class<T> pageClass, PageParameters parameters,
+ final String filename) throws Exception
{
tester.executeTest(getClass(), pageClass, parameters, filename);
}
@@ -151,7 +148,7 @@ public abstract class WicketCdiTestCase
* @throws Exception
*/
protected void executeListener(final Component component, final String filename)
- throws Exception
+ throws Exception
{
tester.executeListener(getClass(), component, filename);
}
@@ -163,14 +160,14 @@ public abstract class WicketCdiTestCase
* @throws Exception
*/
protected void executeBehavior(final AbstractAjaxBehavior behavior, final String filename)
- throws Exception
+ throws Exception
{
tester.executeBehavior(getClass(), behavior, filename);
}
/**
- * Returns the current Maven build directory taken from the <tt>basedir</tt>
- * system property, or null if not set
+ * Returns the current Maven build directory taken from the <tt>basedir</tt> system property, or
+ * null if not set
*
* @return path with a trailing slash
*/
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/AlternativeTestAppScope.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/AlternativeTestAppScope.java
new file mode 100644
index 0000000000..045b762cd0
--- /dev/null
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/AlternativeTestAppScope.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.cdi.testapp;
+
+import jakarta.enterprise.inject.Alternative;
+
+/**
+ * @author jsarman
+ */
+@Alternative
+public class AlternativeTestAppScope extends TestAppScope
+{
+
+ @Override
+ public String test()
+ {
+ return "Alternative ok";
+ }
+
+}
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/ModelWithInjectedDependency.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/ModelWithInjectedDependency.java
new file mode 100644
index 0000000000..fb443880bc
--- /dev/null
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/testapp/ModelWithInjectedDependency.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.cdi.testapp;
+
+import org.apache.wicket.cdi.NonContextual;
+import org.apache.wicket.model.IModel;
+
+import jakarta.inject.Inject;
+
+public class ModelWithInjectedDependency implements IModel<String>
+{
+ @Inject
+ TestAppScope appScope;
+
+ public ModelWithInjectedDependency()
+ {
+ NonContextual.of(ModelWithInjectedDependency.class).inject(this);
+ }
+
+ @Override
+ public String getObject()
+ {
+ return "not used";
+ }
+
+}