Author: rmannibucau
Date: Tue Sep 4 18:06:17 2018
New Revision: 1840054
URL: http://svn.apache.org/viewvc?rev=1840054&view=rev
Log:
MEECROWAVE-140 ensure we work well with PER_CLASS lifecycle of junit 5
Added:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
- copied, changed from r1839223,
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/pom.xml
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
Modified: openwebbeans/meecrowave/trunk/meecrowave-junit/pom.xml
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/pom.xml?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-junit/pom.xml (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-junit/pom.xml Tue Sep 4 18:06:17
2018
@@ -63,7 +63,7 @@
</dependencies>
<properties>
- <junit5.version>5.3.0-M1</junit5.version>
+ <junit5.version>5.3.0</junit5.version>
<meecrowave.build.name>${project.groupId}.junit</meecrowave.build.name>
</properties>
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
Tue Sep 4 18:06:17 2018
@@ -84,6 +84,10 @@ public @interface MeecrowaveConfig {
boolean tomcatWrapLoader() default false;
String sharedLibraries() default "";
boolean useLog4j2JulLogManager() default false;
+ String scanningPackageIncludes() default "";
+ String scanningPackageExcludes() default "";
+ String scanningIncludes() default "";
+ String scanningExcludes() default "";
Class<? extends Annotation>[] scopes() default {};
}
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
Tue Sep 4 18:06:17 2018
@@ -36,6 +36,7 @@ import org.apache.meecrowave.Meecrowave;
import org.apache.meecrowave.testing.Injector;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.spi.ContextsService;
+import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
@@ -46,7 +47,7 @@ public class MeecrowaveExtension impleme
private static final ExtensionContext.Namespace NAMESPACE =
ExtensionContext.Namespace.create(MeecrowaveExtension.class.getName());
@Override
- public void beforeAll(final ExtensionContext context) throws Exception {
+ public void beforeAll(final ExtensionContext context) {
final Meecrowave.Builder builder = new Meecrowave.Builder();
final Optional<MeecrowaveConfig> meecrowaveConfig =
context.getElement().map(e -> e.getAnnotation(MeecrowaveConfig.class));
final String ctx;
@@ -90,25 +91,34 @@ public class MeecrowaveExtension impleme
context.getStore(NAMESPACE).put(Meecrowave.class.getName(),
meecrowave);
context.getStore(NAMESPACE).put(Meecrowave.Builder.class.getName(),
builder);
meecrowave.bake(ctx);
+
+ if (isPerClass(context)) {
+ doInject(context);
+ }
}
@Override
- public void afterAll(final ExtensionContext context) throws Exception {
-
Meecrowave.class.cast(context.getStore(NAMESPACE).get(Meecrowave.class.getName())).close();
+ public void afterAll(final ExtensionContext context) {
+ if (isPerClass(context)) {
+
Meecrowave.class.cast(context.getStore(NAMESPACE).get(Meecrowave.class.getName())).close();
+ }
}
@Override
- public void beforeEach(final ExtensionContext context) throws Exception {
- getScopes(context).ifPresent(scopes -> {
- final ContextsService contextsService =
WebBeansContext.currentInstance().getContextsService();
- Stream.of(scopes).forEach(s -> contextsService.startContext(s,
null));
- });
- context.getStore(NAMESPACE).put(CreationalContext.class.getName(),
Injector.inject(context.getTestInstance().orElse(null)));
-
Injector.injectConfig(Meecrowave.Builder.class.cast(context.getStore(NAMESPACE).get(Meecrowave.Builder.class.getName())),
context.getTestInstance().orElse(null));
+ public void beforeEach(final ExtensionContext context) {
+ if (!isPerClass(context)) {
+ doInject(context);
+ }
}
@Override
- public void afterEach(final ExtensionContext context) throws Exception {
+ public void afterEach(final ExtensionContext context) {
+ if (!isPerClass(context)) {
+ doRelease(context);
+ }
+ }
+
+ private void doRelease(final ExtensionContext context) {
CreationalContext.class.cast(context.getStore(NAMESPACE).get(CreationalContext.class.getName())).release();
getScopes(context).ifPresent(scopes -> {
final ContextsService contextsService =
WebBeansContext.currentInstance().getContextsService();
@@ -118,6 +128,21 @@ public class MeecrowaveExtension impleme
});
}
+ private Boolean isPerClass(final ExtensionContext context) {
+ return context.getTestInstanceLifecycle()
+ .map(it -> it.equals(TestInstance.Lifecycle.PER_CLASS))
+ .orElse(false);
+ }
+
+ private void doInject(final ExtensionContext context) {
+ getScopes(context).ifPresent(scopes -> {
+ final ContextsService contextsService =
WebBeansContext.currentInstance().getContextsService();
+ Stream.of(scopes).forEach(s -> contextsService.startContext(s,
null));
+ });
+ context.getStore(NAMESPACE).put(CreationalContext.class.getName(),
Injector.inject(context.getTestInstance().orElse(null)));
+
Injector.injectConfig(Meecrowave.Builder.class.cast(context.getStore(NAMESPACE).get(Meecrowave.Builder.class.getName())),
context.getTestInstance().orElse(null));
+ }
+
private Optional<Class<? extends Annotation>[]> getScopes(final
ExtensionContext context) {
return context.getElement()
.map(e -> e.getAnnotation(MeecrowaveConfig.class))
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
Tue Sep 4 18:06:17 2018
@@ -22,30 +22,60 @@ import javax.enterprise.context.spi.Crea
import org.apache.meecrowave.testing.Injector;
import org.apache.meecrowave.testing.MonoBase;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
-public class MonoMeecrowaveExtension implements BeforeAllCallback,
BeforeEachCallback, AfterEachCallback {
+public class MonoMeecrowaveExtension implements BeforeAllCallback,
BeforeEachCallback, AfterEachCallback, AfterAllCallback {
private static final MonoBase BASE = new MonoBase();
private static final ExtensionContext.Namespace NAMESPACE =
ExtensionContext.Namespace.create(MonoMeecrowaveExtension.class.getName());
@Override
public void beforeAll(final ExtensionContext context) {
context.getStore(NAMESPACE).put(MonoBase.Instance.class.getName(),
BASE.startIfNeeded());
+ if (isPerClass(context)) {
+ doInject(context);
+ }
}
@Override
public void beforeEach(final ExtensionContext context) {
+ if (!isPerClass(context)) {
+ doInject(context);
+ }
+ }
+
+ @Override
+ public void afterEach(final ExtensionContext context) {
+ if (!isPerClass(context)) {
+ doRelease(context);
+ }
+ }
+
+ @Override
+ public void afterAll(final ExtensionContext context) {
+ if (isPerClass(context)) {
+ doRelease(context);
+ }
+ }
+
+ private void doRelease(ExtensionContext context) {
+
CreationalContext.class.cast(context.getStore(NAMESPACE).get(CreationalContext.class.getName())).release();
+ }
+
+ private void doInject(final ExtensionContext context) {
context.getStore(NAMESPACE).put(CreationalContext.class.getName(),
Injector.inject(context.getTestInstance().orElse(null)));
Injector.injectConfig(
MonoBase.Instance.class.cast(context.getStore(NAMESPACE).get(MonoBase.Instance.class.getName())).getConfiguration(),
context.getTestInstance().orElse(null));
}
- @Override
- public void afterEach(final ExtensionContext context) {
-
CreationalContext.class.cast(context.getStore(NAMESPACE).get(CreationalContext.class.getName())).release();
+ private Boolean isPerClass(final ExtensionContext context) {
+ return context.getTestInstanceLifecycle()
+ .map(it -> it.equals(TestInstance.Lifecycle.PER_CLASS))
+ .orElse(false);
}
}
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
Tue Sep 4 18:06:17 2018
@@ -42,10 +42,9 @@ public class MonoBase {
final Meecrowave meecrowave = new Meecrowave(configuration);
if (CONTAINER.compareAndSet(null, new Instance(meecrowave,
configuration, containerLoader))) {
final Configuration runnerConfig =
StreamSupport.stream(ServiceLoader.load(Configuration.class)
-
.spliterator(), false)
-
.sorted(Comparator.comparingInt(Configuration::order))
- .findFirst()
- .orElseGet(()
-> new Configuration() {});
+ .spliterator(), false)
+ .min(Comparator.comparingInt(Configuration::order))
+ .orElseGet(() -> new Configuration() {});
runnerConfig.beforeStarts();
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java?rev=1840054&r1=1840053&r2=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
Tue Sep 4 18:06:17 2018
@@ -32,12 +32,12 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.fail;
@MeecrowaveConfig
-public class MeecrowaveConfigTest {
+class MeecrowaveConfigTest {
@ConfigurationInject
private Meecrowave.Builder config;
@Test
- public void run() throws MalformedURLException {
+ void run() throws MalformedURLException {
assertEquals("simple", slurp(new URL("http://localhost:" +
config.getHttpPort() + "/api/test")));
}
Copied:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
(from r1839223,
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java)
URL:
http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java?p2=openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java&p1=openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java&r1=1839223&r2=1840054&rev=1840054&view=diff
==============================================================================
---
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
(original)
+++
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
Tue Sep 4 18:06:17 2018
@@ -18,27 +18,60 @@
*/
package org.apache.meecrowave.junit5;
-import org.apache.meecrowave.Meecrowave;
-import org.apache.meecrowave.io.IO;
-import org.apache.meecrowave.testing.ConfigurationInject;
-import org.junit.jupiter.api.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
import java.io.IOException;
import java.io.InputStream;
-import java.net.MalformedURLException;
import java.net.URL;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
-@MeecrowaveConfig
-public class MeecrowaveConfigTest {
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.testing.ConfigurationInject;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+
+@TestInstance(PER_CLASS)
+@MeecrowaveConfig(scanningPackageIncludes =
"org.apache.meecrowave.junit5.PerClassMeecrowaveConfigTest")
+class PerClassMeecrowaveConfigTest {
@ConfigurationInject
private Meecrowave.Builder config;
+ @Inject
+ private Bean bean;
+
+ private static Bean instance;
+
+ @Test
+ void m1() {
+ doTest();
+ }
+
@Test
- public void run() throws MalformedURLException {
- assertEquals("simple", slurp(new URL("http://localhost:" +
config.getHttpPort() + "/api/test")));
+ void m2() {
+ doTest();
+ }
+
+ private void doTest() {
+ if (instance == null) {
+ first();
+ } else {
+ second();
+ }
+ }
+
+ private void first() {
+ assertEquals("ok", bean.get());
+ instance = bean;
+ }
+
+ private void second() {
+ assertSame(instance, bean);
}
private String slurp(final URL url) {
@@ -49,4 +82,11 @@ public class MeecrowaveConfigTest {
}
return null;
}
+
+ @ApplicationScoped
+ public static class Bean {
+ String get() {
+ return "ok";
+ }
+ }
}