You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gh...@apache.org on 2006/04/27 01:26:01 UTC

svn commit: r397337 [8/11] - in /incubator/harmony/enhanced/classlib/trunk/modules/jndi: make/common/ src/test/java/com/sun/jndi/url/dir2/ src/test/java/com/sun/jndi/url/nntp/ src/test/java/jndiproperties/ src/test/java/org/ src/test/java/org/apache/ s...

Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/DirectoryManagerTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/DirectoryManagerTest.java?rev=397337&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/DirectoryManagerTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/DirectoryManagerTest.java Wed Apr 26 16:25:54 2006
@@ -0,0 +1,1451 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.harmony.jndi.tests.javax.naming.spi;
+
+import java.util.Hashtable;
+
+import javax.naming.CompositeName;
+import javax.naming.Context;
+import javax.naming.InvalidNameException;
+import javax.naming.Name;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.naming.Referenceable;
+import javax.naming.StringRefAddr;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.spi.DirStateFactory;
+import javax.naming.spi.DirectoryManager;
+
+import junit.framework.TestCase;
+import org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockContext;
+import org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirContext2;
+import org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirContext3;
+import org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest.MockRefAddr;
+import org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest.MockReferenceable;
+import org.apache.harmony.jndi.tests.javax.naming.util.Log;
+import com.sun.jndi.url.dir2.dir2URLContextFactory;
+
+
+public class DirectoryManagerTest extends TestCase {
+    /*
+     * -------------------------------------------------------------------
+     * Instance variables (Should be private)
+     * -------------------------------------------------------------------
+     */
+    private static Log log = new Log(DirectoryManagerTest.class);
+
+    /*
+     * @see TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        Hashtable env = new Hashtable();
+        env.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        // env.put(
+        // Context.INITIAL_CONTEXT_FACTORY,
+        // "dazzle.jndi.testing.spi.DazzleContextFactory");
+        NamingManagerTest.writeProviderResource(
+                MockDirContext2.class.getName(), env);
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    /*
+     * -------------------------------------------------------------------
+     * Methods
+     * -------------------------------------------------------------------
+     */
+    // public void testDefaultConstructor() {
+    // log.setMethod("testDefaultConstructor()");
+    // // for coverage only, no meaning!
+    // try {
+    // DirectoryManager manager = new DirectoryManager();
+    // } catch (Throwable t) {
+    // }
+    // }
+    /*
+     * ------------------------------------------------------- test
+     * getObjectInstance -------------------------------------------------------
+     */
+
+    /**
+     * When no factory builder is set and the fed object is Reference with a
+     * valid factory name which works properly. Should return an object
+     * successfully.
+     * 
+     * Try the same when the fed object is Referenceable.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceValidFactory()
+            throws NamingException {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceValidFactory()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        Reference r = new Reference(null,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory", null);
+
+        Attributes a = new BasicAttributes();
+        assertGetObjectResult(r, null, null, env, a);
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        assertGetObjectResult(mr, null, null, env, a);
+    }
+
+    /**
+     * @param r
+     * @param object
+     * @param object2
+     * @param env
+     * @param a
+     * @return
+     */
+    private void assertGetObjectResult(Object o, Name n, Context c,
+            Hashtable h, Attributes a) throws NamingException {
+        Object obj = null;
+        try {
+            obj = (Object) DirectoryManager.getObjectInstance(o, n, c, h, a);
+        } catch (Exception e) {
+            log.log(e);
+            fail();
+        }
+
+        Hashtable t = (Hashtable) obj;
+        if (o instanceof Referenceable) {
+            assertSame(t.get("o"), ((Referenceable) o).getReference());
+        } else {
+            assertSame(t.get("o"), o);
+        }
+        assertSame(t.get("n"), n);
+        assertSame(t.get("c"), c);
+        assertSame(t.get("h"), h);
+        assertSame(t.get("a"), a);
+
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with an
+     * invalid factory name. Should return the original object.
+     * 
+     * Try the same when the fed object is Referenceable.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceInvalidFactory()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceInvalidFactory()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        Reference r = new Reference(null, "junk.factory", null);
+        Attributes a = new BasicAttributes();
+        Object obj = DirectoryManager.getObjectInstance(r, null, null, env, a);
+        assertSame(r, obj);
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        obj = DirectoryManager.getObjectInstance(mr, null, null, env, a);
+        assertSame(mr, obj);
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with a
+     * valid factory name but the factory fails to create an object. Should
+     * throw the exception.
+     * 
+     * Try the same when the fed object is Referenceable.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceException()
+            throws Exception {
+        log.setMethod("testGetObjectInstance_NoBuilder_ReferenceException()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        Reference r = new Reference(null,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory", null);
+        NamingManagerTest.indicateNullPointerException(env);
+        Attributes a = new BasicAttributes();
+        try {
+            Object obj = DirectoryManager.getObjectInstance(r, null, null, env,
+                    a);
+            fail("Should throw NullPointerException.");
+        } catch (NullPointerException e) {
+            // log.log(e);
+        }
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        NamingManagerTest.indicateNamingException(env);
+        try {
+            Object obj = DirectoryManager.getObjectInstance(mr, null, null,
+                    env, a);
+            fail("Should throw NamingException.");
+        } catch (NamingException e) {
+            // log.log(e);
+        }
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with a
+     * valid factory name but the factory returns null. Should return null.
+     * 
+     * Try the same when the fed object is Referenceable.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceReturnNull()
+            throws Exception {
+        log.setMethod("testGetObjectInstance_NoBuilder_ReferenceReturnNull()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        Reference r = new Reference(null,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory", null);
+        NamingManagerTest.indicateReturnNull(env);
+        Attributes a = new BasicAttributes();
+        Object obj = DirectoryManager.getObjectInstance(r, null, null, env, a);
+        assertNull(obj);
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        NamingManagerTest.indicateReturnNull(env);
+        obj = DirectoryManager.getObjectInstance(mr, null, null, env, a);
+        assertNull(obj);
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with no
+     * factory name, and there are one MockRefAddr which contains a valid URL
+     * and another MockRefAddr whose type is null. Should return the original
+     * object o.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceNullTypedNonStrAddr()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceNullTypedNonStrAddr()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.URL_PKG_PREFIXES, "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+        Reference r = new Reference(null);
+        MockRefAddr mockAddr = new MockRefAddr("URL", "dire://www.apache.org/");
+        r.add(mockAddr);
+        mockAddr = new MockRefAddr(null, "dire://www.apache.org/");
+        r.add(mockAddr);
+        Attributes a = new BasicAttributes();
+
+        Object obj = DirectoryManager.getObjectInstance(r, new CompositeName(
+                "compositename"), new MockContext(new Hashtable()), env, a);
+        assertSame(obj, r);
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with no
+     * factory name, and there is a StringRefAddr whose type is null. Should
+     * throw NullPointerException.
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceNullTypedStrAddr()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceNullTypedStrAddr()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.URL_PKG_PREFIXES, "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+        Reference r = new Reference(null);
+        StringRefAddr nullTypeAddr = new StringRefAddr(null,
+                "dire://www.apache.org/");
+        r.add(nullTypeAddr);
+        Attributes a = new BasicAttributes();
+
+        try {
+            Object obj = DirectoryManager.getObjectInstance(r,
+                    new CompositeName("compositename"), new MockContext(
+                            new Hashtable()), env, a);
+            fail("Should throw NullPointerException.");
+        } catch (NullPointerException e) {
+            // log.log(e);
+        }
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        try {
+            Object obj = DirectoryManager.getObjectInstance(mr,
+                    new CompositeName("compositename"), new MockContext(
+                            new Hashtable()), env, a);
+            fail("Should throw NullPointerException.");
+        } catch (NullPointerException e) {
+            // log.log(e);
+        }
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with no
+     * factory name, and there is a StringRefAddr with a valid URL which can be
+     * used to create the object successfully. Before this URL, there are
+     * several "invalid" URLs: one without scheme, and next without corresponding
+     * factory, and a third one corresponding to a factory that returns null.
+     * The types of these StringRefAddr is "URL". Before all these
+     * StringRefAddr, there is a StringRefAddr whose type is neither "URL" nor
+     * "url" but contains a vaild URL. Should return an object corresponding to
+     * the URL mentioned in the beginning successfully.
+     * 
+     * Try the same when the fed object is Referenceable. Replace the address
+     * type "URL" with "url" and try again.
+     * 
+     * URL_PKG_PREFIXES is contained in the fed environment properties.
+     */
+    private void myTestGetObjectInstance_NoBuilder_ReferenceValidURL(String url)
+            throws Exception {
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.URL_PKG_PREFIXES, "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+        Reference r = new Reference(null);
+        // invalid StringRefAddr with wrong type
+        StringRefAddr notUrlTypeAddr = new StringRefAddr("uurl",
+                "dire://www.apache.org/");
+        r.add(notUrlTypeAddr);
+        // invalid StringRefAddr without scheme
+        StringRefAddr noSchemeAddr = new StringRefAddr("URL", "www.apache.org");
+        r.add(noSchemeAddr);
+        // invalid StringRefAddr without relevant ObjectFactory
+        StringRefAddr noFactorySchemeAddr = new StringRefAddr(url,
+                "httpss://www.apache.org/");
+        r.add(noFactorySchemeAddr);
+        // invalid StringRefAddr without ObjectFactory which getObjectInstance()
+        // method return null
+        StringRefAddr returnNullFactoryAddr = new StringRefAddr(url,
+                "news://www.apache.org/");
+        r.add(returnNullFactoryAddr);
+        // valid StringRefAddr, should call its related
+        // DirObjectFactory.getObjectInstance(Object o,Name n,Context
+        // c,Hashtable h,Attributes a)
+        // the class of DirObjectFactory should be
+        // javax.naming.spi.mock.dire.direURLContextFactory
+        StringRefAddr validFactoryAddr = new StringRefAddr(url,
+                "dire://www.apache.org/");
+        r.add(validFactoryAddr);
+        Attributes a = new BasicAttributes();
+        Hashtable temp = new Hashtable();
+        temp.put("mockkey", "mockobj");
+        MockContext c = new MockContext(temp);
+        Name n = new CompositeName("compositename");
+
+        MockDirContext3 ctx = (MockDirContext3) DirectoryManager
+                .getObjectInstance(r, n, c, env, a);
+        log.log(ctx.getEnvironment().toString());
+        boolean equals = ctx.parameterEquals(validFactoryAddr.getContent(), n,
+                c, env, null); // it's NOT a!!
+        assertTrue(equals);
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        ctx = (MockDirContext3) DirectoryManager.getObjectInstance(mr, n, c,
+                env, a);
+        log.log(ctx.getEnvironment().toString());
+        assertTrue(ctx.parameterEquals(validFactoryAddr.getContent(), n, c,
+                env, null)); // it's NOT a!!
+    }
+
+    /*
+     * pls. refer to comments of
+     * myTestGetObjectInstance_NoBuilder_ReferenceValidURL(String)
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceValidURL_URL()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceValidURL_URL()");
+        myTestGetObjectInstance_NoBuilder_ReferenceValidURL("URL");
+    }
+
+    public void testGetObjectInstance_NoBuilder_ReferenceValidURL_url()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceValidURL_url()");
+        myTestGetObjectInstance_NoBuilder_ReferenceValidURL("url");
+    }
+
+    /**
+     * Test the default URL context factory: com.sun.jndi.url
+     */
+    public void testGetObjectInstance_NoBuilder_ReferenceDefaultURL()
+            throws Exception {
+        log.setMethod("testGetObjectInstance_NoBuilder_ReferenceDefaultURL()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.URL_PKG_PREFIXES, "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+
+        Reference r = new Reference(null);
+        StringRefAddr addr = new StringRefAddr("url", "dir2://www.apache.org/");
+        r.add(addr);
+        Attributes a = new BasicAttributes();
+
+        dir2URLContextFactory.MockObject obj = (dir2URLContextFactory.MockObject) DirectoryManager
+                .getObjectInstance(r, new CompositeName("compositename"), null,
+                        env, a);
+
+        assertEquals(obj,
+                new dir2URLContextFactory.MockObject(addr.getContent(),
+                        new CompositeName("compositename"), null, env, a));
+
+        // test Referenceable
+        MockReferenceable mr = new MockReferenceable(r);
+        obj = (dir2URLContextFactory.MockObject) DirectoryManager
+                .getObjectInstance(mr.getReference(), new CompositeName(
+                        "compositename"), null, env, a);
+
+        assertEquals(obj,
+                new dir2URLContextFactory.MockObject(addr.getContent(),
+                        new CompositeName("compositename"), null, env, a));
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with no
+     * factory name, and there is a StringRefAddr with a valid URL which results
+     * in a NullPointerException when creating an object. After this URL there
+     * is another URL which can be used to create the object successfully. The
+     * types of these StringRefAddr is "URL". Should throw a
+     * NullPointerException.
+     * 
+     * Try the same when the fed object is Referenceable. Replace the address
+     * type "URL" with "url" and try again.
+     * 
+     * URL_PKG_PREFIXES is contained in the fed context's provider resource
+     * file.
+     * 
+     */
+    private void myTestGetObjectInstance_NoBuilder_ReferenceExceptionalURL(
+            String url) throws Exception {
+        try {
+            Hashtable env = new Hashtable();
+
+            Reference r = new Reference(null);
+            StringRefAddr exceptionalFactoryAddr = new StringRefAddr(url,
+                    "http://www.apache.org/");
+            r.add(exceptionalFactoryAddr);
+            StringRefAddr validFactoryAddr = new StringRefAddr(url,
+                    "dire://www.apache.org/");
+            r.add(validFactoryAddr);
+
+            Hashtable ctxEnv = new Hashtable();
+            /*
+             * ctxEnv.put( Context.INITIAL_CONTEXT_FACTORY,
+             * "dazzle.jndi.testing.spi.DazzleContextFactory");
+             */
+            // ctxEnv.put(Context.URL_PKG_PREFIXES,
+            // "tests.api.javax.naming.spi.mock");
+            Attributes a = new BasicAttributes();
+            env
+                    .put(Context.URL_PKG_PREFIXES,
+                            "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+            // NamingManagerTest.writeProviderResource(
+            // "tests.api.javax.naming.spi.dummy",
+            // ctxEnv);
+            try {
+                NamingManagerTest.indicateNullPointerException(env);
+                Object ctx = DirectoryManager.getObjectInstance(r,
+                        new CompositeName("compositename"), new MockContext(
+                                ctxEnv), env, a);
+                fail("Should throw NamingException.");
+            } catch (NamingException e) {
+                assertTrue(e.getRootCause() instanceof NullPointerException);
+            }
+
+            // test Referenceable
+            MockReferenceable mr = new MockReferenceable(r);
+            try {
+                NamingManagerTest.indicateNamingException(env);
+                MockContext ctx = (MockContext) DirectoryManager
+                        .getObjectInstance(mr, new CompositeName(
+                                "compositename"), new MockContext(ctxEnv), env,
+                                a);
+
+                fail("Should throw NamingException.");
+            } catch (NamingException e) {
+                assertNull(e.getRootCause());
+            }
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    private void myTestGetObjectInstance_NoBuilder_ReferenceExceptionalURL2(
+            String url) throws Exception {
+        try {
+            Hashtable env = new Hashtable();
+
+            Reference r = new Reference(null);
+            StringRefAddr exceptionalFactoryAddr = new StringRefAddr(url,
+                    "http://www.apache.org/");
+            r.add(exceptionalFactoryAddr);
+            StringRefAddr validFactoryAddr = new StringRefAddr(url,
+                    "dire://www.apache.org/");
+            r.add(validFactoryAddr);
+
+            Hashtable ctxEnv = new Hashtable();
+
+            ctxEnv.put(Context.INITIAL_CONTEXT_FACTORY,
+                    "dazzle.jndi.testing.spi.DazzleContextFactory");
+
+            ctxEnv.put(Context.URL_PKG_PREFIXES,
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", ctxEnv);
+            Attributes a = new BasicAttributes();
+            try {
+                NamingManagerTest.indicateNullPointerException(ctxEnv);
+                Object ctx = DirectoryManager.getObjectInstance(r,
+                        new CompositeName("compositename"), new MockContext(
+                                ctxEnv), ctxEnv, a);
+                fail("Should throw NamingException.");
+            } catch (NamingException e) {
+                assertTrue(e.getRootCause() instanceof NullPointerException);
+            }
+
+            // test Referenceable
+            MockReferenceable mr = new MockReferenceable(r);
+            try {
+                NamingManagerTest.indicateNamingException(ctxEnv);
+                MockContext ctx = (MockContext) DirectoryManager
+                        .getObjectInstance(mr, new CompositeName(
+                                "compositename"), new MockContext(ctxEnv),
+                                ctxEnv, a);
+                fail("Should throw NamingException.");
+            } catch (NamingException e) {
+                assertNull(e.getRootCause());
+            }
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    public void testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_URL()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_URL()");
+        myTestGetObjectInstance_NoBuilder_ReferenceExceptionalURL("URL");
+    }
+
+    public void testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_URL2()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_URL2()");
+        myTestGetObjectInstance_NoBuilder_ReferenceExceptionalURL2("URL");
+    }
+
+    public void testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_url()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_ReferenceExceptionalURL_url()");
+        myTestGetObjectInstance_NoBuilder_ReferenceExceptionalURL("url");
+    }
+
+    /**
+     * When no factory builder is set and the fed object is neither Reference
+     * nor Referenceable (e.g., String), and the environment properties contains
+     * a vaild factory name, while the fed context's provider resource file also
+     * contains a vaild factory name. Should return an object created by the
+     * factory specified by the fed environment properties.
+     */
+    public void testGetObjectInstance_NoBuilder_NotRef_ValidFactory()
+            throws NamingException, Throwable {
+        log.setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactory()");
+        try {
+            log
+                    .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactory");
+            Hashtable env = new Hashtable();
+            env.put(Context.INITIAL_CONTEXT_FACTORY,
+                    "dazzle.jndi.testing.spi.DazzleContextFactory");
+            env.put(Context.OBJECT_FACTORIES,
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory");
+
+            Hashtable ctxEnv = new Hashtable();
+
+            ctxEnv
+                    .put(Context.OBJECT_FACTORIES,
+                            "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactoryNoException");
+            ctxEnv.put(Context.URL_PKG_PREFIXES,
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", ctxEnv);
+            Context ctx = new MockContext(ctxEnv);
+            Attributes a = new BasicAttributes();
+            assertGetObjectResult("Junk", new CompositeName("compositeName"),
+                    ctx, env, a);
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    /**
+     * When no factory builder is set and the fed object is Reference with no
+     * factory name but contains several "invalid" URLs: one without scheme, and
+     * next without corresponding factory, and a third one corresponding to a
+     * factory that returns null. The types of these StringRefAddr is "url".
+     * Before all these StringRefAddr, there is is a MockRefAddr whose type is
+     * also "url" and contains a valid URL which can be used to create an object
+     * successfully, and a StringRefAddr whose type is neither "URL" nor "url"
+     * but contains a vaild URL. And fed context's provider resource file does
+     * contain a vaild factory name following another factory that returns null.
+     * Should return an object created by the factory specified by the fed
+     * context's environment properties.
+     * 
+     */
+    public void testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull()
+            throws Throwable {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull()");
+        try {
+            log
+                    .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull");
+            Hashtable ctxEnv = new Hashtable();
+            ctxEnv
+                    .put(
+                            Context.OBJECT_FACTORIES,
+                            ":org.apache.harmony.jndi.tests.javax.naming.spi.mock.news.newsURLContextFactory:"
+                                    + "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory");
+            ctxEnv.put(Context.URL_PKG_PREFIXES,
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", ctxEnv);
+            Attributes a = new BasicAttributes();
+            Context ctx = new MockContext(ctxEnv);
+
+            Hashtable env = new Hashtable();
+            /*
+             * env.put( Context.INITIAL_CONTEXT_FACTORY,
+             * "dazzle.jndi.testing.spi.DazzleContextFactory");
+             */
+            env
+                    .put(Context.URL_PKG_PREFIXES,
+                            "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+
+            Reference r = new Reference("");
+            MockRefAddr mockAddr = new MockRefAddr("URL",
+                    "dire://www.apache.org/");
+            r.add(mockAddr);
+            StringRefAddr notUrlTypeAddr = new StringRefAddr("uurl",
+                    "dire://www.apache.org/");
+            r.add(notUrlTypeAddr);
+            StringRefAddr noSchemeAddr = new StringRefAddr("URL",
+                    "www.apache.org");
+            r.add(noSchemeAddr);
+            StringRefAddr noFactorySchemeAddr = new StringRefAddr("url",
+                    "httpss://www.apache.org/");
+            r.add(noFactorySchemeAddr);
+            StringRefAddr returnNullFactoryAddr = new StringRefAddr("url",
+                    "news://www.apache.org/");
+            r.add(returnNullFactoryAddr);
+
+            assertSame(r, DirectoryManager.getObjectInstance(r,
+                    new CompositeName("compositename"), ctx, env, a));
+            // assertGetObjectResult(
+            // r,
+            // new CompositeName("compositename"),
+            // ctx,
+            // env,
+            // a);
+        } catch (Throwable t) {
+            log.log("throwable occured", t);
+            throw t;
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    public void testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_1()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_1()");
+        try {
+            log
+                    .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_1");
+            Hashtable ctxEnv = new Hashtable();
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", ctxEnv);
+
+            Context ctx = new MockContext(ctxEnv);
+
+            Hashtable env = new Hashtable();
+            env
+                    .put(Context.URL_PKG_PREFIXES,
+                            "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+            env.put(Context.OBJECT_FACTORIES,
+                    ":org.apache.harmony.jndi.tests.javax.naming.spi.mock.news.newsURLContextFactory");
+
+            Reference r = new Reference("");
+            MockRefAddr mockAddr = new MockRefAddr("URL",
+                    "dire://www.apache.org/");
+            r.add(mockAddr);
+            StringRefAddr notUrlTypeAddr = new StringRefAddr("uurl",
+                    "dire://www.apache.org/");
+            r.add(notUrlTypeAddr);
+            StringRefAddr noSchemeAddr = new StringRefAddr("URL",
+                    "www.apache.org");
+            r.add(noSchemeAddr);
+            StringRefAddr noFactorySchemeAddr = new StringRefAddr("url",
+                    "httpss://www.apache.org/");
+            r.add(noFactorySchemeAddr);
+            StringRefAddr returnNullFactoryAddr = new StringRefAddr("url",
+                    "news://www.apache.org/");
+            r.add(returnNullFactoryAddr);
+            Attributes a = new BasicAttributes();
+
+            Object obj = DirectoryManager.getObjectInstance(r,
+                    new CompositeName("compositename"), ctx, env, a);
+            assertEquals(r, obj);
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    public void testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_2()
+            throws InvalidNameException, Throwable {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_2()");
+        try {
+            log
+                    .setMethod("testGetObjectInstance_NoBuilder_NotRef_ValidFactoryWithNull_2");
+            Hashtable ctxEnv = new Hashtable();
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", ctxEnv);
+
+            DirContext ctx = new MockDirContext2(ctxEnv);
+
+            Hashtable env = new Hashtable();
+            env.put(Context.INITIAL_CONTEXT_FACTORY,
+                    "dazzle.jndi.testing.spi.DazzleContextFactory");
+            env
+                    .put(Context.URL_PKG_PREFIXES,
+                            "org.apache.harmony.jndi.tests.javax.naming.spi.mock");
+            env
+                    .put(
+                            Context.OBJECT_FACTORIES,
+                            ":org.apache.harmony.jndi.tests.javax.naming.spi.mock.news.newsURLContextFactory"
+                                    + ":org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory");
+
+            Reference r = new Reference("");
+            MockRefAddr mockAddr = new MockRefAddr("URL",
+                    "dire://www.apache.org/");
+            r.add(mockAddr);
+            StringRefAddr notUrlTypeAddr = new StringRefAddr("uurl",
+                    "dire://www.apache.org/");
+            r.add(notUrlTypeAddr);
+            StringRefAddr noSchemeAddr = new StringRefAddr("URL",
+                    "www.apache.org");
+            r.add(noSchemeAddr);
+            StringRefAddr noFactorySchemeAddr = new StringRefAddr("url",
+                    "httpss://www.apache.org/");
+            r.add(noFactorySchemeAddr);
+            StringRefAddr returnNullFactoryAddr = new StringRefAddr("url",
+                    "news://www.apache.org/");
+            r.add(returnNullFactoryAddr);
+            Attributes a = new BasicAttributes();
+            assertGetObjectResult(r, new CompositeName("compositename"), ctx,
+                    env, a);
+        } finally {
+            NamingManagerTest.writeProviderResource(
+                    "org.apache.harmony.jndi.tests.javax.naming.spi.dummy", new Hashtable());
+        }
+    }
+
+    /**
+     * When no factory builder is set, and all fed parameters are null. Should
+     * return the original object.
+     */
+    public void testGetObjectInstance_NoBuilder_AllNull() throws Exception {
+        log.setMethod("testGetObjectInstance_NoBuilder_AllNull()");
+        Object obj = DirectoryManager.getObjectInstance(null, null, null, null,
+                null);
+        assertNull(obj);
+
+        Object originalObject = "original object";
+        obj = DirectoryManager.getObjectInstance(originalObject, null, null,
+                null, null);
+        assertSame(obj, originalObject);
+    }
+
+    /**
+     * When no factory builder is set, and all fed parameters are null except
+     * the original object and the environment properties. The environment
+     * properties contains an invalid factory name, and a valid factory name
+     * that follows. Should return an object created by the valid factory.
+     */
+    public void testGetObjectInstance_NoBuilder_NotRef_InvalidFactory()
+            throws Throwable {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_InvalidFactory()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.OBJECT_FACTORIES, "junk.factory:"
+                + "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory");
+
+        assertGetObjectResult(null, null, null, env, null);
+
+        assertGetObjectResult("abc", null, null, env, null);
+    }
+
+    /**
+     * When no factory builder is set, and all fed parameters are null except
+     * the original object and the environment properties. The environment
+     * properties contains a valid factory that throws an exception, and a valid
+     * factory name that follows. Should throw an exception.
+     */
+    public void testGetObjectInstance_NoBuilder_NotRef_ExceptionalFactory()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_ExceptionalFactory()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env
+                .put(
+                        Context.OBJECT_FACTORIES,
+                        "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactory:"
+                                + "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirObjectFactoryNoException");
+        Attributes a = new BasicAttributes();
+
+        try {
+            NamingManagerTest.indicateNullPointerException(env);
+            Object obj = DirectoryManager.getObjectInstance(null, null, null,
+                    env, a);
+            fail("Should throw NullPointerException.");
+        } catch (NullPointerException e) {
+        }
+
+        try {
+            NamingManagerTest.indicateNamingException(env);
+            Object obj = DirectoryManager.getObjectInstance(null, null, null,
+                    env, a);
+            fail("Should throw NamingException.");
+        } catch (NamingException e) {
+        }
+
+    }
+
+    /**
+     * When no factory builder is set, and all fed parameters are null except
+     * the original object and the environment properties. The environment
+     * properties contains a valid factory that returns null. Should return the
+     * original object.
+     */
+    public void testGetObjectInstance_NoBuilder_NotRef_FactoryWithNull()
+            throws Exception {
+        log
+                .setMethod("testGetObjectInstance_NoBuilder_NotRef_FactoryWithNull()");
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "dazzle.jndi.testing.spi.DazzleContextFactory");
+        env.put(Context.OBJECT_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.news.newsURLContextFactory");
+        Attributes a = new BasicAttributes();
+
+        Object obj = DirectoryManager.getObjectInstance(null, null, null, env,
+                a);
+        assertNull(obj);
+
+        Object obj2 = new Object();
+        obj = DirectoryManager.getObjectInstance(obj2, null, null, env, a);
+        assertSame(obj2, obj);
+    }
+
+    /*
+     * ------------------------------------------------------- test
+     * getStateToBind -------------------------------------------------------
+     */
+
+    public void testGetStateToBind_null_null_null_null_null()
+            throws NamingException {
+        log.setMethod("testGetStateToBind_null_null_null_null_null()");
+        Object o = null;
+        Name n = null;
+        Context c = null;
+        Hashtable h = null;
+        Attributes a = null;
+        DirStateFactory.Result r = DirectoryManager.getStateToBind(o, n, c, h,
+                a);
+        assertNull(r.getObject());
+        assertNull(r.getAttributes());
+    }
+
+    public void testGetStateToBind_null_null_null_null_attr()
+            throws NamingException {
+        log.setMethod("testGetStateToBind_null_null_null_null_attr()");
+        Object o = null;
+        Name n = null;
+        Context c = null;
+        Hashtable h = null;
+        Attributes a = new BasicAttributes();
+        DirStateFactory.Result r = DirectoryManager.getStateToBind(o, n, c, h,
+                a);
+        assertNull(r.getObject());
+        assertSame(a, r.getAttributes());
+    }
+
+    public void testGetStateToBind_null_null_null_hash_null() {
+        log.setMethod("testGetStateToBind_null_null_null_hash_null()");
+        Object o = null;
+        Name n = null;
+        Context c = null;
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (Throwable e) {
+            fail();
+        }
+    }
+
+    public void testGetStateToBind_null_null_null_hash_attr() {
+        log.setMethod("testGetStateToBind_null_null_null_hash_attr()");
+        Object o = null;
+        Name n = null;
+        Context c = null;
+        Hashtable h = new Hashtable();
+        Attributes a = new BasicAttributes();
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (Throwable e) {
+            fail();
+        }
+    }
+
+    private void assertGetStateResults(Object o, Name n, Context c,
+            Hashtable h, Attributes a) throws NamingException {
+        DirStateFactory.Result r = DirectoryManager.getStateToBind(o, n, c, h,
+                a);
+        Hashtable t = (Hashtable) r.getObject();
+        assertEquals(a, r.getAttributes());
+        assertEquals(t.get("o"), o);
+        assertEquals(t.get("n"), n);
+        assertEquals(t.get("c"), c);
+        assertEquals(t.get("h"), h);
+        assertEquals(t.get("a"), a);
+    }
+
+    // public void testGetStateToBind_null_null_ctx_null_null() {
+    // log.setMethod("testGetStateToBind_null_null_ctx_null_null()");
+    // Object o = null;
+    // Name n = null;
+    // Context c = new MockDirContext2(new Hashtable());
+    // Hashtable h = null;
+    // Attributes a = null;
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_null_null_ctx_null_attr() {
+    // log.setMethod("testGetStateToBind_null_null_ctx_null_attr()");
+    // Object o = null;
+    // Name n = null;
+    // Context c = new MockDirContext2(new Hashtable());
+    // Hashtable h = null;
+    // Attributes a = new BasicAttributes();
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_null_null_ctx_empty_null() {
+    // log.setMethod("testGetStateToBind_null_null_ctx_empty_null()");
+    // Object o = null;
+    // Name n = null;
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = null;
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_null_null_ctx_empty_attr() {
+    // log.setMethod("testGetStateToBind_null_null_ctx_empty_attr()");
+    // Object o = null;
+    // Name n = null;
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = new BasicAttributes();
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    public void testGetStateToBind_null_name_ctx_hash_null() {
+        log.setMethod("testGetStateToBind_null_name_ctx_hash_null()");
+        Object o = null;
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_null_name_ctx_hash_attr() {
+        log.setMethod("testGetStateToBind_null_name_ctx_hash_attr()");
+        Object o = null;
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = new BasicAttributes();
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    // public void testGetStateToBind_obj_name_ctx_empty_null() {
+    // log.setMethod("testGetStateToBind_obj_name_ctx_empty_null()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = null;
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_obj_name_ctx_empty_attr() {
+    // log.setMethod("testGetStateToBind_obj_name_ctx_empty_attr()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = new BasicAttributes();
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_obj_name_ctx_empty2_null() {
+    // log.setMethod("testGetStateToBind_obj_name_ctx_empty2_null()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockContext(new Hashtable()); // no state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = null;
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_obj_name_ctx_empty2_attr() {
+    // log.setMethod("testGetStateToBind_obj_name_ctx_empty2_attr()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockContext(new Hashtable()); // no state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = new BasicAttributes();
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    public void testGetStateToBind_obj_name_ctx_hash_null() {
+        log.setMethod("testGetStateToBind_obj_name_ctx_hash_null()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_obj_name_ctx_hash_attr() {
+        log.setMethod("testGetStateToBind_obj_name_ctx_hash_attr()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = new BasicAttributes();
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_f1BadClassName_Success() {
+        log.setMethod("testGetStateToBind_f1BadClassName_Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockContext(new Hashtable()); // no state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES, "bad.class.Name" + ":"
+                + "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    // public void testGetStateToBind_f2Success() {
+    // log.setMethod("testGetStateToBind_f2Success()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = null;
+    // try {
+    // Object ro = DirectoryManager.getStateToBind(o, n, c, h, a);
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    // public void testGetStateToBind_f1BadClassName_f2Success() {
+    // log.setMethod("testGetStateToBind_f1BadClassName_f2Success()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockDirContext2(new Hashtable());
+    // // lead to state factory
+    // Hashtable h = new Hashtable();
+    // h.put(Context.STATE_FACTORIES, "bad.class.Name");
+    // Attributes a = null;
+    // try {
+    // Object ro = DirectoryManager.getStateToBind(o, n, c, h, a);
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    public void testGetStateToBind_f1NamingException_f2Success() {
+        log.setMethod("testGetStateToBind_f1NamingException_f2Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateNamingException(h);
+        try {
+            assertGetStateResults(o, n, c, h, a);
+            fail();
+        } catch (NamingException e) {
+            assertTrue(e.getMessage().indexOf("Simulated") >= 0);
+        }
+    }
+
+    public void testGetStateToBind_f1RuntimeException_f2Success() {
+        log.setMethod("testGetStateToBind_f1RuntimeException_f2Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateRuntimeException(h);
+
+        try {
+            assertGetStateResults(o, n, c, h, a);
+            fail();
+        } catch (RuntimeException e) {
+            assertTrue(e.getMessage().indexOf("Simulated") >= 0);
+        } catch (NamingException e) {
+            fail("should throw runtime exception");
+        }
+    }
+
+    public void testGetStateToBind_f1ReturnNull_Success() {
+        log.setMethod("testGetStateToBind_f1ReturnNull_Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockContext(new Hashtable()); // no state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h
+                .put(
+                        Context.STATE_FACTORIES,
+                        "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory"
+                                + ":"
+                                + "org.apache.harmony.jndi.tests.javax.naming.spi.mock.SuccessMockDirStateFactory");
+        NamingManagerTest.indicateReturnNull(h);
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_f1ReturnNull_f2Success() {
+        log.setMethod("testGetStateToBind_f1ReturnNull_f2Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateReturnNull(h);
+
+        try {
+            Object ro = DirectoryManager.getStateToBind(o, n, c, h, a);
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_f1Success_f2Success() {
+        log.setMethod("testGetStateToBind_f1Success_f2Success()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockDirContext2(new Hashtable());
+        // lead to state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.SuccessMockDirStateFactory");
+        NamingManagerTest.indicateRuntimeException(h);
+
+        try {
+            assertGetStateResults(o, n, c, h, a);
+        } catch (NamingException e) {
+            fail("NamingException occured");
+        }
+    }
+
+    public void testGetStateToBind_f1ReturnNull() throws NamingException {
+        log.setMethod("testGetStateToBind_f1ReturnNull()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockContext(new Hashtable()); // no state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateReturnNull(h);
+        DirStateFactory.Result result = DirectoryManager.getStateToBind(o, n,
+                c, h, a);
+        assertGetStateResults(o, n, c, h, a);
+    }
+
+    // public void testGetStateToBind_f1BadClassName() {
+    // log.setMethod("testGetStateToBind_f1BadClassName()");
+    // Object o = "object";
+    // Name n = new CompositeName();
+    // Context c = new MockContext(new Hashtable()); // no state factory
+    // Hashtable h = new Hashtable();
+    // Attributes a = null;
+    // h.put(Context.STATE_FACTORIES, "bad.class.Name");
+    //
+    // try {
+    // assertGetStateResults(o, n, c, h, a);
+    // } catch (NamingException e) {
+    // fail("NamingException occured");
+    // }
+    // }
+
+    public void testGetStateToBind_f1NamingException() {
+        log.setMethod("testGetStateToBind_f1NamingException()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockContext(new Hashtable()); // no state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateNamingException(h);
+
+        try {
+            Object r = DirectoryManager.getStateToBind(o, n, c, h, a);
+            fail();
+        } catch (NamingException e) {
+            assertTrue(e.getMessage().indexOf("Simulated") >= 0);
+        }
+    }
+
+    public void testGetStateToBind_f1RuntimeException() {
+        log.setMethod("testGetStateToBind_f1RuntimeException()");
+        Object o = "object";
+        Name n = new CompositeName();
+        Context c = new MockContext(new Hashtable()); // no state factory
+        Hashtable h = new Hashtable();
+        Attributes a = null;
+        h.put(Context.STATE_FACTORIES,
+                "org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockDirStateFactory");
+        NamingManagerTest.indicateRuntimeException(h);
+
+        try {
+            Object r = DirectoryManager.getStateToBind(o, n, c, h, a);
+            fail("should throw RuntimeException");
+        } catch (RuntimeException e) {
+            assertTrue(e.getMessage().indexOf("Simulated") >= 0);
+        } catch (Throwable e) {
+            fail("should throw RuntimeException");
+        }
+    }
+
+    // public void testGetContinuationContext_MockDirContext2_null_null_null() {
+    // log.setMethod(
+    // "testGetContinuationContext_MockDirContext2_null_null_null()");
+    //
+    // CannotProceedException cpe = new CannotProceedException();
+    // Object resolvedObj = new MockDirContext2(new Hashtable());
+    // cpe.setResolvedObj(resolvedObj);
+    //
+    // try {
+    // DirContext r = DirectoryManager.getContinuationDirContext(cpe);
+    // log.log(r.toString());
+    // assertSame(cpe, cpe.getEnvironment().get(DirectoryManager.CPE));
+    // assertSame(resolvedObj, r);
+    // } catch (Throwable t) {
+    // logThrowable(t);
+    // fail();
+    // }
+    // }
+    //
+    // public void testGetContinuationContext_null_null_null_h() {
+    // log.setMethod("testGetContinuationContext_null_null_null_h()");
+    // Hashtable h = new Hashtable();
+    // CannotProceedException cpe = new CannotProceedException();
+    // h.put(
+    // Context.OBJECT_FACTORIES,
+    // "tests.api.javax.naming.mock.MockDirContextObjectFactory");
+    // cpe.setEnvironment(h);
+    // try {
+    // DirContext r = DirectoryManager.getContinuationDirContext(cpe);
+    // log.log(r.toString());
+    // assertSame(cpe, cpe.getEnvironment().get(DirectoryManager.CPE));
+    // assertSame(r, MockDirContextObjectFactory.DIR_CONTEXT);
+    // } catch (NamingException t) {
+    // logThrowable(t);
+    // }
+    // }
+    //
+    // public void testGetContinuationContext_null_null_null_null() {
+    // log.setMethod("testGetContinuationContext_null_null_null_null()");
+    // CannotProceedException cpe = new CannotProceedException();
+    // try {
+    // DirContext r = DirectoryManager.getContinuationDirContext(cpe);
+    // log.log(r.toString());
+    // } catch (NamingException t) {
+    // logThrowable(t);
+    // fail();
+    // }
+    // }
+    //
+    // public void testGetContinuationContext_null_null_null_wrongh() {
+    // log.setMethod("testGetContinuationContext_null_null_null_wrongh()");
+    // CannotProceedException cpe = new CannotProceedException();
+    // Hashtable h = new Hashtable();
+    // h.put(
+    // Context.OBJECT_FACTORIES,
+    // "tests.api.javax.naming.spi.NamingManagerTest$MockObjectFactory");
+    // cpe.setEnvironment(h);
+    // try {
+    // Context r = DirectoryManager.getContinuationDirContext(cpe);
+    // fail();
+    // } catch (NamingException e) {
+    // logThrowable(e);
+    // }
+    // }
+    //
+    // public void testGetContinuationContext_null_null_null_badnameh() {
+    // log.setMethod("testGetContinuationContext_null_null_null_badnameh()");
+    // CannotProceedException cpe = new CannotProceedException();
+    // Hashtable h = new Hashtable();
+    // h.put(Context.OBJECT_FACTORIES, "bad name: javax.naming.spi.Test");
+    // cpe.setEnvironment(h);
+    // try {
+    // Context r = DirectoryManager.getContinuationDirContext(cpe);
+    // fail();
+    // } catch (NamingException e) {
+    // logThrowable(e);
+    // }
+    // }
+
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/DirectoryManagerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/MockResolver.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/MockResolver.java?rev=397337&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/MockResolver.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/MockResolver.java Wed Apr 26 16:25:54 2006
@@ -0,0 +1,46 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.jndi.tests.javax.naming.spi;
+
+import javax.naming.Name;
+import javax.naming.NamingException;
+import javax.naming.spi.ResolveResult;
+import javax.naming.spi.Resolver;
+
+public class MockResolver implements Resolver {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.naming.spi.Resolver#resolveToClass(javax.naming.Name,
+	 *      java.lang.Class)
+	 */
+	public ResolveResult resolveToClass(Name n, Class c) throws NamingException {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.naming.spi.Resolver#resolveToClass(java.lang.String,
+	 *      java.lang.Class)
+	 */
+	public ResolveResult resolveToClass(String n, Class c)
+			throws NamingException {
+		return null;
+	}
+
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/MockResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/NamingManagerBuilderTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/NamingManagerBuilderTest.java?rev=397337&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/NamingManagerBuilderTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/NamingManagerBuilderTest.java Wed Apr 26 16:25:54 2006
@@ -0,0 +1,593 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.jndi.tests.javax.naming.spi;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Hashtable;
+
+import javax.naming.CompositeName;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.naming.spi.InitialContextFactoryBuilder;
+import javax.naming.spi.NamingManager;
+import javax.naming.spi.ObjectFactoryBuilder;
+
+import junit.framework.TestCase;
+import org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockInitialContextFactoryBuilder;
+import org.apache.harmony.jndi.tests.javax.naming.spi.mock.MockContext;
+import org.apache.harmony.jndi.tests.javax.naming.util.Log;
+
+public class NamingManagerBuilderTest extends TestCase {
+
+	/*
+	 * ------------------------------------------------------------------- 
+	 * Class variables
+	 * -------------------------------------------------------------------
+	 */
+
+	static Log log = new Log(NamingManagerBuilderTest.class);
+
+	/**
+	 * Constructor for NamingManagerBuilderTest.
+	 * 
+	 * @param arg0
+	 */
+	public NamingManagerBuilderTest(String arg0) {
+		super(arg0);
+	}
+
+	/*
+	 * -------------------------------------------------------------------
+	 * Methods
+	 * -------------------------------------------------------------------
+	 */
+
+	private void invokeMyTestMethod(String methodName) {
+		log.setMethod(methodName);
+		try {
+			Method m = this.getClass().getMethod(methodName, new Class[0]);
+			m.invoke(this, new Object[0]);
+			// log.log("Succeeded!");
+		} catch (Throwable t) {
+			String errMsg = t.getMessage();
+
+			if (t instanceof InvocationTargetException) {
+				errMsg = ((InvocationTargetException) t).getTargetException()
+						.getMessage();
+			}
+
+			fail("Failed: " + t.getClass().getName() + " - " + errMsg);
+		}
+	}
+
+	/**
+	 * Test the normal condition when factory builder is properly set.
+	 */
+	public void myTestGetInitialContext_HasBuilder_Normal()
+			throws NamingException {
+		log.setMethod("myTestGetInitialContext_HasBuilder_Normal");
+
+		Context context = NamingManager.getInitialContext(null);
+		assertTrue(context instanceof MockContext);
+		assertEquals(context, new MockContext(null));
+
+		Hashtable env = new Hashtable();
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		context = NamingManager.getInitialContext(env);
+		assertTrue(context instanceof MockContext);
+		assertEquals(context, new MockContext(env));
+	}
+
+	/**
+	 * Test the behavior when factory builder throws NullPointerException.
+	 */
+	public void myTestGetInitialContext_HasBuilder_BuilderNullPointerException()
+			throws NamingException {
+		log
+				.setMethod("myTestGetInitialContext_HasBuilder_BuilderNullPointerException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNullPointerException(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		try {
+			Context context = NamingManager.getInitialContext(env);
+			fail("Should throw NullPointerException.");
+		} catch (NullPointerException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder throws NamingException.
+	 */
+	public void myTestGetInitialContext_HasBuilder_BuilderNamingException()
+			throws NamingException {
+		log
+				.setMethod("myTestGetInitialContext_HasBuilder_BuilderNamingException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNamingException(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		try {
+			Context context = NamingManager.getInitialContext(env);
+			fail("Should throw NamingException.");
+		} catch (NamingException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory throws RuntimeException.
+	 */
+	public void myTestGetInitialContext_HasBuilder_FactoryRuntimeException()
+			throws NamingException {
+		log
+				.setMethod("myTestGetInitialContext_HasBuilder_FactoryRuntimeException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateRuntimeException(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		try {
+			Context context = NamingManager.getInitialContext(env);
+			fail("Should throw RuntimeException.");
+		} catch (RuntimeException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory throws NamingException.
+	 */
+	public void myTestGetInitialContext_HasBuilder_FactoryNamingException()
+			throws NamingException {
+		log
+				.setMethod("myTestGetInitialContext_HasBuilder_FactoryNamingException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNamingException(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		try {
+			Context context = NamingManager.getInitialContext(env);
+			fail("Should throw NamingException.");
+		} catch (NamingException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder is set but the factory builder
+	 * returns null.
+	 */
+	public void myTestGetInitialContext_HasBuilder_BuilderReturnNull()
+			throws NamingException {
+		log.setMethod("myTestGetInitialContext_HasBuilder_BuilderReturnNull");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateReturnNull(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		try {
+			Context context = NamingManager.getInitialContext(env);
+			fail("Should throw NullPointerException.");
+		} catch (NullPointerException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder is set but the factory returns
+	 * null.
+	 */
+	public void myTestGetInitialContext_HasBuilder_FactoryReturnNull()
+			throws NamingException {
+		log.setMethod("myTestGetInitialContext_HasBuilder_FactoryReturnNull");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateReturnNull(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		Context context = NamingManager.getInitialContext(env);
+		assertNull(context);
+	}
+
+	/**
+	 * Before the initial context factory builder is set.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_NotSet() {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_NotSet");
+		assertFalse(NamingManager.hasInitialContextFactoryBuilder());
+	}
+
+	/**
+	 * Set the initial context factory builder to null.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_SetNull()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_SetNull");
+		NamingManager.setInitialContextFactoryBuilder(null);
+		assertFalse(NamingManager.hasInitialContextFactoryBuilder());
+	}
+
+	/**
+	 * Set the initial context factory builder to a mock instance.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_SetNormal()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_SetNormal");
+		InitialContextFactoryBuilder contextFactoryBuilder = MockInitialContextFactoryBuilder
+				.getInstance();
+		NamingManager.setInitialContextFactoryBuilder(contextFactoryBuilder);
+		assertTrue(NamingManager.hasInitialContextFactoryBuilder());
+	}
+
+	/**
+	 * Reset the initial context factory builder to another mock instance.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_ResetNormal()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_ResetNormal");
+		try {
+			NamingManager
+					.setInitialContextFactoryBuilder(new MockInitialContextFactoryBuilder());
+			fail("Reset initialContextFactoryBuilder is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	/**
+	 * Reset the initial context factory builder to the same mock instance.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_ResetSame()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_ResetSame");
+		try {
+			NamingManager
+					.setInitialContextFactoryBuilder(MockInitialContextFactoryBuilder
+							.getInstance());
+			fail("Reset initialContextFactoryBuilder is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	/**
+	 * Reset the initial context factory builder to null.
+	 * 
+	 */
+	public void myTestSetInitialContextFactoryBuilder_ResetNull()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_ResetNull");
+		try {
+			NamingManager.setInitialContextFactoryBuilder(null);
+			fail("Reset initialContextFactoryBuilder to null is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	/**
+	 * Test the normal condition when factory builder is properly set.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_Normal() throws Exception {
+		log.setMethod("myTestGetObjectInstance_HasBuilder_Normal");
+		Object obj = NamingManager.getObjectInstance(null, null, null, null);
+		assertEquals(new NamingManagerTest.MockObject(null, null, null, null),
+				obj);
+
+		obj = NamingManager.getObjectInstance("String", null, null, null);
+		assertEquals(new NamingManagerTest.MockObject("String", null, null,
+				null), obj);
+
+		Reference r = new Reference(
+				null,
+				"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException",
+				null);
+		obj = NamingManager.getObjectInstance(r, null, null, null);
+		assertEquals(new NamingManagerTest.MockObject(r, null, null, null), obj);
+
+		obj = NamingManager.getObjectInstance(null, new CompositeName(
+				"compositename"), null, null);
+		assertEquals(new NamingManagerTest.MockObject(null, new CompositeName(
+				"compositename"), null, null), obj);
+
+		NamingManagerTest.MockContext cxt = new NamingManagerTest.MockContext(
+				null);
+		obj = NamingManager.getObjectInstance(null, null, cxt, null);
+		assertEquals(new NamingManagerTest.MockObject(null, null, cxt, null),
+				obj);
+
+		Hashtable env = new Hashtable();
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		obj = NamingManager.getObjectInstance(null, null, null, env);
+		assertEquals(new NamingManagerTest.MockObject(null, null, null, env),
+				obj);
+	}
+
+	/**
+	 * Test the behavior when factory builder throws NullPointerException.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_BuilderNullPointerException()
+			throws Exception {
+		log
+				.setMethod("myTestGetObjectInstance_HasBuilder_BuilderNullPointerException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNullPointerException(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		try {
+			Object obj = NamingManager.getObjectInstance(null, null, null, env);
+			fail("Should throw NullPointerException.");
+		} catch (NullPointerException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder throws NamingException.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_BuilderNamingException()
+			throws Exception {
+		log
+				.setMethod("myTestGetObjectInstance_HasBuilder_BuilderNamingException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNamingException(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		try {
+			Object obj = NamingManager.getObjectInstance(null, null, null, env);
+			fail("Should throw NamingException.");
+		} catch (NamingException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory throws RuntimeException.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_FactoryRuntimeException()
+			throws Exception {
+		log
+				.setMethod("myTestGetObjectInstance_HasBuilder_FactoryRuntimeException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateRuntimeException(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		try {
+			Object obj = NamingManager.getObjectInstance(null, null, null, env);
+			fail("Should throw RuntimeException.");
+		} catch (RuntimeException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory throws NamingException.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_FactoryNamingException()
+			throws Exception {
+		log
+				.setMethod("myTestGetObjectInstance_HasBuilder_FactoryNamingException");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateNamingException(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		try {
+			Object obj = NamingManager.getObjectInstance(null, null, null, env);
+			fail("Should throw NamingException.");
+		} catch (NamingException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder is set but the factory builder
+	 * returns null.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_BuilderReturnNull()
+			throws Exception {
+		log.setMethod("myTestGetObjectInstance_HasBuilder_BuilderReturnNull");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateReturnNull(env, 1);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		try {
+			Object obj = NamingManager.getObjectInstance(null, null, null, env);
+			fail("Should throw NullPointerException.");
+		} catch (NullPointerException e) {
+			// log.log(e);
+		}
+	}
+
+	/**
+	 * Test the behavior when factory builder is set but the factory returns
+	 * null.
+	 */
+	public void myTestGetObjectInstance_HasBuilder_FactoryReturnNull()
+			throws Exception {
+		log.setMethod("myTestGetObjectInstance_HasBuilder_FactoryReturnNull");
+		Hashtable env = new Hashtable();
+		NamingManagerTest.indicateReturnNull(env, 2);
+		env.put(Context.INITIAL_CONTEXT_FACTORY,
+				"dazzle.jndi.testing.spi.DazzleContextFactory");
+		env
+				.put(Context.STATE_FACTORIES,
+						"org.apache.harmony.jndi.tests.javax.naming.spi.NamingManagerTest$MockObjectFactoryNoException");
+		Object obj = NamingManager.getObjectInstance("string", null, null, env);
+		assertNull(obj);
+	}
+
+	/**
+	 * Set the object factory builder to null.
+	 * 
+	 */
+	public void myTestSetObjectFactoryBuilder_SetNull() throws NamingException {
+		log.setMethod("myTestSetObjectFactoryBuilder_SetNull");
+		NamingManager.setObjectFactoryBuilder(null);
+	}
+
+	/**
+	 * Set the object factory builder to a mock instance.
+	 * 
+	 */
+	public void myTestSetObjectFactoryBuilder_SetNormal()
+			throws NamingException {
+		log.setMethod("myTestSetInitialContextFactoryBuilder_SetNormal");
+		ObjectFactoryBuilder objectFactoryBuilder = NamingManagerTest.MockObjectFactoryBuilder
+				.getInstance();
+		NamingManager.setObjectFactoryBuilder(objectFactoryBuilder);
+	}
+
+	/**
+	 * Reset the object factory builder to another mock instance.
+	 * 
+	 */
+	public void myTestSetObjectFactoryBuilder_ResetNormal()
+			throws NamingException {
+		log.setMethod("myTestSetObjectFactoryBuilder_ResetNormal");
+		try {
+			NamingManager
+					.setObjectFactoryBuilder(new NamingManagerTest.MockObjectFactoryBuilder());
+			fail("Reset ObjectFactoryBuilder is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	/**
+	 * Reset the object factory builder to the same mock instance.
+	 * 
+	 */
+	public void myTestSetObjectFactoryBuilder_ResetSame()
+			throws NamingException {
+		log.setMethod("myTestSetObjectFactoryBuilder_ResetSame");
+		try {
+			NamingManager
+					.setObjectFactoryBuilder(NamingManagerTest.MockObjectFactoryBuilder
+							.getInstance());
+			fail("Reset ObjectFactoryBuilder is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	/**
+	 * Reset the object factory builder to null.
+	 * 
+	 */
+	public void myTestSetObjectFactoryBuilder_ResetNull()
+			throws NamingException {
+		log.setMethod("myTestSetObjectFactoryBuilder_ResetNull");
+		try {
+			NamingManager.setObjectFactoryBuilder(null);
+			fail("Reset ObjectFactoryBuilder to null is forbidden!");
+		} catch (IllegalStateException e) {
+		}
+	}
+
+	public void testSetInitialContextFactoryBuilder_AfterSet() {
+		// not set builder yet
+		// myTestSetInitialContextFactoryBuilder_NotSet();
+		invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_NotSet");
+
+		// set builder as mock builder instance
+		invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_SetNull");
+		// myTestSetInitialContextFactoryBuilder_SetNormal();
+		invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_SetNormal");
+
+		// myTestGetInitialContext_HasBuilder_Normal();
+		invokeMyTestMethod("myTestGetInitialContext_HasBuilder_Normal");
+		// myTestGetInitialContext_HasBuilder_BuilderNullPointerException();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_BuilderNullPointerException");
+		// myTestGetInitialContext_HasBuilder_BuilderNamingException();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_BuilderNamingException");
+		// myTestGetInitialContext_HasBuilder_FactoryRuntimeException();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_FactoryRuntimeException");
+		// myTestGetInitialContext_HasBuilder_FactoryNamingException();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_FactoryNamingException");
+		// myTestGetInitialContext_HasBuilder_BuilderReturnNull();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_BuilderReturnNull");
+		// myTestGetInitialContext_HasBuilder_FactoryReturnNull();
+		// invokeMyTestMethod("myTestGetInitialContext_HasBuilder_FactoryReturnNull");
+
+		// try to reset builder to another instance
+		// myTestSetInitialContextFactoryBuilder_ResetNormal();
+		// invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_ResetNormal");
+
+		// try to reset builder to the same instance as before
+		// myTestSetInitialContextFactoryBuilder_ResetSame();
+		// invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_ResetSame");
+
+		// try to reset to null
+		// myTestSetInitialContextFactoryBuilder_ResetNull();
+		// invokeMyTestMethod("myTestSetInitialContextFactoryBuilder_ResetNull");
+	}
+
+	public void testSetObjectFactoryBuilder_AfterSet() {
+		// set builder as mock builder instance
+		invokeMyTestMethod("myTestSetObjectFactoryBuilder_SetNull");
+		// myTestSetObjectFactoryBuilder_SetNormal();
+		invokeMyTestMethod("myTestSetObjectFactoryBuilder_SetNormal");
+
+		// myTestGetObjectInstance_HasBuilder_Normal();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_Normal");
+		// myTestGetObjectInstance_HasBuilder_BuilderNullPointerException();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_BuilderNullPointerException");
+		// myTestGetObjectInstance_HasBuilder_BuilderNamingException();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_BuilderNamingException");
+		// myTestGetObjectInstance_HasBuilder_FactoryRuntimeException();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_FactoryRuntimeException");
+		// myTestGetObjectInstance_HasBuilder_FactoryNamingException();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_FactoryNamingException");
+		// myTestGetObjectInstance_HasBuilder_BuilderReturnNull();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_BuilderReturnNull");
+		// myTestGetObjectInstance_HasBuilder_FactoryReturnNull();
+		invokeMyTestMethod("myTestGetObjectInstance_HasBuilder_FactoryReturnNull");
+
+		// try to reset builder to another instance
+		// myTestSetObjectFactoryBuilder_ResetNormal();
+		invokeMyTestMethod("myTestSetObjectFactoryBuilder_ResetNormal");
+
+		// try to reset builder to the same instance as before
+		// myTestSetObjectFactoryBuilder_ResetSame();
+		invokeMyTestMethod("myTestSetObjectFactoryBuilder_ResetSame");
+
+		// try to reset to null
+		// myTestSetObjectFactoryBuilder_ResetNull();
+		invokeMyTestMethod("myTestSetObjectFactoryBuilder_ResetNull");
+	}
+
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/spi/NamingManagerBuilderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native