001 package org.nanocontainer.script.xml.issues;
002
003 import java.io.Reader;
004 import java.io.StringReader;
005
006 import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase;
007 import org.nanocontainer.script.xml.XMLContainerBuilder;
008 import org.picocontainer.PicoContainer;
009 import org.picocontainer.defaults.SetterInjectionComponentAdapterFactory;
010
011 public class ServiceDependencyTestCase extends AbstractScriptedContainerBuilderTestCase {
012
013 public void testCanInstantiateProcessWithSDIDependencies() {
014 Reader script = new StringReader("" +
015 "<container component-adapter-factory='"+SetterInjectionComponentAdapterFactory.class.getName()+"'>"+
016 " <component-implementation class='"+Service1Impl.class.getName()+"'/>"+
017 " <component-implementation class='"+ServiceAImpl.class.getName()+"'/>"+
018 " <component-implementation class='"+Service2Impl.class.getName()+"'/>"+
019 " <component-implementation class='"+ServiceBImpl.class.getName()+"'/>"+
020 " <component-implementation class='"+Process.class.getName()+"'/>"+
021 "</container>");
022 assertProcessWithDependencies(script);
023 }
024
025 private void assertProcessWithDependencies(Reader script) {
026 PicoContainer pico = buildContainer(script);
027 assertNotNull(pico);
028 Process process = (Process)pico.getComponentInstanceOfType(Process.class);
029 assertNotNull(process);
030 assertNotNull(process.getServiceA());
031 assertNotNull(process.getServiceA().getService1());
032 assertNotNull(process.getServiceB());
033 assertNotNull(process.getServiceB().getService2());
034 }
035
036 private PicoContainer buildContainer(Reader script) {
037 return buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()), null, "SOME_SCOPE");
038 }
039
040 public static class Process {
041 private ServiceA serviceA;
042
043 private ServiceB serviceB;
044
045 // use with SDI
046 public Process() {
047 }
048
049 public ServiceA getServiceA() {
050 return serviceA;
051 }
052
053 public void setServiceA(ServiceA serviceA) {
054 this.serviceA = serviceA;
055 }
056
057 public ServiceB getServiceB() {
058 return serviceB;
059 }
060
061 public void setServiceB(ServiceB serviceB) {
062 this.serviceB = serviceB;
063 }
064 }
065
066 public static interface Service1 {
067 }
068
069 public static interface Service2 {
070 }
071
072 public static class Service1Impl implements Service1 {
073 public Service1Impl() {
074 }
075 }
076
077 public static class Service2Impl implements Service2 {
078 public Service2Impl() {
079 }
080 }
081
082 public static interface ServiceA {
083 public Service1 getService1();
084 }
085
086 public static interface ServiceB {
087 public Service2 getService2();
088 }
089
090 public static class ServiceAImpl implements ServiceA {
091 private Service1 service1;
092 public ServiceAImpl() {
093 }
094 public Service1 getService1() {
095 return service1;
096 }
097 public void setService1(Service1 service1) {
098 this.service1 = service1;
099 }
100 }
101
102 public static class ServiceBImpl implements ServiceB {
103 private Service2 service2;
104 public ServiceBImpl() {
105 }
106 public Service2 getService2() {
107 return service2;
108 }
109 public void setService2(Service2 service2) {
110 this.service2 = service2;
111 }
112 }
113 }
114
115