X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FContainerTest.java;h=da8f8350918d4a6df144c4fe4f3b582c0160a35d;hb=f9145c96b66fea2db0b9f04b009caf992ad1ab70;hp=4c451337f7cbe027c03922687059e45f0ae88365;hpb=2f12e7060f56e12189f407f309c1d8fb3be93af8;p=utils diff --git a/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java b/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java index 4c451337..da8f8350 100644 --- a/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java +++ b/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java @@ -69,30 +69,33 @@ public class ContainerTest extends TestCase { Serializable.class); ProvidedInterface prov3 = new DefaultProvidedInterface("name", MyMultiple.class); - + Component client = new Application("client"); Component dummy = new Application("dummy"); - - InterfaceRestriction noRestriction = new InterfaceRestriction() { - @Override + + InterfaceRestriction noRestriction = new InterfaceRestriction() { + @Override public boolean isViolated(Component aClient, RequiredInterface aRequired, Component aServer, ProvidedInterface aProvided) { return false; - } + } }; AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 }, - Container.filterProvidedServices(client, req1, - createProvidedInput(new ProvidedInterface[] { prov1 }, dummy), noRestriction)); + Container.filterProvidedServices(client, req1, + createProvidedInput(new ProvidedInterface[] { prov1 }, + dummy), noRestriction)); AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 }, - Container.filterProvidedServices(client, req1, - createProvidedInput(new ProvidedInterface[] { prov1, prov2 }, dummy), noRestriction)); + Container.filterProvidedServices(client, req1, + createProvidedInput(new ProvidedInterface[] { prov1, + prov2 }, dummy), noRestriction)); AssertionUtils.assertEquals(new ProvidedInterface[] { prov1, prov3 }, - Container.filterProvidedServices(client, req1, - createProvidedInput(new ProvidedInterface[] { prov1, prov3 }, dummy), noRestriction)); - - InterfaceRestriction everything = new InterfaceRestriction() { + Container.filterProvidedServices(client, req1, + createProvidedInput(new ProvidedInterface[] { prov1, + prov3 }, dummy), noRestriction)); + + InterfaceRestriction everything = new InterfaceRestriction() { @Override public boolean isViolated(Component aClient, RequiredInterface aRequired, Component aServer, @@ -100,10 +103,11 @@ public class ContainerTest extends TestCase { return true; } }; - AssertionUtils.assertEquals(new ProvidedInterface[0], - Container.filterProvidedServices(client, req1, - createProvidedInput(new ProvidedInterface[] { prov1, prov3 }, dummy), everything)); - + AssertionUtils.assertEquals(new ProvidedInterface[0], Container + .filterProvidedServices(client, req1, createProvidedInput( + new ProvidedInterface[] { prov1, prov3 }, dummy), + everything)); + } public void testEnvironmentApplication() { @@ -504,4 +508,66 @@ public class ContainerTest extends TestCase { assertEquals(env1.getString(), app.getString()); assertFalse(env2.getString().equals(app.getString())); } + + public void testProvidedInDifferentScopes() { + // Scoping problem occurred. Externally and internally provided + // components clashed + // because unique id generation in the scope was wrong. + + StringComponent str = new StringComponent("string"); + Application app = new Application("app"); + Container container = new Container("top").addComponent(str) + .addComponent(app); + container.addRequiredInterface(new DefaultRequiredInterface("integer", + Integer.class)); + + ProvidedInterface provided = new DefaultProvidedInterface("hallo", + Integer.class); + container.getRequiredInterfaces()[0].setProvider(provided); + + Scope external = new DefaultScope(new ProvidedInterface[0]); + external.publishInterface(provided, 100); + Scope scope = container.start(external); + } + + public void testProvidedInterfaces() { + Environment env = new Environment(_tracker); + Container envcontainer = new Container("0").addComponent(env) + .addProvidedInterface( + new DefaultProvidedInterface("string", String.class)) + .addProvidedInterface( + new DefaultProvidedInterface("integer", Integer.class)); + Scope scope = envcontainer.start(); + + AssertionUtils.assertEquals(new String[] { "start.environment" }, + _tracker.getEvents(Thread.currentThread()).toArray( + new String[0])); + + envcontainer.stop(scope); + } + + public void testCoupleTwoContainers() { + Environment env = new Environment(_tracker); + Container envcontainer = new Container("0").addComponent(env) + .addProvidedInterface( + new DefaultProvidedInterface("string", String.class)) + .addProvidedInterface( + new DefaultProvidedInterface("integer", Integer.class)); + + Application app = new Application(_tracker); + Container appcontainer = new Container("1").addComponent(app) + .addRequiredInterface( + new DefaultRequiredInterface("string", String.class)) + .addRequiredInterface( + new DefaultRequiredInterface("integer", Integer.class)); + + Container top = new Container("top"); + top.addComponent(envcontainer).addComponent(appcontainer); + + top.start(); + AssertionUtils.assertEquals(new String[] { "start.environment", "start.application" }, + _tracker.getEvents(Thread.currentThread()).toArray( + new String[0])); + + } }