Skip to content

Commit 16b7faa

Browse files
manovotnLadicek
authored andcommitted
Add test coverage for declaring @priority on producers
1 parent 8b77fb2 commit 16b7faa

16 files changed

+475
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
public class Alpha {
4+
5+
private String s;
6+
7+
public Alpha(String s) {
8+
this.s = s;
9+
}
10+
11+
public String ping() {
12+
return s;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.annotation.Priority;
4+
import jakarta.enterprise.context.ApplicationScoped;
5+
import jakarta.enterprise.inject.Alternative;
6+
import jakarta.enterprise.inject.Produces;
7+
8+
@Alternative
9+
@Priority(1)
10+
@ApplicationScoped
11+
public class AltBeanProducingAlternative {
12+
13+
@Alternative
14+
@Priority(20) // should override class-level priority value and hence end up having the highest priority
15+
@Produces
16+
@ProducedByMethod
17+
Beta producer1() {
18+
return new Beta(ProducerExplicitPriorityTest.ALT2);
19+
}
20+
21+
@Alternative
22+
@Priority(20) // should override class-level priority value and hence end up having the highest priority
23+
@Produces
24+
@ProducedByField
25+
Beta producer2 = new Beta(ProducerExplicitPriorityTest.ALT2);
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.annotation.Priority;
4+
import jakarta.enterprise.context.ApplicationScoped;
5+
import jakarta.enterprise.inject.Alternative;
6+
import jakarta.enterprise.inject.Produces;
7+
8+
@ApplicationScoped
9+
@Alternative
10+
@Priority(1)
11+
public class AltBeanProducingPrioritizedNonAlternative {
12+
13+
@Priority(20) // should override class-level priority value and hence end up having the highest priority
14+
@Produces
15+
@ProducedByMethod
16+
Delta producer1() {
17+
return new Delta(ProducerExplicitPriorityTest.ALT2);
18+
}
19+
20+
@Priority(20) // should override class-level priority value and hence end up having the highest priority
21+
@Produces
22+
@ProducedByField
23+
Delta producer2 = new Delta(ProducerExplicitPriorityTest.ALT2);
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
public class Beta {
4+
5+
private String s;
6+
7+
public Beta(String s) {
8+
this.s = s;
9+
}
10+
11+
public String ping() {
12+
return s;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
public class Delta {
4+
5+
private String s;
6+
7+
public Delta(String s) {
8+
this.s = s;
9+
}
10+
11+
public String ping() {
12+
return s;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
public class Gamma {
4+
5+
private String s;
6+
7+
public Gamma(String s) {
8+
this.s = s;
9+
}
10+
11+
public String ping() {
12+
return s;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.annotation.Priority;
4+
import jakarta.enterprise.context.ApplicationScoped;
5+
import jakarta.enterprise.inject.Alternative;
6+
import jakarta.enterprise.inject.Produces;
7+
8+
@ApplicationScoped
9+
public class NonAltBeanProducingAlternative {
10+
11+
@Alternative
12+
@Priority(10)
13+
@Produces
14+
@ProducedByMethod
15+
Alpha producer1() {
16+
return new Alpha(ProducerExplicitPriorityTest.ALT);
17+
}
18+
19+
@Alternative
20+
@Priority(10)
21+
@Produces
22+
@ProducedByMethod
23+
Beta producer2() {
24+
return new Beta(ProducerExplicitPriorityTest.ALT);
25+
}
26+
27+
@Alternative
28+
@Priority(10)
29+
@Produces
30+
@ProducedByField
31+
Alpha producer3 = new Alpha(ProducerExplicitPriorityTest.ALT);
32+
33+
@Alternative
34+
@Priority(10)
35+
@Produces
36+
@ProducedByField
37+
Beta producer4 = new Beta(ProducerExplicitPriorityTest.ALT);
38+
39+
@Produces
40+
@ProducedByMethod
41+
@Alternative
42+
@Priority(10)
43+
Gamma producer5() {
44+
return new Gamma(ProducerExplicitPriorityTest.ALT);
45+
}
46+
47+
@Produces
48+
@ProducedByField
49+
@Alternative
50+
@Priority(10)
51+
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.ALT);
52+
53+
@Produces
54+
@ProducedByMethod
55+
@Alternative
56+
@Priority(10)
57+
Delta producer7() {
58+
return new Delta(ProducerExplicitPriorityTest.ALT);
59+
}
60+
61+
@Produces
62+
@ProducedByField
63+
@Alternative
64+
@Priority(10)
65+
Delta producer8 = new Delta(ProducerExplicitPriorityTest.ALT);
66+
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.annotation.Priority;
4+
import jakarta.enterprise.context.ApplicationScoped;
5+
import jakarta.enterprise.inject.Alternative;
6+
import jakarta.enterprise.inject.Produces;
7+
8+
@ApplicationScoped
9+
@Priority(500)
10+
public class NonAltBeanWithPrioProducingAlternative {
11+
12+
@Produces
13+
@ProducedByMethod
14+
@Alternative
15+
Gamma producer5() {
16+
return new Gamma(ProducerExplicitPriorityTest.ALT2);
17+
}
18+
19+
@Produces
20+
@ProducedByField
21+
@Alternative
22+
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.ALT2);
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.inject.Qualifier;
4+
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
8+
@Qualifier
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface ProducedByField {
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.inject.Qualifier;
4+
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
8+
@Qualifier
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface ProducedByMethod {
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import static org.jboss.cdi.tck.cdi.Sections.DECLARING_SELECTED_ALTERNATIVES_APPLICATION;
4+
import static org.testng.Assert.assertEquals;
5+
import static org.testng.Assert.assertNotNull;
6+
7+
import jakarta.inject.Inject;
8+
import org.jboss.arquillian.container.test.api.Deployment;
9+
import org.jboss.cdi.tck.AbstractTest;
10+
import org.jboss.cdi.tck.shrinkwrap.WebArchiveBuilder;
11+
import org.jboss.shrinkwrap.api.spec.WebArchive;
12+
import org.jboss.test.audit.annotations.SpecAssertion;
13+
import org.jboss.test.audit.annotations.SpecAssertions;
14+
import org.jboss.test.audit.annotations.SpecVersion;
15+
import org.testng.annotations.Test;
16+
17+
@SpecVersion(spec = "cdi", version = "4.1")
18+
public class ProducerExplicitPriorityTest extends AbstractTest {
19+
20+
public static final String DEFAULT = "default";
21+
public static final String ALT = "alternative";
22+
public static final String ALT2 = "alternative2";
23+
24+
@Deployment
25+
public static WebArchive createTestArchive() {
26+
return new WebArchiveBuilder().withTestClassPackage(ProducerExplicitPriorityTest.class).build();
27+
}
28+
29+
@Inject
30+
@ProducedByMethod
31+
Alpha alphaMethodProducer;
32+
33+
@Inject
34+
@ProducedByField
35+
Alpha alphaFieldProducer;
36+
37+
@Inject
38+
@ProducedByMethod
39+
Beta betaMethodProducer;
40+
41+
@Inject
42+
@ProducedByField
43+
Beta betaFieldProducer;
44+
45+
@Inject
46+
@ProducedByMethod
47+
Gamma gammaMethodProducer;
48+
49+
@Inject
50+
@ProducedByField
51+
Gamma gammaFieldProducer;
52+
53+
@Inject
54+
@ProducedByMethod
55+
Delta deltaMethodProducer;
56+
57+
@Inject
58+
@ProducedByField
59+
Delta deltaFieldProducer;
60+
61+
62+
@Test
63+
@SpecAssertions({@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "ca"),
64+
@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "cb")})
65+
public void testAlternativeProducerWithPriority() {
66+
assertNotNull(alphaMethodProducer);
67+
assertNotNull(alphaFieldProducer);
68+
69+
assertEquals(alphaMethodProducer.ping(), ALT);
70+
assertEquals(alphaFieldProducer.ping(), ALT);
71+
}
72+
73+
@Test
74+
@SpecAssertion(section = DECLARING_SELECTED_ALTERNATIVES_APPLICATION, id = "dd")
75+
public void testPriorityOnProducerOverPriorityOnClass() {
76+
assertNotNull(betaMethodProducer);
77+
assertNotNull(betaFieldProducer);
78+
assertNotNull(gammaFieldProducer);
79+
assertNotNull(gammaMethodProducer);
80+
assertNotNull(deltaFieldProducer);
81+
assertNotNull(deltaMethodProducer);
82+
83+
assertEquals(betaMethodProducer.ping(), ALT2);
84+
assertEquals(betaFieldProducer.ping(), ALT2);
85+
assertEquals(gammaFieldProducer.ping(), ALT2);
86+
assertEquals(gammaMethodProducer.ping(), ALT2);
87+
assertEquals(deltaFieldProducer.ping(), ALT2);
88+
assertEquals(deltaMethodProducer.ping(), ALT2);
89+
}
90+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.jboss.cdi.tck.tests.alternative.selection.priority;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.enterprise.inject.Produces;
5+
6+
// produces standard (non-alternative) beans that should be replaced by alternatives
7+
@ApplicationScoped
8+
public class RegularBeanProducer {
9+
10+
@Produces
11+
@ProducedByMethod
12+
Alpha producer1() {
13+
return new Alpha(ProducerExplicitPriorityTest.DEFAULT);
14+
}
15+
16+
@Produces
17+
@ProducedByMethod
18+
Beta producer2() {
19+
return new Beta(ProducerExplicitPriorityTest.DEFAULT);
20+
}
21+
22+
@Produces
23+
@ProducedByField
24+
Alpha producer3 = new Alpha(ProducerExplicitPriorityTest.DEFAULT);
25+
26+
@Produces
27+
@ProducedByField
28+
Beta producer4 = new Beta(ProducerExplicitPriorityTest.DEFAULT);
29+
30+
@Produces
31+
@ProducedByMethod
32+
Gamma producer5() {
33+
return new Gamma(ProducerExplicitPriorityTest.DEFAULT);
34+
}
35+
36+
@Produces
37+
@ProducedByField
38+
Gamma producer6 = new Gamma(ProducerExplicitPriorityTest.DEFAULT);
39+
40+
@Produces
41+
@ProducedByMethod
42+
Delta producer7() {
43+
return new Delta(ProducerExplicitPriorityTest.DEFAULT);
44+
}
45+
46+
@Produces
47+
@ProducedByField
48+
Delta producer8 = new Delta(ProducerExplicitPriorityTest.DEFAULT);
49+
}

impl/src/main/resources/tck-audit-cdi.xml

+22
Original file line numberDiff line numberDiff line change
@@ -2227,6 +2227,28 @@
22272227
</assertion>
22282228
</group>
22292229

2230+
<group>
2231+
<text>An alternative may be given a priority for the application by placing the |@Priority| annotation on the producer field, method or resource.
2232+
</text>
2233+
<assertion id="ca">
2234+
<text>Test |@Priority| on a producer method.</text>
2235+
</assertion>
2236+
<assertion id="cb">
2237+
<text>Test |@Priority| on a producer field.</text>
2238+
</assertion>
2239+
<assertion id="cc">
2240+
<text>Test |@Priority| on a resource.</text>
2241+
</assertion>
2242+
</group>
2243+
2244+
<group>
2245+
<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.
2246+
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>
2247+
<assertion id="dd">
2248+
<text>Test |@Priority| declared directly on producer is considered first.</text>
2249+
</assertion>
2250+
</group>
2251+
22302252
</section>
22312253

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

0 commit comments

Comments
 (0)