You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/08/07 15:01:28 UTC

svn commit: r683606 - in /directory/shared/branches/bigbang/ldap/src: main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java

Author: elecharny
Date: Thu Aug  7 06:01:27 2008
New Revision: 683606

URL: http://svn.apache.org/viewvc?rev=683606&view=rev
Log:
Fixed DIRSHARED-17.
Added 56 tests to cover all the cases

Modified:
    directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java
    directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java

Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java?rev=683606&r1=683605&r2=683606&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapURL.java Thu Aug  7 06:01:27 2008
@@ -563,7 +563,8 @@
      */
     private int parseHostPort( char[] chars, int pos )
     {
-
+        int hostPos = pos;
+        
         if ( ( pos = parseHost( chars, pos ) ) == -1 )
         {
             return -1;
@@ -572,6 +573,12 @@
         // We may have a port.
         if ( StringTools.isCharASCII( chars, pos, ':' ) )
         {
+            if ( pos == hostPos )
+            {
+                // We should not have a port if we have no host
+                return -1;
+            }
+            
             pos++;
         }
         else
@@ -995,10 +1002,14 @@
         }
         else if ( StringTools.isCharASCII( chars, pos, '?' ) )
         {
-
             // An empty scope. This is valid
             return pos;
         }
+        else if ( pos == chars.length )
+        {
+            // An empty scope at the end of the URL. This is valid
+            return pos;
+        }
 
         // The scope is not one of "one", "sub" or "base". It's an error
         return -1;
@@ -1318,8 +1329,15 @@
                                     isFirst = false;
                                 }
 
-                                sb.append( urlEncode( key, false ) ).append( '=' ).append(
-                                    urlEncode( criticalExtensions.get( key ), true ) );
+                                sb.append( urlEncode( key, false ) );
+                                
+                                String value = criticalExtensions.get( key );
+                                
+                                if ( value != null )
+                                {
+                                    sb.append( '=' ).append(
+                                    urlEncode( value, true ) );
+                                }
                             }
                         }
                     }

Modified: directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java?rev=683606&r1=683605&r2=683606&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java (original)
+++ directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/codec/util/LdapUrlTest.java Thu Aug  7 06:01:27 2008
@@ -32,6 +32,7 @@
 import org.apache.directory.shared.ldap.codec.util.LdapURL;
 import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.junit.Test;
 
 
 /**
@@ -787,4 +788,1203 @@
         Assert.assertEquals( "ldap:///dc=example,dc=com", url.toString() );
     }
 
-}
+    
+    /**
+     * test a LdapURL without a scheme
+     *
+     */
+    @Test
+    public void testLdapURLNoScheme()
+    {
+        try
+        {
+            new LdapURL( "/ou=system" );
+            fail();
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            assertTrue( true );
+        }
+    }
+
+
+    /**
+     * test a LdapURL without a host but with a DN
+     *
+     */
+    @Test
+    public void testLdapURLNoHostDN()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap:///ou=system" );
+            
+            assertEquals( "ldap:///ou=system", url.toString() );
+            
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a host, no port, and a DN
+     *
+     */
+    @Test
+    public void testLdapURLHostNoPortDN()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost/ou=system" );
+            
+            assertEquals( "ldap://localhost/ou=system", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+    
+    /**
+     * test a LdapURL with no host, a port, and a DN
+     *
+     */
+    @Test
+    public void testLdapURLNoHostPortDN()
+    {
+        try
+        {
+            new LdapURL( "ldap://:123/ou=system" );
+            
+            fail();
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            assertTrue( true );
+        }
+    }
+
+    
+    /**
+     * test a LdapURL with no DN
+     *
+     */
+    @Test
+    public void testLdapURLNoDN()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN and no attributes 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrs()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes and no scope 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, no scope and no filter 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScopeNoFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/???" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+    
+    
+    /**
+     * test a LdapURL with no DN and attributes
+     *
+     */
+    @Test
+    public void testLdapURLDN()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system" );
+            
+            assertEquals( "ldap://localhost:123/ou=system", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+    
+    /**
+     * test a LdapURL with a DN and attributes
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrs()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?ou,dc,cn" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?ou,dc,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN and attributes
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrs()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?ou,dc,cn" );
+            
+            assertEquals( "ldap://localhost:123/?ou,dc,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes an scope
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??sub" );
+            
+            assertEquals( "ldap://localhost:123/??sub", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes an scope base
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeBase()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??base" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes an default scope
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsDefaultScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes an scope
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??sub" );
+            
+            assertEquals( "ldap://localhost:123/ou=system??sub", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes an scope base
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeBase()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??base" );
+            
+            assertEquals( "ldap://localhost:123/ou=system", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes an default scope
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsDefaultScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??" );
+            
+            assertEquals( "ldap://localhost:123/ou=system", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes an scope
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?ou,cn?sub" );
+            
+            assertEquals( "ldap://localhost:123/?ou,cn?sub", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes an scope base
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeBase()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?ou,cn?base" );
+            
+            assertEquals( "ldap://localhost:123/?ou,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes an default scope
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsDefaultScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?ou,cn?" );
+            
+            assertEquals( "ldap://localhost:123/?ou,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes an scope
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?ou,cn?sub" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?ou,cn?sub", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes an scope base
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeBase()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?ou,cn?base" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?ou,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes an default scope
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsDefaultScope()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?ou,cn?" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?ou,cn", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, no scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/???(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/???(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, no scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsNoScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system???(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system???(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, no scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsNoScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,ou,dc??(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/?cn,ou,dc??(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??sub?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/??sub?(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a base scope, and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeBaseFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??base?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/???(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,ou,dc?sub?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/?cn,ou,dc?sub?(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a base scope, and filter
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeBaseFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,ou,dc?base?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/?cn,ou,dc??(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??sub?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system??sub?(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a base scope, and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeBaseFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??base?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system???(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, no scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsNoScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,dc,ou??(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,dc,ou??(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a scope and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?sub?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc?sub?(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a base scope, and filter
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeBaseFilter()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?base?(cn=test)" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc??(cn=test)", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, no scope, no filter and no extension 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScopeNoFilterNoExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/????" );
+            
+            assertEquals( "ldap://localhost:123/", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, no scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/????!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/????!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, no scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsNoScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/???(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/???(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??sub??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/??sub??!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a base scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeBaseNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??base??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/????!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??sub?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/??sub?(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, no attributes, a base scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNNoAttrsScopeBaseFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/??base?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/???(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, no scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsNoScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou???!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou???!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, no scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsNoScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou??(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou??(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou?sub??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou?sub??!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a base scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeBaseNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou?base??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou???!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou?sub?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou?sub?(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with no DN, some attributes, a base scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLNoDNAttrsScopeBaseFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/?cn,dc,ou?base?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/?cn,dc,ou??(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, no scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsNoScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system????!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system????!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, no scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsNoScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system???(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system???(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??sub??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system??sub??!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a base scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeBaseNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??base??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system????!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??sub?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system??sub?(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, no attributes, a base scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNNoAttrsScopeBaseFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system??base?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system???(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, no scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsNoScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc???!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc???!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, no scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsNoScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc??(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc??(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?sub??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc?sub??!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a base scope, no filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeBaseNoFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?base??!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc???!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?sub?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc?sub?(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+
+
+    /**
+     * test a LdapURL with a DN, some attributes, a base scope, a filter and some extensions 
+     *
+     */
+    @Test
+    public void testLdapURLDNAttrsScopeBaseFilterExtension()
+    {
+        try
+        {
+            LdapURL url = new LdapURL( "ldap://localhost:123/ou=system?cn,ou,dc?base?(cn=test)?!a=b,!c" );
+            
+            assertEquals( "ldap://localhost:123/ou=system?cn,ou,dc??(cn=test)?!a=b,!c", url.toString() );
+        }
+        catch ( LdapURLEncodingException luee )
+        {
+            fail();
+        }
+    }
+}
\ No newline at end of file