Skip to content

Commit

Permalink
WELD-2757 Support inspectable CC and Contextual in CDI TCK SPI
Browse files Browse the repository at this point in the history
  • Loading branch information
manovotn committed Sep 21, 2023
1 parent 6b129ea commit da46b51
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 3 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
<arquillian.jetty.version>1.0.0.Final</arquillian.jetty.version>
<atinject.tck.version>2.0.1</atinject.tck.version>
<!-- Version of the CDI 4.x release TCK -->
<cdi.tck-4-0.version>4.0.10</cdi.tck-4-0.version>
<cdi.tck-4-0.version>4.1.0-SNAPSHOT</cdi.tck-4-0.version>
<!-- By default, each mvn profile uses corresponding file from TCK repo, see jboss-tck-runner/pom.xml -->
<!-- We can also use our own file, needed for relaxed mode testing (see WeldMethodInterceptor) -->
<!-- Our variant is under src/test/tck/tck-tests.xml -->
Expand Down Expand Up @@ -90,7 +90,7 @@
<shrinkwrap.descriptors.version>2.0.0</shrinkwrap.descriptors.version>
<shrinkwrap.resolver.version>3.1.4</shrinkwrap.resolver.version>
<testng.version>7.4.0</testng.version>
<weld.api.version>5.0.SP3</weld.api.version>
<weld.api.version>6.0-SNAPSHOT</weld.api.version>
<weld.logging.tools.version>1.0.3.Final</weld.logging.tools.version>
<wildfly.arquillian.version>5.0.0.Alpha5</wildfly.arquillian.version>
</properties>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.jboss.weld.tck;

import jakarta.enterprise.context.spi.Context;
import jakarta.enterprise.context.spi.CreationalContext;

import org.jboss.cdi.tck.spi.Contextuals;

public class ContextualsImpl implements Contextuals {
@Override
public <T> Inspectable<T> create(T instance, Context context) {
return new InspectableContextual<>(instance);
}

static class InspectableContextual<T> implements Inspectable<T> {
private final T instanceToReturn;

private CreationalContext<T> createCC;
private T destroyInstance;
private CreationalContext<T> destroyCC;

InspectableContextual(T instanceToReturn) {
this.instanceToReturn = instanceToReturn;
}

@Override
public T create(CreationalContext<T> creationalContext) {
createCC = creationalContext;
return instanceToReturn;
}

@Override
public void destroy(T instance, CreationalContext<T> creationalContext) {
destroyInstance = instance;
destroyCC = creationalContext;
}

@Override
public CreationalContext<T> getCreationalContextPassedToCreate() {
return createCC;
}

@Override
public T getInstancePassedToDestroy() {
return destroyInstance;
}

@Override
public CreationalContext<T> getCreationalContextPassedToDestroy() {
return destroyCC;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.jboss.weld.tck;

import jakarta.enterprise.context.spi.Contextual;

import org.jboss.cdi.tck.spi.CreationalContexts;
import org.jboss.weld.contexts.CreationalContextImpl;

public class CreationalContextsImpl implements CreationalContexts {
@Override
public <T> Inspectable<T> create(Contextual<T> contextual) {
return new InspectableCreationalContext<>(contextual);
}

static class InspectableCreationalContext<T> extends CreationalContextImpl<T> implements Inspectable<T> {
private Object lastBeanPushed = null;
private boolean pushCalled = false;
private boolean releaseCalled = false;

public InspectableCreationalContext(Contextual<T> contextual) {
super(contextual);
}

public void push(T incompleteInstance) {
pushCalled = true;
lastBeanPushed = incompleteInstance;
super.push(incompleteInstance);
}

public Object getLastBeanPushed() {
return lastBeanPushed;
}

public boolean isPushCalled() {
return pushCalled;
}

public boolean isReleaseCalled() {
return releaseCalled;
}

/**
* We need to override this method because internally, Weld uses this enhanced method to release CCs so long
* as the CC is instance of {@link org.jboss.weld.contexts.WeldCreationalContext} which will hold true for
* this impl as well.
*/
public void release(Contextual<T> contextual, T instance) {
releaseCalled = true;
super.release(contextual, instance);
}

public void release() {
releaseCalled = true;
super.release();
}

}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# CDI TCK configuration - porting package
org.jboss.cdi.tck.spi.Beans=org.jboss.weld.tck.BeansImpl
org.jboss.cdi.tck.spi.Contexts=org.jboss.weld.tck.ContextsImpl
org.jboss.cdi.tck.spi.EL=org.jboss.weld.tck.ELImpl
org.jboss.cdi.tck.spi.EL=org.jboss.weld.tck.ELImpl
org.jboss.cdi.tck.spi.CreationalContexts=org.jboss.weld.tck.CreationalContextsImpl
org.jboss.cdi.tck.spi.Contextuals=org.jboss.weld.tck.ContextualsImpl

0 comments on commit da46b51

Please sign in to comment.