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<String> EVENT_TRACKER;
+
+ private Scope _externalScope;
@Override
protected void setUp() throws Exception {
super.setUp();
+ EVENT_TRACKER = new EventTracker<String>();
+ _externalScope = new DefaultScope(new ProvidedInterface[0]);
}
public void testBlackboxSystem() {
new String[] { HELLO_SERVICE_SPRING_XML },
new HashMap<String, ProvidedInterface>(),
new HashMap<RequiredInterface, String>());
- Scope runtime = system.start();
- assertEquals(0, runtime.getProvidedInterfaces().length);
+
+ Scope runtime = system.start(_externalScope);
+ assertEquals(0, _externalScope.getProvidedInterfaces().length);
system.stop(runtime);
}
SpringComponent system = new SpringComponent("system",
new String[] { HELLO_SERVICE_SPRING_XML }, provided,
new HashMap<RequiredInterface, String>());
- Scope runtime = system.start();
+ Scope runtime = system.start(_externalScope);
ProvidedInterface[] services = runtime.getProvidedInterfaces();
+
assertEquals(1, services.length);
- Object service = runtime.retrieveInterfaceImplementation(services[0], Object.class);
+ 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);
}
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.retrieveInterfaceImplementation(services[0], HelloService.class).say());
+ assertEquals("Property Value", scope.getInterfaceImplementation(services[0], HelloService.class).say());
}
+
+ public void testWithPropertiesAsBean() throws IOException {
+ Map<String, ProvidedInterface> provided = new HashMap<String, ProvidedInterface>();
+ provided.put("helloService", new DefaultProvidedInterface("hello",
+ HelloService2.class));
+ SpringComponent system = new SpringComponent("system",
+ new String[] { HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML2 },
+ provided, new HashMap<RequiredInterface, String>());
+ 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 {
new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML },
new HashMap<String, ProvidedInterface>(),
new HashMap<RequiredInterface, String>());
- system.start();
+ system.start(_externalScope);
} catch (SystemAssemblyException e) {
// e.printStackTrace();
return;
Scope runtime = system.start(scope);
ProvidedInterface started = runtime.getProvidedInterfaces()[0];
- Object impl = runtime.retrieveInterfaceImplementation(started, BlaService.class);
+ Object impl = runtime.getInterfaceImplementation(started, BlaService.class);
assertNotNull(impl);
assertTrue(impl instanceof BlaService);
assertEquals("ladida", ((BlaService)impl).execute());