You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2014/05/21 22:45:09 UTC
svn commit: r1596674 - in /directory/shared/trunk:
integ/src/test/java/org/apache/directory/api/ldap/model/name/
ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/
ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/
Author: seelmann
Date: Wed May 21 20:45:09 2014
New Revision: 1596674
URL: http://svn.apache.org/r1596674
Log:
DIRAPI-192: Rdn.escapeValue() should not escape unicode characters
Also added Rdn(Ava) constructor.
Modified:
directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java
directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java
directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java
directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
Modified: directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java (original)
+++ directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java Wed May 21 20:45:09 2014
@@ -229,7 +229,7 @@ public class AvaTest
Ava ava = new Ava( "OU", "Exemple + Rdn\u00E4 " );
- if ( !"ou=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.getNormName() ) )
+ if ( !"ou=Exemple \\+ Rdn\u00E4\\ ".equals( ava.getNormName() ) )
{
errors = "\nAva.getNormName fails '" + ava.getNormName() + "'";
}
@@ -244,7 +244,7 @@ public class AvaTest
errors += "\nAva.getNormValue fails '" + ava.getNormValue().getString() + "'";
}
- if ( !"OU=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.getName() ) )
+ if ( !"OU=Exemple \\+ Rdn\u00E4\\ ".equals( ava.getName() ) )
{
errors += "\nAva.getUpName fails '" + ava.getName() + "'";
}
@@ -259,12 +259,12 @@ public class AvaTest
errors += "\nAva.getUpValue fails '" + ava.getValue() .getString() + "'";
}
- if ( !"ou=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.normalize() ) )
+ if ( !"ou=Exemple \\+ Rdn\u00E4\\ ".equals( ava.normalize() ) )
{
errors += "\nAva.normalize fails '" + ava.normalize() + "'";
}
- if ( !"OU=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.toString() ) )
+ if ( !"OU=Exemple \\+ Rdn\u00E4\\ ".equals( ava.toString() ) )
{
errors += "\nAva.toString fails '" + ava.toString() + "'";
}
@@ -284,7 +284,7 @@ public class AvaTest
Ava ava = new Ava( schemaManager, "OU", "Exemple + Rdn\u00E4 " );
- if ( !"2.5.4.11=exemple \\+ rdn\\C3\\A4".equals( ava.getNormName() ) )
+ if ( !"2.5.4.11=exemple \\+ rdn\u00E4".equals( ava.getNormName() ) )
{
errors = "\nAva.getNormName fails '" + ava.getNormName() + "'";
}
@@ -299,7 +299,7 @@ public class AvaTest
errors += "\nAva.getNormValue fails '" + ava.getNormValue().getString() + "'";
}
- if ( !"OU=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.getName() ) )
+ if ( !"OU=Exemple \\+ Rdn\u00E4\\ ".equals( ava.getName() ) )
{
errors += "\nAva.getUpName fails '" + ava.getName() + "'";
}
@@ -314,12 +314,12 @@ public class AvaTest
errors += "\nAva.getUpValue fails '" + ava.getValue().getString() + "'";
}
- if ( !"2.5.4.11=exemple \\+ rdn\\C3\\A4".equals( ava.normalize() ) )
+ if ( !"2.5.4.11=exemple \\+ rdn\u00E4".equals( ava.normalize() ) )
{
errors += "\nAva.normalize fails '" + ava.normalize() + "'";
}
- if ( !"OU=Exemple \\+ Rdn\\C3\\A4\\ ".equals( ava.toString() ) )
+ if ( !"OU=Exemple \\+ Rdn\u00E4\\ ".equals( ava.toString() ) )
{
errors += "\nAva.toString fails '" + ava.toString() + "'";
}
Modified: directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java (original)
+++ directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java Wed May 21 20:45:09 2014
@@ -294,7 +294,7 @@ public class DnTest
Dn dn = new Dn( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D" );
assertTrue( Dn.isValid( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D" ) );
- assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\\C4\\8D", dn.getNormName() );
+ assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\u010d", dn.getNormName() );
assertEquals( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D", dn.getName() );
}
@@ -308,7 +308,7 @@ public class DnTest
Dn dn = new Dn( "SN=Lu\\C4\\8Di\\C4\\87" );
assertTrue( Dn.isValid( "SN=Lu\\C4\\8Di\\C4\\87" ) );
- assertEquals( "sn=Lu\\C4\\8Di\\C4\\87", dn.getNormName() );
+ assertEquals( "sn=Lu\u010di\u0107", dn.getNormName() );
assertEquals( "SN=Lu\\C4\\8Di\\C4\\87", dn.getName() );
}
@@ -1235,7 +1235,7 @@ public class DnTest
Dn name = new Dn( dn );
assertEquals( dn, ( name ).getName() );
- assertEquals( "cn=Emmanuel L\\C3\\A9charny", ( name ).getNormName() );
+ assertEquals( "cn=Emmanuel L\u00e9charny", ( name ).getNormName() );
}
Modified: directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java (original)
+++ directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java Wed May 21 20:45:09 2014
@@ -61,7 +61,7 @@ public class RdnTest
errors += "\nRdn.getName fails '" + rdn.getName() + "'";
}
- if ( !"ou=Exemple \\+ Rdn\\C3\\A4\\ +cn=TEST" .equals( rdn.getNormName() ) )
+ if ( !"ou=Exemple \\+ Rdn\u00E4\\ +cn=TEST" .equals( rdn.getNormName() ) )
{
errors = "\nRdn.getNormName fails '" + rdn.getNormName() + "'";
}
@@ -117,7 +117,7 @@ public class RdnTest
errors += "\nRdn.getName fails '" + rdn.getName() + "'";
}
- if ( !"2.5.4.11=exemple \\+ rdn\\C3\\A4+2.5.4.3=test" .equals( rdn.getNormName() ) )
+ if ( !"2.5.4.11=exemple \\+ rdn\u00E4+2.5.4.3=test" .equals( rdn.getNormName() ) )
{
errors = "\nRdn.getNormName fails '" + rdn.getNormName() + "'";
}
Modified: directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java (original)
+++ directory/shared/trunk/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java Wed May 21 20:45:09 2014
@@ -236,7 +236,7 @@ public class SchemaAwareRdnTest
String rdn = Strings.utf8ToString( new byte[]
{ 'l', '=', '\\', ',', '\\', '=', '\\', '+', '\\', '<', '\\', '>', '#', '\\', ';', '\\', '\\', '\\', '"', '\\',
'C', '3', '\\', 'A', '9' } );
- assertEquals( "2.5.4.7=\\,\\=\\+\\<\\>#\\;\\\\\\\"\\C3\\A9", new Rdn( schemaManager, rdn ).getNormName() );
+ assertEquals( "2.5.4.7=\\,\\=\\+\\<\\>#\\;\\\\\\\"\u00e9", new Rdn( schemaManager, rdn ).getNormName() );
}
@@ -899,7 +899,7 @@ public class SchemaAwareRdnTest
{
// space doesn't need to be escaped in the middle of a string
assertEquals( "a b", Rdn.escapeValue( "a b" ) );
- assertEquals( "a b c", Rdn.escapeValue( "a b c" ) );
+ assertEquals( "ä b c", Rdn.escapeValue( "ä b c" ) );
assertEquals( "a b c d", Rdn.escapeValue( "a b c d" ) );
// space must be escaped at the beginning and the end of a string
@@ -919,6 +919,16 @@ public class SchemaAwareRdnTest
// hash must be escaped at the beginning of a string
assertEquals( "\\#a#b", Rdn.escapeValue( "#a#b" ) );
assertEquals( "\\##a#b", Rdn.escapeValue( "##a#b" ) );
+
+ // other characters that need to be escaped
+ // '"', '+', ',', ';', '<', '>', '\', the null (U+0000) character
+ assertEquals( "\\\"\\+\\,\\;\\<\\>\\\\\\00", Rdn.escapeValue( "\"+,;<>\\\u0000" ) );
+
+ // unicode characters don't need to be escaped
+ // \u00e9 - e with acute - 2 bytes in UTF-8
+ // \u20ac - Euro character - 3 bytes in UTF-8
+ // \uD83D\uDE08 - Smiley - 4 bytes in UTF-8
+ assertEquals( "\u00e9\u20AC\uD83D\uDE08", Rdn.escapeValue( "\u00e9\u20AC\uD83D\uDE08" ) );
}
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java Wed May 21 20:45:09 2014
@@ -332,6 +332,29 @@ public class Rdn implements Cloneable, E
}
+ public Rdn( SchemaManager schemaManager, Ava... avas ) throws LdapInvalidDnException
+ {
+ StringBuilder upName = new StringBuilder();
+ for ( int i = 0; i < avas.length; i++ )
+ {
+ if ( i > 0 )
+ {
+ upName.append( '+' );
+ }
+ addAVA( schemaManager, avas[i] );
+ upName.append( avas[i].getName() );
+ }
+ setUpName( upName.toString() );
+ normalize();
+ }
+
+
+ public Rdn( Ava... avas ) throws LdapInvalidDnException
+ {
+ this( null, avas );
+ }
+
+
/**
* Constructs an Rdn from the given rdn. The content of the rdn is simply
* copied into the newly created Rdn.
@@ -1287,116 +1310,107 @@ public class Rdn implements Cloneable, E
return "";
}
- byte[] bytes = Strings.getBytesUtf8( value );
- byte[] newBytes = new byte[bytes.length * 3];
+ char[] chars = value.toCharArray();
+ char[] newChars = new char[chars.length * 3];
int pos = 0;
- for ( int i = 0; i < bytes.length; i++ )
+ for ( int i = 0; i < chars.length; i++ )
{
- if ( ( bytes[i] & 0x0080 ) != 0 )
- {
- newBytes[pos++] = '\\';
- newBytes[pos++] = ( byte ) Strings.dumpHex( ( byte ) ( ( bytes[i] & 0x00F0 ) >> 4 ) );
- newBytes[pos++] = ( byte ) Strings.dumpHex( ( byte ) ( bytes[i] & 0x000F ) );
- }
- else
+ switch ( chars[i] )
{
- switch ( bytes[i] )
- {
- case ' ':
- if ( ( i > 0 ) && ( i < bytes.length - 1 ) )
- {
- newBytes[pos++] = bytes[i];
- }
- else
- {
- newBytes[pos++] = '\\';
- newBytes[pos++] = bytes[i];
- }
+ case ' ':
+ if ( ( i > 0 ) && ( i < chars.length - 1 ) )
+ {
+ newChars[pos++] = chars[i];
+ }
+ else
+ {
+ newChars[pos++] = '\\';
+ newChars[pos++] = chars[i];
+ }
- break;
+ break;
- case '#':
- if ( i != 0 )
- {
- newBytes[pos++] = bytes[i];
- }
- else
- {
- newBytes[pos++] = '\\';
- newBytes[pos++] = bytes[i];
- }
+ case '#':
+ if ( i != 0 )
+ {
+ newChars[pos++] = chars[i];
+ }
+ else
+ {
+ newChars[pos++] = '\\';
+ newChars[pos++] = chars[i];
+ }
- break;
+ break;
- case '"':
- case '+':
- case ',':
- case ';':
- case '=':
- case '<':
- case '>':
- case '\\':
- newBytes[pos++] = '\\';
- newBytes[pos++] = bytes[i];
- break;
-
- case 0x7F:
- newBytes[pos++] = '\\';
- newBytes[pos++] = '7';
- newBytes[pos++] = 'F';
- break;
-
- case 0x00:
- case 0x01:
- case 0x02:
- case 0x03:
- case 0x04:
- case 0x05:
- case 0x06:
- case 0x07:
- case 0x08:
- case 0x09:
- case 0x0A:
- case 0x0B:
- case 0x0C:
- case 0x0D:
- case 0x0E:
- case 0x0F:
- newBytes[pos++] = '\\';
- newBytes[pos++] = '0';
- newBytes[pos++] = ( byte ) Strings.dumpHex( ( byte ) ( bytes[i] & 0x0F ) );
- break;
-
- case 0x10:
- case 0x11:
- case 0x12:
- case 0x13:
- case 0x14:
- case 0x15:
- case 0x16:
- case 0x17:
- case 0x18:
- case 0x19:
- case 0x1A:
- case 0x1B:
- case 0x1C:
- case 0x1D:
- case 0x1E:
- case 0x1F:
- newBytes[pos++] = '\\';
- newBytes[pos++] = '1';
- newBytes[pos++] = ( byte ) Strings.dumpHex( ( byte ) ( bytes[i] & 0x0F ) );
- break;
-
- default:
- newBytes[pos++] = bytes[i];
- break;
- }
+ case '"':
+ case '+':
+ case ',':
+ case ';':
+ case '=':
+ case '<':
+ case '>':
+ case '\\':
+ newChars[pos++] = '\\';
+ newChars[pos++] = chars[i];
+ break;
+
+ case 0x7F:
+ newChars[pos++] = '\\';
+ newChars[pos++] = '7';
+ newChars[pos++] = 'F';
+ break;
+
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ case 0x04:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ case 0x08:
+ case 0x09:
+ case 0x0A:
+ case 0x0B:
+ case 0x0C:
+ case 0x0D:
+ case 0x0E:
+ case 0x0F:
+ newChars[pos++] = '\\';
+ newChars[pos++] = '0';
+ newChars[pos++] = Strings.dumpHex( ( byte ) ( chars[i] & 0x0F ) );
+ break;
+
+ case 0x10:
+ case 0x11:
+ case 0x12:
+ case 0x13:
+ case 0x14:
+ case 0x15:
+ case 0x16:
+ case 0x17:
+ case 0x18:
+ case 0x19:
+ case 0x1A:
+ case 0x1B:
+ case 0x1C:
+ case 0x1D:
+ case 0x1E:
+ case 0x1F:
+ newChars[pos++] = '\\';
+ newChars[pos++] = '1';
+ newChars[pos++] = Strings.dumpHex( ( byte ) ( chars[i] & 0x0F ) );
+ break;
+
+ default:
+ newChars[pos++] = chars[i];
+ break;
}
}
- return new String( newBytes, 0, pos );
+ return new String( newChars, 0, pos );
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java Wed May 21 20:45:09 2014
@@ -191,11 +191,11 @@ public class DnParserTest
public void testLdapDNPairCharAttributeValue() throws LdapException
{
Dn dn = new Dn( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C3\\A9" );
- assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\\C3\\A9", dn.getNormName() );
+ assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\u00e9", dn.getNormName() );
assertEquals( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C3\\A9", dn.getName() );
dn = new Dn( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\u00e9" );
- assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\\C3\\A9", dn.getNormName() );
+ assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\u00e9", dn.getNormName() );
assertEquals( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\u00e9", dn.getName() );
}
@@ -282,8 +282,8 @@ public class DnParserTest
Dn name = new Dn( dn );
- assertEquals( dn, name.getName() );
- assertEquals( "cn=Emmanuel L\\C3\\A9charny", name.getNormName() );
+ assertEquals( "CN = Emmanuel L\u00e9charny", name.getName() );
+ assertEquals( "cn=Emmanuel L\u00e9charny", name.getNormName() );
}
@@ -295,8 +295,8 @@ public class DnParserTest
Dn name = new Dn( dn );
- assertEquals( dn, name.getName() );
- assertEquals( "c=E\\C3\\A9c", name.getNormName() );
+ assertEquals( "C= E\u00e9c", name.getName() );
+ assertEquals( "c=E\u00e9c", name.getNormName() );
}
@@ -547,7 +547,7 @@ public class DnParserTest
String result = new Dn( cn ).toString();
- assertEquals( "cn=\u0130\u0131\u015E\u015F\u00D6\u00F6\u00DC\u00FC\u011E\u011F", result.toString() );
+ assertEquals( "cn=\u0130\u0131\u015E\u015F\u00D6\u00F6\u00DC\u00FC\u011E\u011F", result );
}
@@ -557,9 +557,10 @@ public class DnParserTest
String cn = new String( new byte[]
{ 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, 0x5C, 0x32, 0x42 }, "UTF-8" );
- String result = new Dn( cn ).getNormName();
+ Dn dn = new Dn( cn );
- assertEquals( "cn=\\C3\\84\\+", result );
+ assertEquals( "cn=\u00c4\\2B", dn.getName() );
+ assertEquals( "cn=\u00c4\\+", dn.getNormName() );
}
@@ -569,9 +570,10 @@ public class DnParserTest
String cn = new String( new byte[]
{ 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0xA4, '\\', '+' }, "UTF-8" );
- String result = new Dn( cn ).toString();
+ Dn dn = new Dn( cn );
- assertEquals( "cn=\u00E4\\+", result );
+ assertEquals( "cn=\u00E4\\+", dn.getName() );
+ assertEquals( "cn=\u00E4\\+", dn.getNormName() );
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java Wed May 21 20:45:09 2014
@@ -412,8 +412,8 @@ public class FastDnParserTest
Dn name = FastDnParser.parse( dn );
- assertEquals( dn, name.getName() );
- assertEquals( "cn=Emmanuel L\\C3\\A9charny", name.getNormName() );
+ assertEquals( "CN = Emmanuel L\u00e9charny", name.getName() );
+ assertEquals( "cn=Emmanuel L\u00e9charny", name.getNormName() );
}
@@ -425,8 +425,8 @@ public class FastDnParserTest
Dn name = FastDnParser.parse( dn );
- assertEquals( dn, name.getName() );
- assertEquals( "c=E\\C3\\A9c", name.getNormName() );
+ assertEquals( "C= E\u00e9c", name.getName() );
+ assertEquals( "c=E\u00e9c", name.getNormName() );
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java?rev=1596674&r1=1596673&r2=1596674&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java Wed May 21 20:45:09 2014
@@ -228,7 +228,7 @@ public class RdnTest
String rdn = Strings.utf8ToString( new byte[]
{ 'a', '=', '\\', ',', '\\', '=', '\\', '+', '\\', '<', '\\', '>', '#', '\\', ';', '\\', '\\', '\\', '"', '\\',
'C', '3', '\\', 'A', '9' } );
- assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\\C3\\A9", new Rdn( rdn ).getNormName() );
+ assertEquals( "a=\\,\\=\\+\\<\\>#\\;\\\\\\\"\u00e9", new Rdn( rdn ).getNormName() );
}
@@ -910,6 +910,16 @@ public class RdnTest
// hash must be escaped at the beginning of a string
assertEquals( "\\#a#b", Rdn.escapeValue( "#a#b" ) );
assertEquals( "\\##a#b", Rdn.escapeValue( "##a#b" ) );
+
+ // other characters that need to be escaped
+ // '"', '+', ',', ';', '<', '>', '\', the null (U+0000) character
+ assertEquals( "\\\"\\+\\,\\;\\<\\>\\\\\\00", Rdn.escapeValue( "\"+,;<>\\\u0000" ) );
+
+ // unicode characters don't need to be escaped
+ // \u00e9 - e with acute - 2 bytes in UTF-8
+ // \u20ac - Euro character - 3 bytes in UTF-8
+ // \uD83D\uDE08 - Smiley - 4 bytes in UTF-8
+ assertEquals( "\u00e9\u20AC\uD83D\uDE08", Rdn.escapeValue( "\u00e9\u20AC\uD83D\uDE08" ) );
}
@@ -1234,4 +1244,28 @@ public class RdnTest
{
new Rdn( " A = b + A = d " );
}
+
+
+ @Test
+ public void testAvaConstructor() throws LdapInvalidDnException
+ {
+ Rdn rdn = new Rdn( new Ava( "CN", "\u00E4" ), new Ava( "A", "d" ) );
+ assertEquals( "CN=\u00E4+A=d", rdn.getName() );
+ assertEquals( "cn=\u00E4+a=d", rdn.getNormName() );
+ assertEquals( "\u00E4", rdn.getValue( "CN" ) );
+ assertEquals( "\u00E4", rdn.getValue().getValue() );
+ assertEquals( "\u00E4", rdn.getNormValue().getValue() );
+ assertEquals( "CN", rdn.getType() );
+ assertEquals( "cn", rdn.getNormType() );
+ }
+
+
+ /**
+ * test that a RDN with an attributeType used twice throws an exception
+ */
+ @Test(expected = LdapInvalidDnException.class)
+ public void testAvaConstructorWrongRdnAtUsedTwice() throws LdapException
+ {
+ new Rdn( new Ava( "A", "b" ), new Ava( "A", "d" ) );
+ }
}