added setter injection to the class adapter.
[utils] / system / general / src / test / java / org / wamblee / system / adapters / ClassConfigurationTest.java
index 4b3d02ea0fc0d3e5bfc4ac4c4f8812358bee9ad8..411b86f8ac0e31f3a3895ff00e107f7e185b0b86 100644 (file)
  */
 package org.wamblee.system.adapters;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.wamblee.system.core.DefaultProvidedInterface;
 import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
+import org.wamblee.system.core.RequiredInterfaceComparator;
 import org.wamblee.test.AssertionUtils;
 
 public class ClassConfigurationTest extends AdapterTestCase {
 
+    public void testConstructorConfig() {
+        ClassConfiguration classConfig = new ClassConfiguration(X1.class);
 
-       public void testConstructorConfig() {
-               ClassConfiguration classConfig = new ClassConfiguration(X1.class);
-               
-               ConstructorConfiguration config = classConfig.getConstructorConfig()
-                               .greedy();
-               ProvidedInterface provided = new DefaultProvidedInterface("arg",
-                               String.class);
-               List<RequiredInterface> required = config.getRequiredInterfaces();
+        ConstructorConfiguration config = classConfig.getConstructorConfig()
+                .greedy();
+        ProvidedInterface provided = new DefaultProvidedInterface("arg",
+                String.class);
+        List<RequiredInterface> required = classConfig.getRequiredInterfaces();
 
-               assertEquals(1, required.size());
-               assertFalse(required.get(0).isOptional());
+        assertEquals(1, required.size());
+        assertFalse(required.get(0).isOptional());
 
-               required.get(0).setProvider(provided);
+        required.get(0).setProvider(provided);
 
-               provided.publish("hello", _scope);
-               config.create(_scope);
+        provided.publish("hello", _scope);
+        classConfig.create(_scope);
+
+        AssertionUtils.assertEquals(new String[] { "x1(hello)" },
+                AdapterTestCase.EVENT_TRACKER.getEvents(Thread.currentThread())
+                        .toArray());
+    }
+
+    public void testConstructorConfigWithSetters() {
+        ClassConfiguration classConfig = new ClassConfiguration(X7.class);
+
+        classConfig.getConstructorConfig().select(Boolean.class);
+        classConfig.getSetterConfiguration().values("port").setValue(0, 10);
+        
+        ProvidedInterface providedBoolean = new DefaultProvidedInterface("boolean",
+                Boolean.class);
+        ProvidedInterface providedHost = new DefaultProvidedInterface("host", String.class);
+        List<RequiredInterface> required = classConfig.getRequiredInterfaces();
+
+        Collections.sort(required, new RequiredInterfaceComparator());
+        assertEquals(2, required.size());
+        assertEquals("arg0", required.get(0).getName());
+
+        required.get(0).setProvider(providedBoolean);
+        required.get(1).setProvider(providedHost);
+
+        providedBoolean.publish(true, _scope);
+        providedHost.publish("host.name.org", _scope);
+        
+        Object obj = classConfig.create(_scope);
+        assertTrue(obj instanceof X7);
+        X7 x7 = (X7)obj;
+        assertNotNull(x7.getBoolean());
+        assertTrue(x7.getBoolean());
+        assertNull(x7.getHost());
+        assertNull(x7.getPort());
+
+        classConfig.inject(_scope, obj);
+        
+        assertEquals("host.name.org", x7.getHost());
+        assertEquals(10, x7.getPort().intValue());
+    }
 
-               AssertionUtils.assertEquals(new String[] { "x1(hello)" }, AdapterTestCase.EVENT_TRACKER
-                               .getEvents(Thread.currentThread()).toArray());
-       }
 }