You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/04/21 03:34:08 UTC
svn commit: r162104 - in /directory/network/trunk/src:
java/org/apache/mina/common/ByteBuffer.java
test/org/apache/mina/common/ByteBufferTest.java
Author: trustin
Date: Wed Apr 20 18:34:06 2005
New Revision: 162104
URL: http://svn.apache.org/viewcvs?rev=162104&view=rev
Log:
* Fixed: getString() returns empty string.
* Added: Test cases for get/putString()
Modified:
directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java
directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.java
Modified: directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java?rev=162104&r1=162103&r2=162104&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java Wed Apr 20 18:34:06 2005
@@ -1031,8 +1031,8 @@
}
buf.limit( oldLimit );
- buf.position( oldLimit );
- return out.toString();
+ buf.position( end );
+ return out.flip().toString();
}
public String getString( int fieldSize, CharsetDecoder decoder ) throws CharacterCodingException
@@ -1136,7 +1136,7 @@
buf.limit( oldLimit );
buf.position( end );
- return out.toString();
+ return out.flip().toString();
}
public ByteBuffer putString(
Modified: directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.java?rev=162104&r1=162103&r2=162104&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.java Wed Apr 20 18:34:06 2005
@@ -19,6 +19,9 @@
package org.apache.mina.common;
import java.nio.BufferOverflowException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -142,5 +145,139 @@
Assert.assertEquals( 2, buf.position() );
Assert.assertEquals( 4, buf.limit() );
Assert.assertEquals( 4, buf.capacity() );
+ }
+
+ public void testGetString() throws Exception
+ {
+ ByteBuffer buf = ByteBuffer.allocate( 16 );
+ CharsetDecoder decoder;
+
+ decoder = Charset.forName( "ISO-8859-1" ).newDecoder();
+ buf.put( (byte) 'A' );
+ buf.put( (byte) 'B' );
+ buf.put( (byte) 'C' );
+ buf.put( (byte) 0 );
+
+ buf.position( 0 );
+ Assert.assertEquals( "ABC", buf.getString( decoder ) );
+ Assert.assertEquals( 4, buf.position() );
+
+ buf.position( 0 );
+ buf.limit( 1 );
+ Assert.assertEquals( "A", buf.getString( decoder ) );
+ Assert.assertEquals( 1, buf.position() );
+
+ buf.clear();
+ Assert.assertEquals( "ABC", buf.getString( 10, decoder ) );
+ Assert.assertEquals( 10, buf.position() );
+
+ buf.clear();
+ Assert.assertEquals( "A", buf.getString( 1, decoder ) );
+ Assert.assertEquals( 1, buf.position() );
+
+ buf.clear();
+ buf.fillAndReset( buf.limit() );
+ decoder = Charset.forName( "UTF-16" ).newDecoder();
+ buf.put( (byte) 0 );
+ buf.put( (byte) 'A' );
+ buf.put( (byte) 0 );
+ buf.put( (byte) 'B' );
+ buf.put( (byte) 0 );
+ buf.put( (byte) 'C' );
+ buf.put( (byte) 0 );
+ buf.put( (byte) 0 );
+
+ buf.position( 0 );
+ Assert.assertEquals( "ABC", buf.getString( decoder ) );
+ Assert.assertEquals( 8, buf.position() );
+
+ buf.position( 0 );
+ buf.limit( 2 );
+ Assert.assertEquals( "A", buf.getString( decoder ) );
+ Assert.assertEquals( 2, buf.position() );
+
+ buf.position( 0 );
+ buf.limit( 3 );
+ Assert.assertEquals( "A", buf.getString( decoder ) );
+ Assert.assertEquals( 2, buf.position() );
+
+ buf.clear();
+ Assert.assertEquals( "ABC", buf.getString( 10, decoder ) );
+ Assert.assertEquals( 10, buf.position() );
+
+ buf.clear();
+ Assert.assertEquals( "A", buf.getString( 2, decoder ) );
+ Assert.assertEquals( 2, buf.position() );
+
+ buf.clear();
+ try
+ {
+ buf.getString( 1, decoder );
+ Assert.fail();
+ }
+ catch( IllegalArgumentException e )
+ {
+ // ignore
+ }
+ }
+
+ public void testPutString() throws Exception
+ {
+ CharsetEncoder encoder;
+ ByteBuffer buf = ByteBuffer.allocate( 16 );
+ encoder = Charset.forName( "ISO-8859-1" ).newEncoder();
+
+ buf.putString( "ABC", encoder );
+ Assert.assertEquals( 3, buf.position() );
+ buf.clear();
+ Assert.assertEquals( 'A', buf.get( 0 ) );
+ Assert.assertEquals( 'B', buf.get( 1 ) );
+ Assert.assertEquals( 'C', buf.get( 2 ) );
+
+ buf.putString( "D", 5, encoder );
+ Assert.assertEquals( 5, buf.position() );
+ buf.clear();
+ Assert.assertEquals( 'D', buf.get( 0 ) );
+ Assert.assertEquals( 0, buf.get( 1 ) );
+
+ buf.putString( "EFG", 2, encoder );
+ Assert.assertEquals( 2, buf.position() );
+ buf.clear();
+ Assert.assertEquals( 'E', buf.get( 0 ) );
+ Assert.assertEquals( 'F', buf.get( 1 ) );
+ Assert.assertEquals( 'C', buf.get( 2 ) ); // C may not be overwritten
+
+ // UTF-16: We specify byte order to omit BOM.
+ encoder = Charset.forName( "UTF-16BE" ).newEncoder();
+ buf.clear();
+
+ buf.putString( "ABC", encoder );
+ Assert.assertEquals( 6, buf.position() );
+ buf.clear();
+
+ Assert.assertEquals( 0, buf.get( 0 ) );
+ Assert.assertEquals( 'A', buf.get( 1 ) );
+ Assert.assertEquals( 0, buf.get( 2 ) );
+ Assert.assertEquals( 'B', buf.get( 3 ) );
+ Assert.assertEquals( 0, buf.get( 4 ) );
+ Assert.assertEquals( 'C', buf.get( 5 ) );
+
+ buf.putString( "D", 10, encoder );
+ Assert.assertEquals( 10, buf.position() );
+ buf.clear();
+ Assert.assertEquals( 0, buf.get( 0 ) );
+ Assert.assertEquals( 'D', buf.get( 1 ) );
+ Assert.assertEquals( 0, buf.get( 2 ) );
+ Assert.assertEquals( 0, buf.get( 3 ) );
+
+ buf.putString( "EFG", 4, encoder );
+ Assert.assertEquals( 4, buf.position() );
+ buf.clear();
+ Assert.assertEquals( 0, buf.get( 0 ) );
+ Assert.assertEquals( 'E', buf.get( 1 ) );
+ Assert.assertEquals( 0, buf.get( 2 ) );
+ Assert.assertEquals( 'F', buf.get( 3 ) );
+ Assert.assertEquals( 0, buf.get( 4 ) ); // C may not be overwritten
+ Assert.assertEquals( 'C', buf.get( 5 ) ); // C may not be overwritten
}
}