X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fspring%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fspring%2FSpringComponentTest.java;h=6407c14463db1f80d98efaa38f61701f04592d0f;hb=ddd261f331280640c5b53c7128230b629ebcd268;hp=10e2ca8eb8a277b3319c9b712b48b53f3ac9a2d9;hpb=296ef6728606ccf316ba9b60af8b8a6585fb8835;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 10e2ca8e..6407c144 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 @@ -1,12 +1,12 @@ /* * Copyright 2007 the original author or authors. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,14 +15,10 @@ */ package org.wamblee.system.spring; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - import junit.framework.TestCase; import org.wamblee.io.ClassPathResource; + import org.wamblee.system.core.DefaultProvidedInterface; import org.wamblee.system.core.DefaultRequiredInterface; import org.wamblee.system.core.DefaultScope; @@ -30,162 +26,243 @@ 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 { +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class SpringComponentTest extends TestCase { + /** + * DOCUMENT ME! + */ private static final String HELLO_SERVICE_SPRING_XML = "test.org.wamblee.system.spring.xml"; + + /** + * DOCUMENT ME! + */ private static final String HELLO_SERVICE_SPRING_WITH_REQS_XML = "test.org.wamblee.system.springWithRequirements.xml"; + + /** + * DOCUMENT ME! + */ private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML = "test.org.wamblee.system.springWithProperties.xml"; + + /** + * DOCUMENT ME! + */ private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML2 = "test.org.wamblee.system.springWithProperties2.xml"; + /** + * DOCUMENT ME! + */ private static final String PROPERTY_FILE = "test.org.wamblee.system.spring.properties"; + /** + * DOCUMENT ME! + */ public static EventTracker EVENT_TRACKER; - private Scope _externalScope; + /** + * DOCUMENT ME! + */ + private Scope externalScope; + /** + * DOCUMENT ME! + * + * @throws Exception DOCUMENT ME! + */ @Override protected void setUp() throws Exception { super.setUp(); - EVENT_TRACKER = new EventTracker(); - _externalScope = new DefaultScope(new ProvidedInterface[0]); + EVENT_TRACKER = new EventTracker(); + externalScope = new DefaultScope(new ProvidedInterface[0]); } + /** + * DOCUMENT ME! + */ public void testBlackboxSystem() { - SpringComponent system = new SpringComponent("system", + SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, new HashMap(), new HashMap()); - Scope runtime = system.start(_externalScope); - assertEquals(0, _externalScope.getProvidedInterfaces().length); + Scope runtime = system.start(externalScope); + assertEquals(0, externalScope.getProvidedInterfaces().size()); system.stop(runtime); } + /** + * DOCUMENT ME! + */ public void testOneProvidedService() { Map provided = new HashMap(); - provided.put("helloService", new DefaultProvidedInterface("hello", - HelloService.class)); + provided.put("helloService", + new DefaultProvidedInterface("hello", HelloService.class)); - SpringComponent system = new SpringComponent("system", + SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, provided, new HashMap()); - Scope runtime = system.start(_externalScope); - ProvidedInterface[] services = runtime.getProvidedInterfaces(); + Scope runtime = system.start(externalScope); + List services = runtime.getProvidedInterfaces(); - assertEquals(1, services.length); - Object service = runtime.getInterfaceImplementation(services[0], + assertEquals(1, services.size()); + + Object service = runtime.getInterfaceImplementation(services.get(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); + Object service2 = externalScope.getInterfaceImplementation(provided.get( + "helloService"), Object.class); assertSame(service, service2); assertEquals("Hello world!", ((HelloService) service).say()); system.stop(runtime); } + /** + * DOCUMENT ME! + * + * @throws IOException DOCUMENT ME! + */ public void testWithProperties() throws IOException { Map provided = new HashMap(); - provided.put("helloService", new DefaultProvidedInterface("hello", - HelloService.class)); + provided.put("helloService", + new DefaultProvidedInterface("hello", HelloService.class)); + SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML }, provided, new HashMap()); - Properties props = new Properties(); + Properties props = new Properties(); props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); system.addProperties(props); - Scope scope = system.start(_externalScope); + 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()); + + List services = scope.getProvidedInterfaces(); + assertEquals("Property Value", + scope.getInterfaceImplementation(services.get(0), HelloService.class) + .say()); } + /** + * DOCUMENT ME! + * + * @throws IOException DOCUMENT ME! + */ public void testWithPropertiesAsBean() throws IOException { Map provided = new HashMap(); - provided.put("helloService", new DefaultProvidedInterface("hello", - HelloService2.class)); + 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(); + Properties props = new Properties(); props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); system.addProperties("properties", props); - Scope scope = system.start(_externalScope); + Scope scope = system.start(externalScope); - ProvidedInterface[] services = scope.getProvidedInterfaces(); + List services = scope.getProvidedInterfaces(); - Properties props2 = scope.getInterfaceImplementation(services[0], - HelloService2.class).getProperties(); + Properties props2 = scope.getInterfaceImplementation(services + .get(0), HelloService2.class).getProperties(); assertEquals(props, props2); } + /** + * DOCUMENT ME! + */ public void testWithMissingRequirement() { try { SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), new HashMap()); - system.start(_externalScope); + system.start(externalScope); } catch (SystemAssemblyException e) { // e.printStackTrace(); return; } + fail(); } + /** + * DOCUMENT ME! + */ public void testWithRequirement() { Map required = new HashMap(); required.put(new DefaultRequiredInterface("hello", HelloService.class), - "helloService"); - SpringComponent system = new SpringComponent("system", + "helloService"); + + SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), required); - HelloService helloObject = new HelloService("ladida"); + HelloService helloObject = new HelloService("ladida"); ProvidedInterface helloService = new DefaultProvidedInterface("hello", HelloService.class); - Scope scope = new DefaultScope(new ProvidedInterface[] { helloService }); + Scope scope = new DefaultScope(new ProvidedInterface[] { + helloService + }); scope.publishInterface(helloService, helloObject); - system.getRequiredInterfaces()[0].setProvider(helloService); + system.getRequiredInterfaces().get(0).setProvider(helloService); Scope runtime = system.start(scope); system.stop(runtime); } + /** + * DOCUMENT ME! + */ public void testWithRequirementAndProvidedService() { Map required = new HashMap(); required.put(new DefaultRequiredInterface("hello", HelloService.class), - "helloService"); + "helloService"); + Map provided = new HashMap(); - provided.put("blaService", new DefaultProvidedInterface("bla", - BlaService.class)); + provided.put("blaService", + new DefaultProvidedInterface("bla", BlaService.class)); - SpringComponent system = new SpringComponent("system", + SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, provided, required); - HelloService helloObject = new HelloService("ladida"); + HelloService helloObject = new HelloService("ladida"); ProvidedInterface helloService = new DefaultProvidedInterface("hello", HelloService.class); - Scope scope = new DefaultScope(new ProvidedInterface[] { helloService }); + Scope scope = new DefaultScope(new ProvidedInterface[] { + helloService + }); scope.publishInterface(helloService, helloObject); - system.getRequiredInterfaces()[0].setProvider(helloService); - Scope runtime = system.start(scope); - ProvidedInterface started = runtime.getProvidedInterfaces()[0]; + system.getRequiredInterfaces().get(0).setProvider(helloService); + + Scope runtime = system.start(scope); + ProvidedInterface started = runtime.getProvidedInterfaces().get(0); - Object impl = runtime.getInterfaceImplementation(started, + Object impl = runtime.getInterfaceImplementation(started, BlaService.class); assertNotNull(impl); assertTrue(impl instanceof BlaService); @@ -194,35 +271,36 @@ public class SpringComponentTest extends TestCase { } /** - * Tests a scenario where a subclass of SpringComponent adds a new provided - * interface where the interface is provided by the subclass itself and not - * by the spring configs inside. + * Tests a scenario where a subclass of SpringComponent adds a new + * provided interface where the interface is provided by the subclass + * itself and not by the spring configs inside. */ public void testWithProvidedFromSubClassNotFromConfig() { Map provided = new HashMap(); - provided.put("helloService", new DefaultProvidedInterface("hello", - HelloService.class)); + provided.put("helloService", + new DefaultProvidedInterface("hello", HelloService.class)); - SubSpringComponent system = new SubSpringComponent("system", + SubSpringComponent system = new SubSpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, provided, new HashMap()); - Scope runtime = system.start(_externalScope); - ProvidedInterface[] services = runtime.getProvidedInterfaces(); + Scope runtime = system.start(externalScope); + List services = runtime.getProvidedInterfaces(); - assertEquals(2, services.length); - Object service = runtime.getInterfaceImplementation(services[0], + assertEquals(2, services.size()); + + Object service = runtime.getInterfaceImplementation(services.get(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); + Object service2 = externalScope.getInterfaceImplementation(provided.get( + "helloService"), Object.class); assertSame(service, service2); - Object floatsvc = _externalScope.getInterfaceImplementation(system - .getProvidedInterfaces()[1], Object.class); + Object floatsvc = externalScope.getInterfaceImplementation(system.getProvidedInterfaces() + .get(1), Object.class); assertTrue(floatsvc instanceof Float); assertTrue((((Float) floatsvc).floatValue() - 100.345f) < 0.00001); @@ -231,33 +309,37 @@ public class SpringComponentTest extends TestCase { } /** - * Tests the spring component with an additional requirement from the subclass - * which is not required by the spring config files inside. + * Tests the spring component with an additional requirement from + * the subclass which is not required by the spring config files inside. */ public void testWithRequirementFromSubClass() { Map required = new HashMap(); required.put(new DefaultRequiredInterface("hello", HelloService.class), - "helloService"); - SpringComponent system = new SubSpringComponent2("system", + "helloService"); + + SpringComponent system = new SubSpringComponent2("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), required); - HelloService helloObject = new HelloService("ladida"); + HelloService helloObject = new HelloService("ladida"); ProvidedInterface helloService = new DefaultProvidedInterface("hello", HelloService.class); - - ProvidedInterface floatService = new DefaultProvidedInterface("float", Float.class); - - Scope scope = new DefaultScope(new ProvidedInterface[] { helloService }); + + ProvidedInterface floatService = new DefaultProvidedInterface("float", + Float.class); + + Scope scope = new DefaultScope(new ProvidedInterface[] { + helloService + }); scope.publishInterface(helloService, helloObject); scope.publishInterface(floatService, 100.234f); - system.getRequiredInterfaces()[0].setProvider(helloService); - system.getRequiredInterfaces()[1].setProvider(floatService); + system.getRequiredInterfaces().get(0).setProvider(helloService); + system.getRequiredInterfaces().get(1).setProvider(floatService); Scope runtime = system.start(scope); system.stop(runtime); - - assertEquals(100.234f, ((Float)runtime.get("floatValue")).floatValue(), 0.0001f); - } + assertEquals(100.234f, + ((Float) runtime.get("floatValue")).floatValue(), 0.0001f); + } }