Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add test coverage for declaring @Priority on producers #499

Merged
merged 1 commit into from
Dec 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

public class Alpha {

private String s;

public Alpha(String s) {
this.s = s;
}

public String ping() {
return s;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.annotation.Priority;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
import jakarta.enterprise.inject.Produces;

@Alternative
@Priority(1)
@ApplicationScoped
public class AltBeanProducingAlternative {
manovotn marked this conversation as resolved.
Show resolved Hide resolved

@Alternative
@Priority(20) // should override class-level priority value and hence end up having the highest priority
@Produces
@ProducedByMethod
Beta producer1() {
return new Beta(ProducerExplicitPriorityTest.ALT2);
}

@Alternative
@Priority(20) // should override class-level priority value and hence end up having the highest priority
@Produces
@ProducedByField
Beta producer2 = new Beta(ProducerExplicitPriorityTest.ALT2);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.annotation.Priority;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
import jakarta.enterprise.inject.Produces;

@ApplicationScoped
@Alternative
@Priority(1)
public class AltBeanProducingPrioritizedNonAlternative {

@Priority(20) // should override class-level priority value and hence end up having the highest priority
@Produces
@ProducedByMethod
Delta producer1() {
return new Delta(ProducerExplicitPriorityTest.ALT2);
}

@Priority(20) // should override class-level priority value and hence end up having the highest priority
@Produces
@ProducedByField
Delta producer2 = new Delta(ProducerExplicitPriorityTest.ALT2);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

public class Beta {

private String s;

public Beta(String s) {
this.s = s;
}

public String ping() {
return s;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

public class Delta {

private String s;

public Delta(String s) {
this.s = s;
}

public String ping() {
return s;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

public class Gamma {

private String s;

public Gamma(String s) {
this.s = s;
}

public String ping() {
return s;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.annotation.Priority;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
import jakarta.enterprise.inject.Produces;

@ApplicationScoped
public class NonAltBeanProducingAlternative {

@Alternative
@Priority(10)
@Produces
@ProducedByMethod
Alpha producer1() {
return new Alpha(ProducerExplicitPriorityTest.ALT);
}

@Alternative
@Priority(10)
@Produces
@ProducedByMethod
Beta producer2() {
return new Beta(ProducerExplicitPriorityTest.ALT);
}

@Alternative
@Priority(10)
@Produces
@ProducedByField
Alpha producer3 = new Alpha(ProducerExplicitPriorityTest.ALT);

@Alternative
@Priority(10)
@Produces
@ProducedByField
Beta producer4 = new Beta(ProducerExplicitPriorityTest.ALT);

@Produces
@ProducedByMethod
@Alternative
@Priority(10)
Gamma producer5() {
return new Gamma(ProducerExplicitPriorityTest.ALT);
}

@Produces
@ProducedByField
@Alternative
@Priority(10)
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.ALT);

@Produces
@ProducedByMethod
@Alternative
@Priority(10)
Delta producer7() {
return new Delta(ProducerExplicitPriorityTest.ALT);
}

@Produces
@ProducedByField
@Alternative
@Priority(10)
Delta producer8 = new Delta(ProducerExplicitPriorityTest.ALT);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.annotation.Priority;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
import jakarta.enterprise.inject.Produces;

@ApplicationScoped
@Priority(500)
public class NonAltBeanWithPrioProducingAlternative {

@Produces
@ProducedByMethod
@Alternative
Gamma producer5() {
return new Gamma(ProducerExplicitPriorityTest.ALT2);
}

@Produces
@ProducedByField
@Alternative
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.ALT2);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.inject.Qualifier;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ProducedByField {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.inject.Qualifier;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ProducedByMethod {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import static org.jboss.cdi.tck.cdi.Sections.DECLARING_SELECTED_ALTERNATIVES_APPLICATION;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;

import jakarta.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.cdi.tck.AbstractTest;
import org.jboss.cdi.tck.shrinkwrap.WebArchiveBuilder;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.test.audit.annotations.SpecAssertion;
import org.jboss.test.audit.annotations.SpecAssertions;
import org.jboss.test.audit.annotations.SpecVersion;
import org.testng.annotations.Test;

@SpecVersion(spec = "cdi", version = "4.1")
public class ProducerExplicitPriorityTest extends AbstractTest {

public static final String DEFAULT = "default";
public static final String ALT = "alternative";
public static final String ALT2 = "alternative2";

@Deployment
public static WebArchive createTestArchive() {
return new WebArchiveBuilder().withTestClassPackage(ProducerExplicitPriorityTest.class).build();
}

@Inject
@ProducedByMethod
Alpha alphaMethodProducer;

@Inject
@ProducedByField
Alpha alphaFieldProducer;

@Inject
@ProducedByMethod
Beta betaMethodProducer;

@Inject
@ProducedByField
Beta betaFieldProducer;

@Inject
@ProducedByMethod
Gamma gammaMethodProducer;

@Inject
@ProducedByField
Gamma gammaFieldProducer;

@Inject
@ProducedByMethod
Delta deltaMethodProducer;

@Inject
@ProducedByField
Delta deltaFieldProducer;


@Test
@SpecAssertions({@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "ca"),
@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "cb")})
public void testAlternativeProducerWithPriority() {
assertNotNull(alphaMethodProducer);
assertNotNull(alphaFieldProducer);

assertEquals(alphaMethodProducer.ping(), ALT);
assertEquals(alphaFieldProducer.ping(), ALT);
}

@Test
@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "dd")
public void testPriorityOnProducerOverPriorityOnClass() {
assertNotNull(betaMethodProducer);
assertNotNull(betaFieldProducer);
assertNotNull(gammaFieldProducer);
assertNotNull(gammaMethodProducer);
assertNotNull(deltaFieldProducer);
assertNotNull(deltaMethodProducer);

assertEquals(betaMethodProducer.ping(), ALT2);
assertEquals(betaFieldProducer.ping(), ALT2);
assertEquals(gammaFieldProducer.ping(), ALT2);
assertEquals(gammaMethodProducer.ping(), ALT2);
assertEquals(deltaFieldProducer.ping(), ALT2);
assertEquals(deltaMethodProducer.ping(), ALT2);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.jboss.cdi.tck.tests.alternative.selection.priority;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

// produces standard (non-alternative) beans that should be replaced by alternatives
@ApplicationScoped
public class RegularBeanProducer {

@Produces
@ProducedByMethod
Alpha producer1() {
return new Alpha(ProducerExplicitPriorityTest.DEFAULT);
}

@Produces
@ProducedByMethod
Beta producer2() {
return new Beta(ProducerExplicitPriorityTest.DEFAULT);
}

@Produces
@ProducedByField
Alpha producer3 = new Alpha(ProducerExplicitPriorityTest.DEFAULT);

@Produces
@ProducedByField
Beta producer4 = new Beta(ProducerExplicitPriorityTest.DEFAULT);

@Produces
@ProducedByMethod
Gamma producer5() {
return new Gamma(ProducerExplicitPriorityTest.DEFAULT);
}

@Produces
@ProducedByField
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.DEFAULT);

@Produces
@ProducedByMethod
Delta producer7() {
return new Delta(ProducerExplicitPriorityTest.DEFAULT);
}

@Produces
@ProducedByField
Delta producer8 = new Delta(ProducerExplicitPriorityTest.DEFAULT);
}
22 changes: 22 additions & 0 deletions impl/src/main/resources/tck-audit-cdi.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2227,6 +2227,28 @@
</assertion>
</group>

<group>
<text>An alternative may be given a priority for the application by placing the |@Priority| annotation on the producer field, method or resource.
</text>
<assertion id="ca">
<text>Test |@Priority| on a producer method.</text>
</assertion>
<assertion id="cb">
<text>Test |@Priority| on a producer field.</text>
</assertion>
<assertion id="cc">
<text>Test |@Priority| on a resource.</text>
</assertion>
</group>

<group>
<text>For the purpose of determining the priority of any producer method or field during ambiguity resolution, the priority of the producer method or field is considered first.
If the producer method or field does not have a priority, the priority of the managed bean that declares the producer method or field is used.</text>
<assertion id="dd">
<text>Test |@Priority| declared directly on producer is considered first.</text>
</assertion>
</group>

</section>

<section id="declaring_selected_alternatives_bean_archive" title="Declaring selected alternatives for a bean archive" level="4">
Expand Down
Loading
Loading