logo       

[picocontainer-scm] [picocontainer] [3147] java/nanocontainer/trunk/contain: msg#00054

java.picocontainer.cvs

Subject: [picocontainer-scm] [picocontainer] [3147] java/nanocontainer/trunk/container-jython: Renamed test case.

Revision
3147
Author
mauro
Date
2006-12-26 05:05:16 -0600 (Tue, 26 Dec 2006)

Log Message

Renamed test case. Added cached-dir to svn:ignore.

Added Paths

Removed Paths

Property Changed

  • java/nanocontainer/trunk/container-jython/

Diff

Deleted: java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRuby2ContainerBuilderTestCase.java (3146 => 3147)

--- java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRuby2ContainerBuilderTestCase.java	2006-12-26 11:00:07 UTC (rev 3146)
+++ java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRuby2ContainerBuilderTestCase.java	2006-12-26 11:05:16 UTC (rev 3147)
@@ -1,585 +0,0 @@
-package org.nanocontainer.script.jruby;
-
-import org.jmock.Mock;
-import org.nanocontainer.NanoPicoContainer;
-import org.nanocontainer.TestHelper;
-import org.nanocontainer.integrationkit.PicoCompositionException;
-import org.nanocontainer.reflection.DefaultNanoPicoContainer;
-import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase;
-import org.nanocontainer.script.NanoContainerMarkupException;
-import org.nanocontainer.testmodel.A;
-import org.nanocontainer.testmodel.B;
-import org.nanocontainer.testmodel.HasParams;
-import org.nanocontainer.testmodel.ParentAssemblyScope;
-import org.nanocontainer.testmodel.SomeAssemblyScope;
-import org.nanocontainer.testmodel.X;
-import org.picocontainer.ComponentAdapter;
-import org.picocontainer.MutablePicoContainer;
-import org.picocontainer.PicoContainer;
-import org.picocontainer.defaults.ComponentAdapterFactory;
-import org.picocontainer.defaults.DefaultPicoContainer;
-import org.picocontainer.defaults.InstanceComponentAdapter;
-import org.picocontainer.defaults.SetterInjectionComponentAdapter;
-import org.picocontainer.defaults.SetterInjectionComponentAdapterFactory;
-import org.picocontainer.defaults.UnsatisfiableDependenciesException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-/**
- * @author Nick Sieger
- * @author Paul Hammant
- * @author Chris Bailey
- * @author Mauro Talevi
- */
-public class JRuby2ContainerBuilderTestCase extends AbstractScriptedContainerBuilderTestCase {
-    private static final String ASSEMBLY_SCOPE = "SOME_SCOPE";
-
-
-    public void testContainerCanBeBuiltWithParentGlobal() {
-        Reader script = new StringReader(
-                                         "StringBuffer = java.lang.StringBuffer\n" +
-                                         "container(:parent => $parent) { \n" +
-                                         "  component(StringBuffer)\n" +
-                                         "}");
-        PicoContainer parent = new DefaultPicoContainer();
-        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
-        //PicoContainer.getParent() is now ImmutablePicoContainer
-        assertNotNull(pico.getParent());
-        assertNotSame(parent, pico.getParent());
-        assertEquals(StringBuffer.class, pico.getComponentInstance(StringBuffer.class).getClass());
-    }
-
-    public void testContainerCanBeBuiltWithComponentImplementation() {
-        X.reset();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "container {\n" +
-                                         "    component(A)\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        // LifecyleContainerBuilder starts the container
-        pico.dispose();
-
-        assertEquals("Should match the _expression_", "<A!A", X.componentRecorder);
-    }
-
-    public void testContainerCanBeBuiltWithComponentInstance() {
-        Reader script = new StringReader(
-                                         "container { \n" +
-                                         "  component(:key => 'string', :instance => 'foo')\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, "SOME_SCOPE");
-
-        assertEquals("foo", pico.getComponentInstance("string"));
-    }
-
-    public void testBuildingWithPicoSyntax() {
-        Reader script = new StringReader(
-                                         "$parent.registerComponentImplementation('foo', Java::JavaClass.for_name('java.lang.String'))\n"
-                                         +
-                                         "DefaultPicoContainer = org.picocontainer.defaults.DefaultPicoContainer\n" +
-                                         "pico = DefaultPicoContainer.new($parent)\n" +
-                                         "pico.registerComponentImplementation(Java::JavaClass.for_name('org.nanocontainer.testmodel.A'))\n"
-                                         +
-                                         "pico");
-
-        PicoContainer parent = new DefaultPicoContainer();
-        PicoContainer pico = buildContainer(script, parent, "SOME_SCOPE");
-
-        assertNotSame(parent, pico.getParent());
-        assertNotNull(pico.getComponentInstance(A.class));
-        assertNotNull(pico.getComponentInstance("foo"));
-    }
-
-    public void testContainerBuiltWithMultipleComponentInstances() {
-        Reader script = new StringReader(
-                                         "container {\n" +
-                                         "    component(:key => 'a', :instance => 'apple')\n" +
-                                         "    component(:key => 'b', :instance => 'banana')\n" +
-                                         "    component(:instance => 'noKeySpecified')\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        assertEquals("apple", pico.getComponentInstance("a"));
-        assertEquals("banana", pico.getComponentInstance("b"));
-        assertEquals("noKeySpecified", pico.getComponentInstance(String.class));
-    }
-
-    public void testShouldFailWhenNeitherClassNorInstanceIsSpecifiedForComponent() {
-        Reader script = new StringReader(
-                                         "container {\n" +
-                                         "  component(:key => 'a')\n" +
-                                         "}");
-
-        try {
-            buildContainer(script, null, ASSEMBLY_SCOPE);
-            fail("NanoContainerMarkupException should have been raised");
-        } catch(NanoContainerMarkupException e) {
-            // expected
-        }
-    }
-
-    public void testAcceptsConstantParametersForComponent() {
-        Reader script = new StringReader(
-                                         "HasParams = org.nanocontainer.testmodel.HasParams\n" +
-                                         "container {\n" +
-                                         "    component(:key => 'byClass', :class => HasParams, :parameters => [ 'a', 'b', constant('c')])\n"
-                                         +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        HasParams byClass = (HasParams) pico.getComponentInstance("byClass");
-        assertEquals("abc", byClass.getParams());
-    }
-
-    public void testAcceptsComponentClassNameAsString() {
-        Reader script = new StringReader(
-                                         "container {\n" +
-                                         "    component(:key => 'byClassString', :class => 'org.nanocontainer.testmodel.HasParams', :parameters => [ 'c', 'a', 't' ])\n"
-                                         +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        HasParams byClassString = (HasParams) pico.getComponentInstance("byClassString");
-        assertEquals("cat", byClassString.getParams());
-    }
-
-    public void testAcceptsComponentParametersForComponent() {
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "B = org.nanocontainer.testmodel.B\n" +
-                                         "container {\n" +
-                                         "    component(:key => 'a1', :class => A)\n" +
-                                         "    component(:key => 'a2', :class => A)\n" +
-                                         "    component(:key => 'b1', :class => B, :parameters => [ key('a1') ])\n" +
-                                         "    component(:key => 'b2', :class => B, :parameters => key('a2'))\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        A a1 = (A) pico.getComponentInstance("a1");
-        A a2 = (A) pico.getComponentInstance("a2");
-        B b1 = (B) pico.getComponentInstance("b1");
-        B b2 = (B) pico.getComponentInstance("b2");
-
-        assertNotNull(a1);
-        assertNotNull(a2);
-        assertNotNull(b1);
-        assertNotNull(b2);
-
-        assertSame(a1, b1.getA());
-        assertSame(a2, b2.getA());
-        assertNotSame(a1, a2);
-        assertNotSame(b1, b2);
-    }
-
-    public void testAcceptsComponentParameterWithClassNameKey() {
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "B = org.nanocontainer.testmodel.B\n" +
-                                         "container {\n" +
-                                         "    component(:class => A)\n" +
-                                         "    component(:key => B, :class => B, :parameters => key(A))\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        A a = (A) pico.getComponentInstance(A.class);
-        B b = (B) pico.getComponentInstance(B.class);
-
-        assertNotNull(a);
-        assertNotNull(b);
-        assertSame(a, b.getA());
-    }
-
-    public void testInstantiateBasicComponentInDeeperTree() {
-        X.reset();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "container {\n" +
-                                         "  container {\n" +
-                                         "    component(A)\n" +
-                                         "  }\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        pico.dispose();
-        assertEquals("Should match the _expression_", "<A!A", X.componentRecorder);
-    }
-
-    public void testCustomComponentAdapterFactoryCanBeSpecified() {
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "container(:component_adapter_factory => $assembly_scope) {\n" +
-                                         "    component(A)\n" +
-                                         "}");
-
-        A a = new A();
-        Mock cafMock = mock(ComponentAdapterFactory.class);
-        cafMock.expects(once()).method("createComponentAdapter").with(same(A.class), same(A.class), eq(null))
-            .will(returnValue(new InstanceComponentAdapter(A.class, a)));
-        PicoContainer pico = buildContainer(script, null, cafMock.proxy());
-        assertSame(a, pico.getComponentInstanceOfType(A.class));
-    }
-
-    public void testCustomComponentMonitorCanBeSpecified() {
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "StringWriter = java.io.StringWriter\n" +
-                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
-                                         "writer = StringWriter.new\n" +
-                                         "monitor = WriterComponentMonitor.new(writer) \n" +
-                                         "container(:component_monitor => monitor) {\n" +
-                                         "    component(A)\n" +
-                                         "    component(:key => StringWriter, :instance => writer)\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
-        assertTrue(writer.toString().length() > 0);
-    }
-
-    public void testCustomComponentMonitorCanBeSpecifiedWhenCAFIsSpecified() {
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "StringWriter = java.io.StringWriter\n" +
-                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
-                                         "DefaultComponentAdapterFactory = org.picocontainer.defaults.DefaultComponentAdapterFactory\n" +
-                                         "writer = StringWriter.new\n" +
-                                         "monitor = WriterComponentMonitor.new(writer) \n" +
-                                         "container(:component_adapter_factory => DefaultComponentAdapterFactory.new, :component_monitor => monitor) {\n"
-                                         +
-                                         "    component(A)\n" +
-                                         "    component(:key => StringWriter, :instance => writer)\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
-        assertTrue(writer.toString().length() > 0);
-    }
-
-    public void testCustomComponentMonitorCanBeSpecifiedWhenParentIsSpecified() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "StringWriter = java.io.StringWriter\n" +
-                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
-                                         "writer = StringWriter.new\n" +
-                                         "monitor = WriterComponentMonitor.new(writer) \n" +
-                                         "container(:parent => $parent, :component_monitor => monitor) {\n" +
-                                         "    component(A)\n" +
-                                         "    component(:key => StringWriter, :instance => writer)\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
-        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
-        assertTrue(writer.toString().length() > 0);
-    }
-
-    public void testCustomComponentMonitorCanBeSpecifiedWhenParentAndCAFAreSpecified() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "StringWriter = java.io.StringWriter\n" +
-                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
-                                         "DefaultComponentAdapterFactory = org.picocontainer.defaults.DefaultComponentAdapterFactory\n" +
-                                         "writer = StringWriter.new\n" +
-                                         "monitor = WriterComponentMonitor.new(writer) \n" +
-                                         "container(:parent => $parent, :component_adapter_factory => DefaultComponentAdapterFactory.new, :component_monitor => monitor) {\n"
-                                         +
-                                         "    component(A)\n" +
-                                         "    component(:key => StringWriter, :instance => writer)\n" +
-                                         "}");
-
-        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
-        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
-        assertTrue(writer.toString().length() > 0);
-    }
-
-    public void testInstantiateWithImpossibleComponentDependenciesConsideringTheHierarchy() {
-        X.reset();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "B = org.nanocontainer.testmodel.B\n" +
-                                         "C = org.nanocontainer.testmodel.C\n" +
-                                         "container {\n" +
-                                         "    component(B)\n" +
-                                         "    container() {\n" +
-                                         "        component(A)\n" +
-                                         "    }\n" +
-                                         "    component(C)\n" +
-                                         "}");
-
-        try {
-            buildContainer(script, null, ASSEMBLY_SCOPE);
-            fail("Should not have been able to instansiate component tree due to visibility/parent reasons.");
-        } catch(UnsatisfiableDependenciesException expected) {
-        }
-    }
-
-    public void testInstantiateWithChildContainerAndStartStopAndDisposeOrderIsCorrect() {
-        X.reset();
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "B = org.nanocontainer.testmodel.B\n" +
-                                         "C = org.nanocontainer.testmodel.C\n" +
-                                         "container {\n" +
-                                         "    component(A)\n" +
-                                         "    container() {\n" +
-                                         "         component(B)\n" +
-                                         "    }\n" +
-                                         "    component(C)\n" +
-                                         "}\n");
-
-        // A and C have no no dependancies. B Depends on A.
-        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
-        pico.stop();
-        pico.dispose();
-
-        assertEquals("Should match the _expression_", "<A<C<BB>C>A>!B!C!A", X.componentRecorder);
-    }
-
-    public void testBuildContainerWithParentAttribute() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        parent.registerComponentInstance("hello", "world");
-
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "container(:parent => $parent) {\n" +
-                                         "    component(A)\n" +
-                                         "}\n");
-
-        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
-        // Should be able to get instance that was registered in the parent container
-        assertEquals("world", pico.getComponentInstance("hello"));
-    }
-
-    public void testBuildContainerWithParentDependencyAndAssemblyScope() throws Exception {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        parent.registerComponentImplementation("a", A.class);
-
-        String source =
-                        "B = org.nanocontainer.testmodel.B\n" +
-                        "SomeAssemblyScope = org.nanocontainer.testmodel.SomeAssemblyScope\n" +
-                        "container(:parent => $parent) {\n" +
-                        "  if $assembly_scope.kind_of?(SomeAssemblyScope)\n " +
-                        "    component(B)\n" +
-                        "  end\n " +
-                        "}\n";
-
-        Reader script = new StringReader(source);
-
-        PicoContainer pico = buildContainer(script, parent, new SomeAssemblyScope());
-        assertNotNull(pico.getComponentInstanceOfType(B.class));
-
-        script = new StringReader(source);
-        pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
-        assertNull(pico.getComponentInstanceOfType(B.class));
-    }
-
-    public void testBuildContainerWithParentAndChildAssemblyScopes() throws IOException {
-        String scriptValue =
-                             "A = org.nanocontainer.testmodel.A\n" +
-                             "B = org.nanocontainer.testmodel.B\n" +
-                             "ParentAssemblyScope = org.nanocontainer.testmodel.ParentAssemblyScope\n" +
-                             "SomeAssemblyScope = org.nanocontainer.testmodel.SomeAssemblyScope\n" +
-                             "container(:parent => $parent) {\n" +
-                             "  puts 'assembly_scope:'+$assembly_scope.inspect\n " +
-                             "  case $assembly_scope\n" +
-                             "  when ParentAssemblyScope\n " +
-                             "    puts 'parent scope'\n " +
-                             "    component(A)\n" +
-                             "  when SomeAssemblyScope\n " +
-                             "    puts 'child scope'\n " +
-                             "    component(B)\n" +
-                             "  else \n" +
-                             "     raise 'Invalid Scope: ' +  $assembly_scope.inspect\n" +
-                             "  end\n " +
-                             "}\n";
-
-        Reader script = new StringReader(scriptValue);
-        NanoPicoContainer parent = new DefaultNanoPicoContainer(
-            buildContainer(script, null, new ParentAssemblyScope()));
-        assertNotNull(parent.getComponentAdapterOfType(A.class));
-
-        script = new StringReader(scriptValue);
-        PicoContainer pico = buildContainer(script, parent, new SomeAssemblyScope());
-        assertNotNull(pico.getComponentInstance(B.class));
-    }
-
-    public void FAILING_testBuildContainerWithParentAttributesPropagatesComponentAdapterFactory() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory());
-        Reader script = new StringReader("container(:parent => $parent)\n");
-
-        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
-        // Should be able to get instance that was registered in the parent container
-        ComponentAdapter componentAdapter = pico.registerComponentImplementation(String.class);
-        assertTrue("ComponentAdapter should be originally defined by parent",
-                   componentAdapter instanceof SetterInjectionComponentAdapter);
-    }
-
-    public void testExceptionThrownWhenParentAttributeDefinedWithinChild() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory());
-        Reader script = new StringReader(
-                                         "A = org.nanocontainer.testmodel.A\n" +
-                                         "B = org.nanocontainer.testmodel.B\n" +
-                                         "container() {\n" +
-                                         "    component(A)\n" +
-                                         "    container(:parent => $parent) {\n" +
-                                         "         component(B)\n" +
-                                         "    }\n" +
-                                         "}\n");
-
-        try {
-            buildContainer(script, parent, ASSEMBLY_SCOPE);
-            fail("NanoContainerMarkupException should have been thrown.");
-        } catch(NanoContainerMarkupException ignore) {
-            // expected
-        }
-    }
-
-    //TODO
-    public void testSpuriousAttributes() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-
-        Reader script = new StringReader(
-                                         "container(:jim => 'Jam', :foo => 'bar')");
-        try {
-            buildContainer(script, parent, ASSEMBLY_SCOPE);
-            //fail("Should throw exception upon spurious attributes?");
-        } catch(NanoContainerMarkupException ex) {
-            //ok?
-        }
-    }
-
-    public void testWithDynamicClassPathThatDoesNotExist() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        try {
-            Reader script = new StringReader(
-                                             "container {\n" +
-                                             "  classPathElement(:path => 'this/path/does/not/exist.jar')\n" +
-                                             "  component(:class => \"FooBar\")\n" +
-                                             "}");
-
-            buildContainer(script, parent, ASSEMBLY_SCOPE);
-            fail("should have barfed with bad path exception");
-        } catch(NanoContainerMarkupException e) {
-            // excpected
-        }
-
-    }
-
-    public void testWithDynamicClassPath() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        Reader script = new StringReader(
-            "TestHelper = org.nanocontainer.TestHelper\n"
-            + "testCompJar = TestHelper.getTestCompJarFile()\n"
-            + "compJarPath = testCompJar.getCanonicalPath()\n"
-            + "container {\n"
-            + "  classPathElement(:path => compJarPath)\n"
-            + "  component(:class => \"TestComp\")\n"
-            + "}" );
-
-        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
-
-        assertEquals(1, pico.getComponentInstances().size());
-        assertEquals("TestComp", pico.getComponentInstances().get(0).getClass()
-            .getName());
-    }
-
-    public void testWithDynamicClassPathWithPermissions() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        Reader script = new StringReader(
-            "TestHelper = org.nanocontainer.TestHelper\n" +
-            "SocketPermission = java.net.SocketPermission\n"
-            + "testCompJar = TestHelper.getTestCompJarFile()\n"
-            + "compJarPath = testCompJar.getCanonicalPath()\n"
-            + "container {\n"
-            + "  classPathElement(:path => compJarPath) {\n"
-            + "    grant(:perm => SocketPermission.new('google.com','connect'))\n"
-            + "  }\n"
-            + "  component(:class => \"TestComp\")\n"
-            + "}" );
-
-        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
-
-        assertEquals(1, pico.getComponentInstances().size());
-        // can't actually test the permission under JUNIT control. We're just
-        // testing the syntax here.
-    }
-
-    public void testGrantPermissionInWrongPlace() {
-        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
-        try {
-            Reader script = new StringReader(
-                "TestHelper = org.nanocontainer.TestHelper\n" +
-                "SocketPermission = java.net.SocketPermission\n" +
-                "testCompJar = TestHelper.getTestCompJarFile()\n" +
-                "container {\n" +
-                "  grant(:perm => SocketPermission.new('google.com','connect'))\n" +
-                "}");
-
-            buildContainer(script, parent, ASSEMBLY_SCOPE);
-            fail("should barf with [Don't know how to create a 'grant' child] exception");
-        } catch(PicoCompositionException e) {
-            String message = e.getCause().getMessage();
-            assertNotNull(message);
-            assertTrue(message.contains("undefined method `grant' for #<Nano::Container:"));
-        }
-
-    }
-
-
-    public void testWithParentClassPathPropagatesWithNoParentContainer() throws IOException {
-        File testCompJar = TestHelper.getTestCompJarFile();
-
-        URLClassLoader classLoader = new URLClassLoader(new URL[]{testCompJar.toURL()},
-                                                        this.getClass().getClassLoader());
-        Class testComp = null;
-
-        try {
-            testComp = classLoader.loadClass("TestComp");
-        } catch(ClassNotFoundException ex) {
-            fail("Unable to load test component from the jar using a url classloader");
-        }
-        Reader script = new StringReader(
-            "container(:parent => $parent) {\n"
-            + "  component(:class => \"TestComp\")\n"
-            + "}");
-
-        PicoContainer pico = buildContainer(new JRubyContainerBuilder(script, classLoader), null, null);
-        assertNotNull(pico);
-        Object testCompInstance = pico.getComponentInstance(testComp.getName());
-        assertSame(testCompInstance.getClass(), testComp);
-
-    }
-
-//    public void testExceptionThrownWhenParentAttributeDefinedWithinChild() {
-//        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory() );
-//        Reader script = new StringReader("" +
-//                "package org.nanocontainer.testmodel\n" +
-//                "nano = new GroovyNodeBuilder().container() {\n" +
-//                "    component(A)\n" +
-//                "    container(parent:parent) {\n" +
-//                "         component(B)\n" +
-//                "    }\n" +
-//                "}\n");
-//
-//        try {
-//            buildContainer(script, parent, ASSEMBLY_SCOPE);
-//            fail("NanoContainerMarkupException should have been thrown.");
-//        } catch (NanoContainerMarkupException ignore) {
-//            // ignore
-//        }
-//    }
-
-    private PicoContainer buildContainer(Reader script, PicoContainer parent, Object scope) {
-        return buildContainer(new JRubyContainerBuilder(script, getClass().getClassLoader()), parent, scope);
-    }
-}

Copied: java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRubyContainerBuilderTestCase.java (from rev 3146, java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRuby2ContainerBuilderTestCase.java) (0 => 3147)

--- java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRubyContainerBuilderTestCase.java	                        (rev 0)
+++ java/nanocontainer/trunk/container-jruby/src/test/org/nanocontainer/script/jruby/JRubyContainerBuilderTestCase.java	2006-12-26 11:05:16 UTC (rev 3147)
@@ -0,0 +1,585 @@
+package org.nanocontainer.script.jruby;
+
+import org.jmock.Mock;
+import org.nanocontainer.NanoPicoContainer;
+import org.nanocontainer.TestHelper;
+import org.nanocontainer.integrationkit.PicoCompositionException;
+import org.nanocontainer.reflection.DefaultNanoPicoContainer;
+import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase;
+import org.nanocontainer.script.NanoContainerMarkupException;
+import org.nanocontainer.testmodel.A;
+import org.nanocontainer.testmodel.B;
+import org.nanocontainer.testmodel.HasParams;
+import org.nanocontainer.testmodel.ParentAssemblyScope;
+import org.nanocontainer.testmodel.SomeAssemblyScope;
+import org.nanocontainer.testmodel.X;
+import org.picocontainer.ComponentAdapter;
+import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoContainer;
+import org.picocontainer.defaults.ComponentAdapterFactory;
+import org.picocontainer.defaults.DefaultPicoContainer;
+import org.picocontainer.defaults.InstanceComponentAdapter;
+import org.picocontainer.defaults.SetterInjectionComponentAdapter;
+import org.picocontainer.defaults.SetterInjectionComponentAdapterFactory;
+import org.picocontainer.defaults.UnsatisfiableDependenciesException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * @author Nick Sieger
+ * @author Paul Hammant
+ * @author Chris Bailey
+ * @author Mauro Talevi
+ */
+public class JRubyContainerBuilderTestCase extends AbstractScriptedContainerBuilderTestCase {
+    private static final String ASSEMBLY_SCOPE = "SOME_SCOPE";
+
+
+    public void testContainerCanBeBuiltWithParentGlobal() {
+        Reader script = new StringReader(
+                                         "StringBuffer = java.lang.StringBuffer\n" +
+                                         "container(:parent => $parent) { \n" +
+                                         "  component(StringBuffer)\n" +
+                                         "}");
+        PicoContainer parent = new DefaultPicoContainer();
+        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
+        //PicoContainer.getParent() is now ImmutablePicoContainer
+        assertNotNull(pico.getParent());
+        assertNotSame(parent, pico.getParent());
+        assertEquals(StringBuffer.class, pico.getComponentInstance(StringBuffer.class).getClass());
+    }
+
+    public void testContainerCanBeBuiltWithComponentImplementation() {
+        X.reset();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "container {\n" +
+                                         "    component(A)\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        // LifecyleContainerBuilder starts the container
+        pico.dispose();
+
+        assertEquals("Should match the _expression_", "<A!A", X.componentRecorder);
+    }
+
+    public void testContainerCanBeBuiltWithComponentInstance() {
+        Reader script = new StringReader(
+                                         "container { \n" +
+                                         "  component(:key => 'string', :instance => 'foo')\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, "SOME_SCOPE");
+
+        assertEquals("foo", pico.getComponentInstance("string"));
+    }
+
+    public void testBuildingWithPicoSyntax() {
+        Reader script = new StringReader(
+                                         "$parent.registerComponentImplementation('foo', Java::JavaClass.for_name('java.lang.String'))\n"
+                                         +
+                                         "DefaultPicoContainer = org.picocontainer.defaults.DefaultPicoContainer\n" +
+                                         "pico = DefaultPicoContainer.new($parent)\n" +
+                                         "pico.registerComponentImplementation(Java::JavaClass.for_name('org.nanocontainer.testmodel.A'))\n"
+                                         +
+                                         "pico");
+
+        PicoContainer parent = new DefaultPicoContainer();
+        PicoContainer pico = buildContainer(script, parent, "SOME_SCOPE");
+
+        assertNotSame(parent, pico.getParent());
+        assertNotNull(pico.getComponentInstance(A.class));
+        assertNotNull(pico.getComponentInstance("foo"));
+    }
+
+    public void testContainerBuiltWithMultipleComponentInstances() {
+        Reader script = new StringReader(
+                                         "container {\n" +
+                                         "    component(:key => 'a', :instance => 'apple')\n" +
+                                         "    component(:key => 'b', :instance => 'banana')\n" +
+                                         "    component(:instance => 'noKeySpecified')\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        assertEquals("apple", pico.getComponentInstance("a"));
+        assertEquals("banana", pico.getComponentInstance("b"));
+        assertEquals("noKeySpecified", pico.getComponentInstance(String.class));
+    }
+
+    public void testShouldFailWhenNeitherClassNorInstanceIsSpecifiedForComponent() {
+        Reader script = new StringReader(
+                                         "container {\n" +
+                                         "  component(:key => 'a')\n" +
+                                         "}");
+
+        try {
+            buildContainer(script, null, ASSEMBLY_SCOPE);
+            fail("NanoContainerMarkupException should have been raised");
+        } catch(NanoContainerMarkupException e) {
+            // expected
+        }
+    }
+
+    public void testAcceptsConstantParametersForComponent() {
+        Reader script = new StringReader(
+                                         "HasParams = org.nanocontainer.testmodel.HasParams\n" +
+                                         "container {\n" +
+                                         "    component(:key => 'byClass', :class => HasParams, :parameters => [ 'a', 'b', constant('c')])\n"
+                                         +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        HasParams byClass = (HasParams) pico.getComponentInstance("byClass");
+        assertEquals("abc", byClass.getParams());
+    }
+
+    public void testAcceptsComponentClassNameAsString() {
+        Reader script = new StringReader(
+                                         "container {\n" +
+                                         "    component(:key => 'byClassString', :class => 'org.nanocontainer.testmodel.HasParams', :parameters => [ 'c', 'a', 't' ])\n"
+                                         +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        HasParams byClassString = (HasParams) pico.getComponentInstance("byClassString");
+        assertEquals("cat", byClassString.getParams());
+    }
+
+    public void testAcceptsComponentParametersForComponent() {
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "B = org.nanocontainer.testmodel.B\n" +
+                                         "container {\n" +
+                                         "    component(:key => 'a1', :class => A)\n" +
+                                         "    component(:key => 'a2', :class => A)\n" +
+                                         "    component(:key => 'b1', :class => B, :parameters => [ key('a1') ])\n" +
+                                         "    component(:key => 'b2', :class => B, :parameters => key('a2'))\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        A a1 = (A) pico.getComponentInstance("a1");
+        A a2 = (A) pico.getComponentInstance("a2");
+        B b1 = (B) pico.getComponentInstance("b1");
+        B b2 = (B) pico.getComponentInstance("b2");
+
+        assertNotNull(a1);
+        assertNotNull(a2);
+        assertNotNull(b1);
+        assertNotNull(b2);
+
+        assertSame(a1, b1.getA());
+        assertSame(a2, b2.getA());
+        assertNotSame(a1, a2);
+        assertNotSame(b1, b2);
+    }
+
+    public void testAcceptsComponentParameterWithClassNameKey() {
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "B = org.nanocontainer.testmodel.B\n" +
+                                         "container {\n" +
+                                         "    component(:class => A)\n" +
+                                         "    component(:key => B, :class => B, :parameters => key(A))\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        A a = (A) pico.getComponentInstance(A.class);
+        B b = (B) pico.getComponentInstance(B.class);
+
+        assertNotNull(a);
+        assertNotNull(b);
+        assertSame(a, b.getA());
+    }
+
+    public void testInstantiateBasicComponentInDeeperTree() {
+        X.reset();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "container {\n" +
+                                         "  container {\n" +
+                                         "    component(A)\n" +
+                                         "  }\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        pico.dispose();
+        assertEquals("Should match the _expression_", "<A!A", X.componentRecorder);
+    }
+
+    public void testCustomComponentAdapterFactoryCanBeSpecified() {
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "container(:component_adapter_factory => $assembly_scope) {\n" +
+                                         "    component(A)\n" +
+                                         "}");
+
+        A a = new A();
+        Mock cafMock = mock(ComponentAdapterFactory.class);
+        cafMock.expects(once()).method("createComponentAdapter").with(same(A.class), same(A.class), eq(null))
+            .will(returnValue(new InstanceComponentAdapter(A.class, a)));
+        PicoContainer pico = buildContainer(script, null, cafMock.proxy());
+        assertSame(a, pico.getComponentInstanceOfType(A.class));
+    }
+
+    public void testCustomComponentMonitorCanBeSpecified() {
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "StringWriter = java.io.StringWriter\n" +
+                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
+                                         "writer = StringWriter.new\n" +
+                                         "monitor = WriterComponentMonitor.new(writer) \n" +
+                                         "container(:component_monitor => monitor) {\n" +
+                                         "    component(A)\n" +
+                                         "    component(:key => StringWriter, :instance => writer)\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
+        assertTrue(writer.toString().length() > 0);
+    }
+
+    public void testCustomComponentMonitorCanBeSpecifiedWhenCAFIsSpecified() {
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "StringWriter = java.io.StringWriter\n" +
+                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
+                                         "DefaultComponentAdapterFactory = org.picocontainer.defaults.DefaultComponentAdapterFactory\n" +
+                                         "writer = StringWriter.new\n" +
+                                         "monitor = WriterComponentMonitor.new(writer) \n" +
+                                         "container(:component_adapter_factory => DefaultComponentAdapterFactory.new, :component_monitor => monitor) {\n"
+                                         +
+                                         "    component(A)\n" +
+                                         "    component(:key => StringWriter, :instance => writer)\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
+        assertTrue(writer.toString().length() > 0);
+    }
+
+    public void testCustomComponentMonitorCanBeSpecifiedWhenParentIsSpecified() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "StringWriter = java.io.StringWriter\n" +
+                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
+                                         "writer = StringWriter.new\n" +
+                                         "monitor = WriterComponentMonitor.new(writer) \n" +
+                                         "container(:parent => $parent, :component_monitor => monitor) {\n" +
+                                         "    component(A)\n" +
+                                         "    component(:key => StringWriter, :instance => writer)\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
+        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
+        assertTrue(writer.toString().length() > 0);
+    }
+
+    public void testCustomComponentMonitorCanBeSpecifiedWhenParentAndCAFAreSpecified() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "StringWriter = java.io.StringWriter\n" +
+                                         "WriterComponentMonitor = org.picocontainer.monitors.WriterComponentMonitor\n" +
+                                         "DefaultComponentAdapterFactory = org.picocontainer.defaults.DefaultComponentAdapterFactory\n" +
+                                         "writer = StringWriter.new\n" +
+                                         "monitor = WriterComponentMonitor.new(writer) \n" +
+                                         "container(:parent => $parent, :component_adapter_factory => DefaultComponentAdapterFactory.new, :component_monitor => monitor) {\n"
+                                         +
+                                         "    component(A)\n" +
+                                         "    component(:key => StringWriter, :instance => writer)\n" +
+                                         "}");
+
+        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
+        StringWriter writer = (StringWriter) pico.getComponentInstanceOfType(StringWriter.class);
+        assertTrue(writer.toString().length() > 0);
+    }
+
+    public void testInstantiateWithImpossibleComponentDependenciesConsideringTheHierarchy() {
+        X.reset();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "B = org.nanocontainer.testmodel.B\n" +
+                                         "C = org.nanocontainer.testmodel.C\n" +
+                                         "container {\n" +
+                                         "    component(B)\n" +
+                                         "    container() {\n" +
+                                         "        component(A)\n" +
+                                         "    }\n" +
+                                         "    component(C)\n" +
+                                         "}");
+
+        try {
+            buildContainer(script, null, ASSEMBLY_SCOPE);
+            fail("Should not have been able to instansiate component tree due to visibility/parent reasons.");
+        } catch(UnsatisfiableDependenciesException expected) {
+        }
+    }
+
+    public void testInstantiateWithChildContainerAndStartStopAndDisposeOrderIsCorrect() {
+        X.reset();
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "B = org.nanocontainer.testmodel.B\n" +
+                                         "C = org.nanocontainer.testmodel.C\n" +
+                                         "container {\n" +
+                                         "    component(A)\n" +
+                                         "    container() {\n" +
+                                         "         component(B)\n" +
+                                         "    }\n" +
+                                         "    component(C)\n" +
+                                         "}\n");
+
+        // A and C have no no dependancies. B Depends on A.
+        PicoContainer pico = buildContainer(script, null, ASSEMBLY_SCOPE);
+        pico.stop();
+        pico.dispose();
+
+        assertEquals("Should match the _expression_", "<A<C<BB>C>A>!B!C!A", X.componentRecorder);
+    }
+
+    public void testBuildContainerWithParentAttribute() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        parent.registerComponentInstance("hello", "world");
+
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "container(:parent => $parent) {\n" +
+                                         "    component(A)\n" +
+                                         "}\n");
+
+        PicoContainer pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
+        // Should be able to get instance that was registered in the parent container
+        assertEquals("world", pico.getComponentInstance("hello"));
+    }
+
+    public void testBuildContainerWithParentDependencyAndAssemblyScope() throws Exception {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        parent.registerComponentImplementation("a", A.class);
+
+        String source =
+                        "B = org.nanocontainer.testmodel.B\n" +
+                        "SomeAssemblyScope = org.nanocontainer.testmodel.SomeAssemblyScope\n" +
+                        "container(:parent => $parent) {\n" +
+                        "  if $assembly_scope.kind_of?(SomeAssemblyScope)\n " +
+                        "    component(B)\n" +
+                        "  end\n " +
+                        "}\n";
+
+        Reader script = new StringReader(source);
+
+        PicoContainer pico = buildContainer(script, parent, new SomeAssemblyScope());
+        assertNotNull(pico.getComponentInstanceOfType(B.class));
+
+        script = new StringReader(source);
+        pico = buildContainer(script, parent, ASSEMBLY_SCOPE);
+        assertNull(pico.getComponentInstanceOfType(B.class));
+    }
+
+    public void testBuildContainerWithParentAndChildAssemblyScopes() throws IOException {
+        String scriptValue =
+                             "A = org.nanocontainer.testmodel.A\n" +
+                             "B = org.nanocontainer.testmodel.B\n" +
+                             "ParentAssemblyScope = org.nanocontainer.testmodel.ParentAssemblyScope\n" +
+                             "SomeAssemblyScope = org.nanocontainer.testmodel.SomeAssemblyScope\n" +
+                             "container(:parent => $parent) {\n" +
+                             "  puts 'assembly_scope:'+$assembly_scope.inspect\n " +
+                             "  case $assembly_scope\n" +
+                             "  when ParentAssemblyScope\n " +
+                             "    puts 'parent scope'\n " +
+                             "    component(A)\n" +
+                             "  when SomeAssemblyScope\n " +
+                             "    puts 'child scope'\n " +
+                             "    component(B)\n" +
+                             "  else \n" +
+                             "     raise 'Invalid Scope: ' +  $assembly_scope.inspect\n" +
+                             "  end\n " +
+                             "}\n";
+
+        Reader script = new StringReader(scriptValue);
+        NanoPicoContainer parent = new DefaultNanoPicoContainer(
+            buildContainer(script, null, new ParentAssemblyScope()));
+        assertNotNull(parent.getComponentAdapterOfType(A.class));
+
+        script = new StringReader(scriptValue);
+        PicoContainer pico = buildContainer(script, parent, new SomeAssemblyScope());
+        assertNotNull(pico.getComponentInstance(B.class));
+    }
+
+    public void FAILING_testBuildContainerWithParentAttributesPropagatesComponentAdapterFactory() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory());
+        Reader script = new StringReader("container(:parent => $parent)\n");
+
+        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
+        // Should be able to get instance that was registered in the parent container
+        ComponentAdapter componentAdapter = pico.registerComponentImplementation(String.class);
+        assertTrue("ComponentAdapter should be originally defined by parent",
+                   componentAdapter instanceof SetterInjectionComponentAdapter);
+    }
+
+    public void testExceptionThrownWhenParentAttributeDefinedWithinChild() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory());
+        Reader script = new StringReader(
+                                         "A = org.nanocontainer.testmodel.A\n" +
+                                         "B = org.nanocontainer.testmodel.B\n" +
+                                         "container() {\n" +
+                                         "    component(A)\n" +
+                                         "    container(:parent => $parent) {\n" +
+                                         "         component(B)\n" +
+                                         "    }\n" +
+                                         "}\n");
+
+        try {
+            buildContainer(script, parent, ASSEMBLY_SCOPE);
+            fail("NanoContainerMarkupException should have been thrown.");
+        } catch(NanoContainerMarkupException ignore) {
+            // expected
+        }
+    }
+
+    //TODO
+    public void testSpuriousAttributes() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+
+        Reader script = new StringReader(
+                                         "container(:jim => 'Jam', :foo => 'bar')");
+        try {
+            buildContainer(script, parent, ASSEMBLY_SCOPE);
+            //fail("Should throw exception upon spurious attributes?");
+        } catch(NanoContainerMarkupException ex) {
+            //ok?
+        }
+    }
+
+    public void testWithDynamicClassPathThatDoesNotExist() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        try {
+            Reader script = new StringReader(
+                                             "container {\n" +
+                                             "  classPathElement(:path => 'this/path/does/not/exist.jar')\n" +
+                                             "  component(:class => \"FooBar\")\n" +
+                                             "}");
+
+            buildContainer(script, parent, ASSEMBLY_SCOPE);
+            fail("should have barfed with bad path exception");
+        } catch(NanoContainerMarkupException e) {
+            // excpected
+        }
+
+    }
+
+    public void testWithDynamicClassPath() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        Reader script = new StringReader(
+            "TestHelper = org.nanocontainer.TestHelper\n"
+            + "testCompJar = TestHelper.getTestCompJarFile()\n"
+            + "compJarPath = testCompJar.getCanonicalPath()\n"
+            + "container {\n"
+            + "  classPathElement(:path => compJarPath)\n"
+            + "  component(:class => \"TestComp\")\n"
+            + "}" );
+
+        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
+
+        assertEquals(1, pico.getComponentInstances().size());
+        assertEquals("TestComp", pico.getComponentInstances().get(0).getClass()
+            .getName());
+    }
+
+    public void testWithDynamicClassPathWithPermissions() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        Reader script = new StringReader(
+            "TestHelper = org.nanocontainer.TestHelper\n" +
+            "SocketPermission = java.net.SocketPermission\n"
+            + "testCompJar = TestHelper.getTestCompJarFile()\n"
+            + "compJarPath = testCompJar.getCanonicalPath()\n"
+            + "container {\n"
+            + "  classPathElement(:path => compJarPath) {\n"
+            + "    grant(:perm => SocketPermission.new('google.com','connect'))\n"
+            + "  }\n"
+            + "  component(:class => \"TestComp\")\n"
+            + "}" );
+
+        MutablePicoContainer pico = (MutablePicoContainer) buildContainer(script, parent, ASSEMBLY_SCOPE);
+
+        assertEquals(1, pico.getComponentInstances().size());
+        // can't actually test the permission under JUNIT control. We're just
+        // testing the syntax here.
+    }
+
+    public void testGrantPermissionInWrongPlace() {
+        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer();
+        try {
+            Reader script = new StringReader(
+                "TestHelper = org.nanocontainer.TestHelper\n" +
+                "SocketPermission = java.net.SocketPermission\n" +
+                "testCompJar = TestHelper.getTestCompJarFile()\n" +
+                "container {\n" +
+                "  grant(:perm => SocketPermission.new('google.com','connect'))\n" +
+                "}");
+
+            buildContainer(script, parent, ASSEMBLY_SCOPE);
+            fail("should barf with [Don't know how to create a 'grant' child] exception");
+        } catch(PicoCompositionException e) {
+            String message = e.getCause().getMessage();
+            assertNotNull(message);
+            assertTrue(message.contains("undefined method `grant' for #<Nano::Container:"));
+        }
+
+    }
+
+
+    public void testWithParentClassPathPropagatesWithNoParentContainer() throws IOException {
+        File testCompJar = TestHelper.getTestCompJarFile();
+
+        URLClassLoader classLoader = new URLClassLoader(new URL[]{testCompJar.toURL()},
+                                                        this.getClass().getClassLoader());
+        Class testComp = null;
+
+        try {
+            testComp = classLoader.loadClass("TestComp");
+        } catch(ClassNotFoundException ex) {
+            fail("Unable to load test component from the jar using a url classloader");
+        }
+        Reader script = new StringReader(
+            "container(:parent => $parent) {\n"
+            + "  component(:class => \"TestComp\")\n"
+            + "}");
+
+        PicoContainer pico = buildContainer(new JRubyContainerBuilder(script, classLoader), null, null);
+        assertNotNull(pico);
+        Object testCompInstance = pico.getComponentInstance(testComp.getName());
+        assertSame(testCompInstance.getClass(), testComp);
+
+    }
+
+//    public void testExceptionThrownWhenParentAttributeDefinedWithinChild() {
+//        DefaultNanoPicoContainer parent = new DefaultNanoPicoContainer(new SetterInjectionComponentAdapterFactory() );
+//        Reader script = new StringReader("" +
+//                "package org.nanocontainer.testmodel\n" +
+//                "nano = new GroovyNodeBuilder().container() {\n" +
+//                "    component(A)\n" +
+//                "    container(parent:parent) {\n" +
+//                "         component(B)\n" +
+//                "    }\n" +
+//                "}\n");
+//
+//        try {
+//            buildContainer(script, parent, ASSEMBLY_SCOPE);
+//            fail("NanoContainerMarkupException should have been thrown.");
+//        } catch (NanoContainerMarkupException ignore) {
+//            // ignore
+//        }
+//    }
+
+    private PicoContainer buildContainer(Reader script, PicoContainer parent, Object scope) {
+        return buildContainer(new JRubyContainerBuilder(script, getClass().getClassLoader()), parent, scope);
+    }
+}

Property changes: java/nanocontainer/trunk/container-jython

Name: svn:ignore
   - 
target
   + 
target
cachedir


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise