in webbeans-junit5/src/main/java/org/apache/openwebbeans/junit5/internal/CdiExtension.java [51:115]
public void beforeAll(final ExtensionContext extensionContext)
{
final Cdi config = AnnotationUtils.findAnnotation(extensionContext.getElement(), Cdi.class).orElse(null);
if (config == null)
{
return;
}
final boolean reusable = config.reusable();
if (reusable && reusableContainer != null)
{
return;
}
if (!reusable && reusableContainer != null)
{
throw new IllegalStateException(
"You can't mix @Cdi(reusable=true) and @Cdi(reusable=false) in the same suite");
}
final SeContainerInitializer initializer = SeContainerInitializer.newInstance();
if (config.disableDiscovery())
{
initializer.disableDiscovery();
}
initializer.setClassLoader(Thread.currentThread().getContextClassLoader());
initializer.addBeanClasses(config.classes());
initializer.enableDecorators(config.decorators());
initializer.enableInterceptors(config.interceptors());
initializer.selectAlternatives(config.alternatives());
initializer.selectAlternativeStereotypes(config.alternativeStereotypes());
initializer.addPackages(
Stream.of(config.packages()).map(Class::getPackage).toArray(Package[]::new));
initializer.addPackages(true,
Stream.of(config.recursivePackages()).map(Class::getPackage).toArray(Package[]::new));
Stream.of(config.properties()).forEach(property -> initializer.addProperty(property.name(), property.value()));
onStop = Stream.of(config.onStarts())
.map(it ->
{
try
{
return it.getConstructor().newInstance();
}
catch (final InstantiationException | IllegalAccessException | NoSuchMethodException e)
{
throw new IllegalStateException(e);
}
catch (final InvocationTargetException e)
{
throw new IllegalStateException(e.getTargetException());
}
})
.map(Supplier::get)
.toArray(AutoCloseable[]::new);
SeContainer container = initializer.initialize();
if (reusable)
{
reusableContainer = container;
Runtime.getRuntime().addShutdownHook(new Thread(
() -> doClose(reusableContainer), getClass().getName() + "-shutdown"));
}
else
{
testInstanceContainer = container;
}
}