X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fspring%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fspring%2FSpringComponentTest.java;h=3e63c7eaba4ee1b18b5399d9c3a7dca40bda7df4;hb=d67dfdb9198fbe3bb9034cd1d9f4a9870618d2b6;hp=c63916f5d68946a6c3d0baa5a004d11b8d3322b8;hpb=7273d083a2f03cd3d2061d3c6628a46b679e718b;p=utils diff --git a/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java b/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java index c63916f5..3e63c7ea 100644 --- a/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java +++ b/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java @@ -30,17 +30,26 @@ import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; import org.wamblee.system.core.Scope; import org.wamblee.system.core.SystemAssemblyException; +import org.wamblee.test.EventTracker; public class SpringComponentTest extends TestCase { private static final String HELLO_SERVICE_SPRING_XML = "test.org.wamblee.system.spring.xml"; private static final String HELLO_SERVICE_SPRING_WITH_REQS_XML = "test.org.wamblee.system.springWithRequirements.xml"; private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML = "test.org.wamblee.system.springWithProperties.xml"; + private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML2 = "test.org.wamblee.system.springWithProperties2.xml"; + private static final String PROPERTY_FILE = "test.org.wamblee.system.spring.properties"; + + public static EventTracker EVENT_TRACKER; + + private Scope _externalScope; @Override protected void setUp() throws Exception { super.setUp(); + EVENT_TRACKER = new EventTracker(); + _externalScope = new DefaultScope(new ProvidedInterface[0]); } public void testBlackboxSystem() { @@ -48,8 +57,9 @@ public class SpringComponentTest extends TestCase { new String[] { HELLO_SERVICE_SPRING_XML }, new HashMap(), new HashMap()); - Scope runtime = system.start(); - assertEquals(0, runtime.getProvidedInterfaces().length); + + Scope runtime = system.start(_externalScope); + assertEquals(0, _externalScope.getProvidedInterfaces().length); system.stop(runtime); } @@ -62,11 +72,17 @@ public class SpringComponentTest extends TestCase { SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, provided, new HashMap()); - Scope runtime = system.start(); + Scope runtime = system.start(_externalScope); ProvidedInterface[] services = runtime.getProvidedInterfaces(); + assertEquals(1, services.length); Object service = runtime.getInterfaceImplementation(services[0], Object.class); assertTrue(service instanceof HelloService); + + // BUG; Provided services should be made available in the external scope. + Object service2 = _externalScope.getInterfaceImplementation(provided.get("helloService"), Object.class); + assertSame(service, service2); + assertEquals("Hello world!", ((HelloService) service).say()); system.stop(runtime); } @@ -82,10 +98,32 @@ public class SpringComponentTest extends TestCase { props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); system.addProperties(props); - Scope scope = system.start(); + Scope scope = system.start(_externalScope); + // BUG: Hello service was constructed multiple times. Once with the unprocessed property + // and another time with the processed property. + assertEquals(1, EVENT_TRACKER.getEventCount()); ProvidedInterface[] services = scope.getProvidedInterfaces(); assertEquals("Property Value", scope.getInterfaceImplementation(services[0], HelloService.class).say()); } + + public void testWithPropertiesAsBean() throws IOException { + Map provided = new HashMap(); + provided.put("helloService", new DefaultProvidedInterface("hello", + HelloService2.class)); + SpringComponent system = new SpringComponent("system", + new String[] { HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML2 }, + provided, new HashMap()); + Properties props = new Properties(); + props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); + system.addProperties("properties", props); + + Scope scope = system.start(_externalScope); + + ProvidedInterface[] services = scope.getProvidedInterfaces(); + + Properties props2 = scope.getInterfaceImplementation(services[0], HelloService2.class).getProperties(); + assertEquals(props, props2); + } public void testWithMissingRequirement() { try { @@ -93,7 +131,7 @@ public class SpringComponentTest extends TestCase { new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), new HashMap()); - system.start(); + system.start(_externalScope); } catch (SystemAssemblyException e) { // e.printStackTrace(); return;