package org.jglue.cdiunit; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import javax.enterprise.inject.Produces; import javax.inject.Inject; import javax.inject.Named; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.HashSet; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; @RunWith(CdiRunner.class) @AdditionalClasses(TestProducerConfig.Producers.class) @TestProducerConfig.ProducerConfigClass(Object.class) @TestProducerConfig.ProducerConfigNum(0) public class TestProducerConfig { @Inject @Named("a") private String valueNamedA; @Inject @Named("object") private Object object; // example ProducerConfig annotations @Retention(RUNTIME) @Target({METHOD, TYPE}) @ProducerConfig public @interface ProducerConfigNum { int value(); } @Retention(RUNTIME) @Target({METHOD, TYPE}) @ProducerConfig public @interface ProducerConfigClass { Class<?> value(); } // Producers kept out of the injected test class to avoid Weld circularity warnings: static class Producers { @Produces @Named("a") private String getValueA(ProducerConfigNum config) { return "A" + config.value(); } @Produces @Named("object") private Object getObject(ProducerConfigClass config) throws Exception { return config.value().newInstance(); } } @Test @ProducerConfigNum(1) public void testA1() { Assert.assertEquals("A1", valueNamedA); } @Test @ProducerConfigNum(2) public void testA2() { Assert.assertEquals("A2", valueNamedA); } @Test @ProducerConfigClass(ArrayList.class) public void testArrayList() { Assert.assertEquals(ArrayList.class, object.getClass()); } @Test @ProducerConfigClass(HashSet.class) public void testHashSet() { Assert.assertEquals(HashSet.class, object.getClass()); } }