Author: elecharny
Date: Sat Apr 9 10:56:50 2011
New Revision: 1090561
URL: http://svn.apache.org/viewvc?rev=1090561&view=rev
Log:
Moved the IoBuffer tests in the right package, merging the two existing tests
into one
Removed:
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/IoBufferTest.java
Modified:
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Bar.java
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Foo.java
Modified:
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
URL:
http://svn.apache.org/viewvc/mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java?rev=1090561&r1=1090560&r2=1090561&view=diff
==============================================================================
---
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
(original)
+++
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
Sat Apr 9 10:56:50 2011
@@ -24,12 +24,22 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.ReadOnlyBufferException;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
import java.util.ArrayList;
import java.util.Date;
+import java.util.EnumSet;
import java.util.List;
+import org.apache.mina.util.Bar;
import org.junit.Test;
/**
@@ -216,4 +226,1059 @@ public class IoBufferTest {
assertEquals(c, o);
assertSame(c, o);
}
+
+ @Test
+ public void testAllocate() throws Exception {
+ for (int i = 10; i < 1048576 * 2; i = i * 11 / 10) // increase by 10%
+ {
+ IoBuffer buf = IoBuffer.allocate(i);
+ assertEquals(0, buf.position());
+ assertEquals(buf.capacity(), buf.remaining());
+ assertTrue(buf.capacity() >= i);
+ assertTrue(buf.capacity() < i * 2);
+ }
+ }
+
+ @Test
+ public void testAutoExpand() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(1);
+
+ buf.put((byte) 0);
+ try {
+ buf.put((byte) 0);
+ fail("Buffer can't auto expand, with autoExpand property set at
false");
+ } catch (BufferOverflowException e) {
+ // Expected Exception as auto expand property is false
+ assertTrue(true);
+ }
+
+ buf.setAutoExpand(true);
+ buf.put((byte) 0);
+ assertEquals(2, buf.position());
+ assertEquals(2, buf.limit());
+ assertEquals(2, buf.capacity());
+
+ buf.setAutoExpand(false);
+ try {
+ buf.put(3, (byte) 0);
+ fail("Buffer can't auto expand, with autoExpand property set at
false");
+ } catch (IndexOutOfBoundsException e) {
+ // Expected Exception as auto expand property is false
+ assertTrue(true);
+ }
+
+ buf.setAutoExpand(true);
+ buf.put(3, (byte) 0);
+ assertEquals(2, buf.position());
+ assertEquals(4, buf.limit());
+ assertEquals(4, buf.capacity());
+
+ // Make sure the buffer is doubled up.
+ buf = IoBuffer.allocate(1).setAutoExpand(true);
+ int lastCapacity = buf.capacity();
+ for (int i = 0; i < 1048576; i ++) {
+ buf.put((byte) 0);
+ if (lastCapacity != buf.capacity()) {
+ assertEquals(lastCapacity * 2, buf.capacity());
+ lastCapacity = buf.capacity();
+ }
+ }
+ }
+
+ @Test
+ public void testAutoExpandMark() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(4).setAutoExpand(true);
+
+ buf.put((byte) 0);
+ buf.put((byte) 0);
+ buf.put((byte) 0);
+
+ // Position should be 3 when we reset this buffer.
+ buf.mark();
+
+ // Overflow it
+ buf.put((byte) 0);
+ buf.put((byte) 0);
+
+ assertEquals(5, buf.position());
+ buf.reset();
+ assertEquals(3, buf.position());
+ }
+
+ @Test
+ public void testAutoShrink() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(8).setAutoShrink(true);
+
+ // Make sure the buffer doesn't shrink too much (less than the initial
+ // capacity.)
+ buf.sweep((byte) 1);
+ buf.fill(7);
+ buf.compact();
+ assertEquals(8, buf.capacity());
+ assertEquals(1, buf.position());
+ assertEquals(8, buf.limit());
+ buf.clear();
+ assertEquals(1, buf.get());
+
+ // Expand the buffer.
+ buf.capacity(32).clear();
+ assertEquals(32, buf.capacity());
+
+ // Make sure the buffer shrinks when only 1/4 is being used.
+ buf.sweep((byte) 1);
+ buf.fill(24);
+ buf.compact();
+ assertEquals(16, buf.capacity());
+ assertEquals(8, buf.position());
+ assertEquals(16, buf.limit());
+ buf.clear();
+ for (int i = 0; i < 8; i ++) {
+ assertEquals(1, buf.get());
+ }
+
+ // Expand the buffer.
+ buf.capacity(32).clear();
+ assertEquals(32, buf.capacity());
+
+ // Make sure the buffer shrinks when only 1/8 is being used.
+ buf.sweep((byte) 1);
+ buf.fill(28);
+ buf.compact();
+ assertEquals(8, buf.capacity());
+ assertEquals(4, buf.position());
+ assertEquals(8, buf.limit());
+ buf.clear();
+ for (int i = 0; i < 4; i ++) {
+ assertEquals(1, buf.get());
+ }
+
+ // Expand the buffer.
+ buf.capacity(32).clear();
+ assertEquals(32, buf.capacity());
+
+ // Make sure the buffer shrinks when 0 byte is being used.
+ buf.fill(32);
+ buf.compact();
+ assertEquals(8, buf.capacity());
+ assertEquals(0, buf.position());
+ assertEquals(8, buf.limit());
+
+ // Expand the buffer.
+ buf.capacity(32).clear();
+ assertEquals(32, buf.capacity());
+
+ // Make sure the buffer doesn't shrink when more than 1/4 is being
used.
+ buf.sweep((byte) 1);
+ buf.fill(23);
+ buf.compact();
+ assertEquals(32, buf.capacity());
+ assertEquals(9, buf.position());
+ assertEquals(32, buf.limit());
+ buf.clear();
+ for (int i = 0; i < 9; i ++) {
+ assertEquals(1, buf.get());
+ }
+ }
+
+ @Test
+ public void testGetString() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(16);
+ CharsetDecoder decoder;
+
+ Charset charset = Charset.forName("UTF-8");
+ buf.clear();
+ buf.putString("hello", charset.newEncoder());
+ buf.put((byte) 0);
+ buf.flip();
+ assertEquals("hello", buf.getString(charset.newDecoder()));
+
+ buf.clear();
+ buf.putString("hello", charset.newEncoder());
+ buf.flip();
+ assertEquals("hello", buf.getString(charset.newDecoder()));
+
+ decoder = Charset.forName("ISO-8859-1").newDecoder();
+ buf.clear();
+ buf.put((byte) 'A');
+ buf.put((byte) 'B');
+ buf.put((byte) 'C');
+ buf.put((byte) 0);
+
+ buf.position(0);
+ assertEquals("ABC", buf.getString(decoder));
+ assertEquals(4, buf.position());
+
+ buf.position(0);
+ buf.limit(1);
+ assertEquals("A", buf.getString(decoder));
+ assertEquals(1, buf.position());
+
+ buf.clear();
+ assertEquals("ABC", buf.getString(10, decoder));
+ assertEquals(10, buf.position());
+
+ buf.clear();
+ assertEquals("A", buf.getString(1, decoder));
+ assertEquals(1, buf.position());
+
+ // Test a trailing garbage
+ buf.clear();
+ buf.put((byte) 'A');
+ buf.put((byte) 'B');
+ buf.put((byte) 0);
+ buf.put((byte) 'C');
+ buf.position(0);
+ assertEquals("AB", buf.getString(4, decoder));
+ assertEquals(4, 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);
+ assertEquals("ABC", buf.getString(decoder));
+ assertEquals(8, buf.position());
+
+ buf.position(0);
+ buf.limit(2);
+ assertEquals("A", buf.getString(decoder));
+ assertEquals(2, buf.position());
+
+ buf.position(0);
+ buf.limit(3);
+ assertEquals("A", buf.getString(decoder));
+ assertEquals(2, buf.position());
+
+ buf.clear();
+ assertEquals("ABC", buf.getString(10, decoder));
+ assertEquals(10, buf.position());
+
+ buf.clear();
+ assertEquals("A", buf.getString(2, decoder));
+ assertEquals(2, buf.position());
+
+ buf.clear();
+ try {
+ buf.getString(1, decoder);
+ fail();
+ } catch (IllegalArgumentException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ // Test getting strings from an empty buffer.
+ buf.clear();
+ buf.limit(0);
+ assertEquals("", buf.getString(decoder));
+ assertEquals("", buf.getString(2, decoder));
+
+ // Test getting strings from non-empty buffer which is filled with 0x00
+ buf.clear();
+ buf.putInt(0);
+ buf.clear();
+ buf.limit(4);
+ assertEquals("", buf.getString(decoder));
+ assertEquals(2, buf.position());
+ assertEquals(4, buf.limit());
+
+ buf.position(0);
+ assertEquals("", buf.getString(2, decoder));
+ assertEquals(2, buf.position());
+ assertEquals(4, buf.limit());
+ }
+
+ @Test
+ public void testGetStringWithFailure() throws Exception {
+ String test = "\u30b3\u30e1\u30f3\u30c8\u7de8\u96c6";
+ IoBuffer buffer = IoBuffer.wrap(test.getBytes("Shift_JIS"));
+
+ // Make sure the limit doesn't change when an exception arose.
+ int oldLimit = buffer.limit();
+ int oldPos = buffer.position();
+ try {
+ buffer.getString(3, Charset.forName("ASCII").newDecoder());
+ fail();
+ } catch (Exception e) {
+ assertEquals(oldLimit, buffer.limit());
+ assertEquals(oldPos, buffer.position());
+ }
+
+ try {
+ buffer.getString(Charset.forName("ASCII").newDecoder());
+ fail();
+ } catch (Exception e) {
+ assertEquals(oldLimit, buffer.limit());
+ assertEquals(oldPos, buffer.position());
+ }
+ }
+
+ @Test
+ public void testPutString() throws Exception {
+ CharsetEncoder encoder;
+ IoBuffer buf = IoBuffer.allocate(16);
+ encoder = Charset.forName("ISO-8859-1").newEncoder();
+
+ buf.putString("ABC", encoder);
+ assertEquals(3, buf.position());
+ buf.clear();
+ assertEquals('A', buf.get(0));
+ assertEquals('B', buf.get(1));
+ assertEquals('C', buf.get(2));
+
+ buf.putString("D", 5, encoder);
+ assertEquals(5, buf.position());
+ buf.clear();
+ assertEquals('D', buf.get(0));
+ assertEquals(0, buf.get(1));
+
+ buf.putString("EFG", 2, encoder);
+ assertEquals(2, buf.position());
+ buf.clear();
+ assertEquals('E', buf.get(0));
+ assertEquals('F', buf.get(1));
+ 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);
+ assertEquals(6, buf.position());
+ buf.clear();
+
+ assertEquals(0, buf.get(0));
+ assertEquals('A', buf.get(1));
+ assertEquals(0, buf.get(2));
+ assertEquals('B', buf.get(3));
+ assertEquals(0, buf.get(4));
+ assertEquals('C', buf.get(5));
+
+ buf.putString("D", 10, encoder);
+ assertEquals(10, buf.position());
+ buf.clear();
+ assertEquals(0, buf.get(0));
+ assertEquals('D', buf.get(1));
+ assertEquals(0, buf.get(2));
+ assertEquals(0, buf.get(3));
+
+ buf.putString("EFG", 4, encoder);
+ assertEquals(4, buf.position());
+ buf.clear();
+ assertEquals(0, buf.get(0));
+ assertEquals('E', buf.get(1));
+ assertEquals(0, buf.get(2));
+ assertEquals('F', buf.get(3));
+ assertEquals(0, buf.get(4)); // C may not be overwritten
+ assertEquals('C', buf.get(5)); // C may not be overwritten
+
+ // Test putting an emptry string
+ buf.putString("", encoder);
+ assertEquals(0, buf.position());
+ buf.putString("", 4, encoder);
+ assertEquals(4, buf.position());
+ assertEquals(0, buf.get(0));
+ assertEquals(0, buf.get(1));
+ }
+
+ @Test
+ public void testGetPrefixedString() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(16);
+ CharsetEncoder encoder;
+ CharsetDecoder decoder;
+ encoder = Charset.forName("ISO-8859-1").newEncoder();
+ decoder = Charset.forName("ISO-8859-1").newDecoder();
+
+ buf.putShort((short) 3);
+ buf.putString("ABCD", encoder);
+ buf.clear();
+ assertEquals("ABC", buf.getPrefixedString(decoder));
+ }
+
+ @Test
+ public void testPutPrefixedString() throws Exception {
+ CharsetEncoder encoder;
+ IoBuffer buf = IoBuffer.allocate(16);
+ buf.fillAndReset(buf.remaining());
+ encoder = Charset.forName("ISO-8859-1").newEncoder();
+
+ // Without autoExpand
+ buf.putPrefixedString("ABC", encoder);
+ assertEquals(5, buf.position());
+ assertEquals(0, buf.get(0));
+ assertEquals(3, buf.get(1));
+ assertEquals('A', buf.get(2));
+ assertEquals('B', buf.get(3));
+ assertEquals('C', buf.get(4));
+
+ buf.clear();
+ try {
+ buf.putPrefixedString("123456789012345", encoder);
+ fail();
+ } catch (BufferOverflowException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ // With autoExpand
+ buf.clear();
+ buf.setAutoExpand(true);
+ buf.putPrefixedString("123456789012345", encoder);
+ assertEquals(17, buf.position());
+ assertEquals(0, buf.get(0));
+ assertEquals(15, buf.get(1));
+ assertEquals('1', buf.get(2));
+ assertEquals('2', buf.get(3));
+ assertEquals('3', buf.get(4));
+ assertEquals('4', buf.get(5));
+ assertEquals('5', buf.get(6));
+ assertEquals('6', buf.get(7));
+ assertEquals('7', buf.get(8));
+ assertEquals('8', buf.get(9));
+ assertEquals('9', buf.get(10));
+ assertEquals('0', buf.get(11));
+ assertEquals('1', buf.get(12));
+ assertEquals('2', buf.get(13));
+ assertEquals('3', buf.get(14));
+ assertEquals('4', buf.get(15));
+ assertEquals('5', buf.get(16));
+ }
+
+ @Test
+ public void testPutPrefixedStringWithPrefixLength() throws Exception {
+ CharsetEncoder encoder = Charset.forName("ISO-8859-1").newEncoder();
+ IoBuffer buf = IoBuffer.allocate(16).sweep().setAutoExpand(true);
+
+ buf.putPrefixedString("A", 1, encoder);
+ assertEquals(2, buf.position());
+ assertEquals(1, buf.get(0));
+ assertEquals('A', buf.get(1));
+
+ buf.sweep();
+ buf.putPrefixedString("A", 2, encoder);
+ assertEquals(3, buf.position());
+ assertEquals(0, buf.get(0));
+ assertEquals(1, buf.get(1));
+ assertEquals('A', buf.get(2));
+
+ buf.sweep();
+ buf.putPrefixedString("A", 4, encoder);
+ assertEquals(5, buf.position());
+ assertEquals(0, buf.get(0));
+ assertEquals(0, buf.get(1));
+ assertEquals(0, buf.get(2));
+ assertEquals(1, buf.get(3));
+ assertEquals('A', buf.get(4));
+ }
+
+ @Test
+ public void testPutPrefixedStringWithPadding() throws Exception {
+ CharsetEncoder encoder = Charset.forName("ISO-8859-1").newEncoder();
+ IoBuffer buf = IoBuffer.allocate(16).sweep().setAutoExpand(true);
+
+ buf.putPrefixedString("A", 1, 2, (byte) 32, encoder);
+ assertEquals(3, buf.position());
+ assertEquals(2, buf.get(0));
+ assertEquals('A', buf.get(1));
+ assertEquals(' ', buf.get(2));
+
+ buf.sweep();
+ buf.putPrefixedString("A", 1, 4, (byte) 32, encoder);
+ assertEquals(5, buf.position());
+ assertEquals(4, buf.get(0));
+ assertEquals('A', buf.get(1));
+ assertEquals(' ', buf.get(2));
+ assertEquals(' ', buf.get(3));
+ assertEquals(' ', buf.get(4));
+ }
+
+ @Test
+ public void testWideUtf8Characters() throws Exception {
+ Runnable r = new Runnable() {
+ public void run() {
+ IoBuffer buffer = IoBuffer.allocate(1);
+ buffer.setAutoExpand(true);
+
+ Charset charset = Charset.forName("UTF-8");
+
+ CharsetEncoder encoder = charset.newEncoder();
+
+ for (int i = 0; i < 5; i++) {
+ try {
+ buffer.putString("\u89d2", encoder);
+ buffer.putPrefixedString("\u89d2", encoder);
+ } catch (CharacterCodingException e) {
+ fail(e.getMessage());
+ }
+ }
+ }
+ };
+
+ Thread t = new Thread(r);
+ t.setDaemon(true);
+ t.start();
+
+ for (int i = 0; i < 50; i++) {
+ Thread.sleep(100);
+ if (!t.isAlive()) {
+ break;
+ }
+ }
+
+ if (t.isAlive()) {
+ t.interrupt();
+
+ fail("Went into endless loop trying to encode character");
+ }
+ }
+
+ @Test
+ public void testInheritedObjectSerialization() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(16);
+ buf.setAutoExpand(true);
+
+ Bar expected = new Bar();
+ expected.setFooValue(0x12345678);
+ expected.setBarValue(0x90ABCDEF);
+
+ // Test writing an object.
+ buf.putObject(expected);
+
+ // Test reading an object.
+ buf.clear();
+ Bar actual = (Bar) buf.getObject();
+ assertSame(Bar.class, actual.getClass());
+ assertEquals(expected.getFooValue(), actual.getFooValue());
+ assertEquals(expected.getBarValue(), actual.getBarValue());
+
+ // This assertion is just to make sure that deserialization occurred.
+ assertNotSame(expected, actual);
+ }
+
+ @Test
+ public void testSweepWithZeros() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(4);
+ buf.putInt(0xdeadbeef);
+ buf.clear();
+ assertEquals(0xdeadbeef, buf.getInt());
+ assertEquals(4, buf.position());
+ assertEquals(4, buf.limit());
+
+ buf.sweep();
+ assertEquals(0, buf.position());
+ assertEquals(4, buf.limit());
+ assertEquals(0x0, buf.getInt());
+ }
+
+ @Test
+ public void testSweepNonZeros() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(4);
+ buf.putInt(0xdeadbeef);
+ buf.clear();
+ assertEquals(0xdeadbeef, buf.getInt());
+ assertEquals(4, buf.position());
+ assertEquals(4, buf.limit());
+
+ buf.sweep((byte) 0x45);
+ assertEquals(0, buf.position());
+ assertEquals(4, buf.limit());
+ assertEquals(0x45454545, buf.getInt());
+ }
+
+ @Test
+ public void testWrapNioBuffer() throws Exception {
+ ByteBuffer nioBuf = ByteBuffer.allocate(10);
+ nioBuf.position(3);
+ nioBuf.limit(7);
+
+ IoBuffer buf = IoBuffer.wrap(nioBuf);
+ assertEquals(3, buf.position());
+ assertEquals(7, buf.limit());
+ assertEquals(10, buf.capacity());
+ }
+
+ @Test
+ public void testWrapSubArray() throws Exception {
+ byte[] array = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+
+ IoBuffer buf = IoBuffer.wrap(array, 3, 4);
+ assertEquals(3, buf.position());
+ assertEquals(7, buf.limit());
+ assertEquals(10, buf.capacity());
+
+ buf.clear();
+ assertEquals(0, buf.position());
+ assertEquals(10, buf.limit());
+ assertEquals(10, buf.capacity());
+ }
+
+ @Test
+ public void testDuplicate() throws Exception {
+ IoBuffer original;
+ IoBuffer duplicate;
+
+ // Test if the buffer is duplicated correctly.
+ original = IoBuffer.allocate(16).sweep();
+ original.position(4);
+ original.limit(10);
+ duplicate = original.duplicate();
+ original.put(4, (byte) 127);
+ assertEquals(4, duplicate.position());
+ assertEquals(10, duplicate.limit());
+ assertEquals(16, duplicate.capacity());
+ assertNotSame(original.buf(), duplicate.buf());
+ assertSame(original.buf().array(), duplicate.buf().array());
+ assertEquals(127, duplicate.get(4));
+
+ // Test a duplicate of a duplicate.
+ original = IoBuffer.allocate(16);
+ duplicate = original.duplicate().duplicate();
+ assertNotSame(original.buf(), duplicate.buf());
+ assertSame(original.buf().array(), duplicate.buf().array());
+
+ // Try to expand.
+ original = IoBuffer.allocate(16);
+ original.setAutoExpand(true);
+ duplicate = original.duplicate();
+ assertFalse(original.isAutoExpand());
+
+ try {
+ original.setAutoExpand(true);
+ fail("Derived buffers and their parent can't be expanded");
+ } catch (IllegalStateException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ try {
+ duplicate.setAutoExpand(true);
+ fail("Derived buffers and their parent can't be expanded");
+ } catch (IllegalStateException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+ }
+
+ @Test
+ public void testSlice() throws Exception {
+ IoBuffer original;
+ IoBuffer slice;
+
+ // Test if the buffer is sliced correctly.
+ original = IoBuffer.allocate(16).sweep();
+ original.position(4);
+ original.limit(10);
+ slice = original.slice();
+ original.put(4, (byte) 127);
+ assertEquals(0, slice.position());
+ assertEquals(6, slice.limit());
+ assertEquals(6, slice.capacity());
+ assertNotSame(original.buf(), slice.buf());
+ assertEquals(127, slice.get(0));
+ }
+
+ @Test
+ public void testReadOnlyBuffer() throws Exception {
+ IoBuffer original;
+ IoBuffer duplicate;
+
+ // Test if the buffer is duplicated correctly.
+ original = IoBuffer.allocate(16).sweep();
+ original.position(4);
+ original.limit(10);
+ duplicate = original.asReadOnlyBuffer();
+ original.put(4, (byte) 127);
+ assertEquals(4, duplicate.position());
+ assertEquals(10, duplicate.limit());
+ assertEquals(16, duplicate.capacity());
+ assertNotSame(original.buf(), duplicate.buf());
+ assertEquals(127, duplicate.get(4));
+
+ // Try to expand.
+ try {
+ original = IoBuffer.allocate(16);
+ duplicate = original.asReadOnlyBuffer();
+ duplicate.putString("A very very very very looooooong string",
+ Charset.forName("ISO-8859-1").newEncoder());
+ fail("ReadOnly buffer's can't be expanded");
+ } catch (ReadOnlyBufferException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+ }
+
+ @Test
+ public void testGetUnsigned() throws Exception {
+ IoBuffer buf = IoBuffer.allocate(16);
+ buf.put((byte) 0xA4);
+ buf.put((byte) 0xD0);
+ buf.put((byte) 0xB3);
+ buf.put((byte) 0xCD);
+ buf.flip();
+
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+
+ buf.mark();
+ assertEquals(0xA4, buf.getUnsigned());
+ buf.reset();
+ assertEquals(0xD0A4, buf.getUnsignedShort());
+ buf.reset();
+ assertEquals(0xCDB3D0A4L, buf.getUnsignedInt());
+ }
+
+ @Test
+ public void testIndexOf() throws Exception {
+ boolean direct = false;
+ for (int i = 0; i < 2; i++, direct = !direct) {
+ IoBuffer buf = IoBuffer.allocate(16, direct);
+ buf.put((byte) 0x1);
+ buf.put((byte) 0x2);
+ buf.put((byte) 0x3);
+ buf.put((byte) 0x4);
+ buf.put((byte) 0x1);
+ buf.put((byte) 0x2);
+ buf.put((byte) 0x3);
+ buf.put((byte) 0x4);
+ buf.position(2);
+ buf.limit(5);
+
+ assertEquals(4, buf.indexOf((byte) 0x1));
+ assertEquals(-1, buf.indexOf((byte) 0x2));
+ assertEquals(2, buf.indexOf((byte) 0x3));
+ assertEquals(3, buf.indexOf((byte) 0x4));
+ }
+ }
+
+ // We need an enum with 64 values
+ private static enum TestEnum {
+ E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16,
E17, E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32,
E33, E34, E35, E36, E37, E38, E39, E40, E41, E42, E43, E44, E45, E46, E77, E48,
E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62, E63, E64
+ }
+
+ private static enum TooBigEnum {
+ E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16,
E17, E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32,
E33, E34, E35, E36, E37, E38, E39, E40, E41, E42, E43, E44, E45, E46, E77, E48,
E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62, E63, E64,
E65
+ }
+
+ @Test
+ public void testPutEnumSet() {
+ IoBuffer buf = IoBuffer.allocate(8);
+
+ // Test empty set
+ buf.putEnumSet(EnumSet.noneOf(TestEnum.class));
+ buf.flip();
+ assertEquals(0, buf.get());
+
+ buf.clear();
+ buf.putEnumSetShort(EnumSet.noneOf(TestEnum.class));
+ buf.flip();
+ assertEquals(0, buf.getShort());
+
+ buf.clear();
+ buf.putEnumSetInt(EnumSet.noneOf(TestEnum.class));
+ buf.flip();
+ assertEquals(0, buf.getInt());
+
+ buf.clear();
+ buf.putEnumSetLong(EnumSet.noneOf(TestEnum.class));
+ buf.flip();
+ assertEquals(0, buf.getLong());
+
+ // Test complete set
+ buf.clear();
+ buf.putEnumSet(EnumSet.range(TestEnum.E1, TestEnum.E8));
+ buf.flip();
+ assertEquals((byte) -1, buf.get());
+
+ buf.clear();
+ buf.putEnumSetShort(EnumSet.range(TestEnum.E1, TestEnum.E16));
+ buf.flip();
+ assertEquals((short) -1, buf.getShort());
+
+ buf.clear();
+ buf.putEnumSetInt(EnumSet.range(TestEnum.E1, TestEnum.E32));
+ buf.flip();
+ assertEquals(-1, buf.getInt());
+
+ buf.clear();
+ buf.putEnumSetLong(EnumSet.allOf(TestEnum.class));
+ buf.flip();
+ assertEquals(-1L, buf.getLong());
+
+ // Test high bit set
+ buf.clear();
+ buf.putEnumSet(EnumSet.of(TestEnum.E8));
+ buf.flip();
+ assertEquals(Byte.MIN_VALUE, buf.get());
+
+ buf.clear();
+ buf.putEnumSetShort(EnumSet.of(TestEnum.E16));
+ buf.flip();
+ assertEquals(Short.MIN_VALUE, buf.getShort());
+
+ buf.clear();
+ buf.putEnumSetInt(EnumSet.of(TestEnum.E32));
+ buf.flip();
+ assertEquals(Integer.MIN_VALUE, buf.getInt());
+
+ buf.clear();
+ buf.putEnumSetLong(EnumSet.of(TestEnum.E64));
+ buf.flip();
+ assertEquals(Long.MIN_VALUE, buf.getLong());
+
+ // Test high low bits set
+ buf.clear();
+ buf.putEnumSet(EnumSet.of(TestEnum.E1, TestEnum.E8));
+ buf.flip();
+ assertEquals(Byte.MIN_VALUE + 1, buf.get());
+
+ buf.clear();
+ buf.putEnumSetShort(EnumSet.of(TestEnum.E1, TestEnum.E16));
+ buf.flip();
+ assertEquals(Short.MIN_VALUE + 1, buf.getShort());
+
+ buf.clear();
+ buf.putEnumSetInt(EnumSet.of(TestEnum.E1, TestEnum.E32));
+ buf.flip();
+ assertEquals(Integer.MIN_VALUE + 1, buf.getInt());
+
+ buf.clear();
+ buf.putEnumSetLong(EnumSet.of(TestEnum.E1, TestEnum.E64));
+ buf.flip();
+ assertEquals(Long.MIN_VALUE + 1, buf.getLong());
+ }
+
+ @Test
+ public void testGetEnumSet() {
+ IoBuffer buf = IoBuffer.allocate(8);
+
+ // Test empty set
+ buf.put((byte) 0);
+ buf.flip();
+ assertEquals(EnumSet.noneOf(TestEnum.class), buf
+ .getEnumSet(TestEnum.class));
+
+ buf.clear();
+ buf.putShort((short) 0);
+ buf.flip();
+ assertEquals(EnumSet.noneOf(TestEnum.class), buf
+ .getEnumSet(TestEnum.class));
+
+ buf.clear();
+ buf.putInt(0);
+ buf.flip();
+ assertEquals(EnumSet.noneOf(TestEnum.class), buf
+ .getEnumSet(TestEnum.class));
+
+ buf.clear();
+ buf.putLong(0L);
+ buf.flip();
+ assertEquals(EnumSet.noneOf(TestEnum.class), buf
+ .getEnumSet(TestEnum.class));
+
+ // Test complete set
+ buf.clear();
+ buf.put((byte) -1);
+ buf.flip();
+ assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E8), buf
+ .getEnumSet(TestEnum.class));
+
+ buf.clear();
+ buf.putShort((short) -1);
+ buf.flip();
+ assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E16), buf
+ .getEnumSetShort(TestEnum.class));
+
+ buf.clear();
+ buf.putInt(-1);
+ buf.flip();
+ assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E32), buf
+ .getEnumSetInt(TestEnum.class));
+
+ buf.clear();
+ buf.putLong(-1L);
+ buf.flip();
+ assertEquals(EnumSet.allOf(TestEnum.class), buf
+ .getEnumSetLong(TestEnum.class));
+
+ // Test high bit set
+ buf.clear();
+ buf.put(Byte.MIN_VALUE);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E8), buf.getEnumSet(TestEnum.class));
+
+ buf.clear();
+ buf.putShort(Short.MIN_VALUE);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E16), buf
+ .getEnumSetShort(TestEnum.class));
+
+ buf.clear();
+ buf.putInt(Integer.MIN_VALUE);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E32), buf
+ .getEnumSetInt(TestEnum.class));
+
+ buf.clear();
+ buf.putLong(Long.MIN_VALUE);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E64), buf
+ .getEnumSetLong(TestEnum.class));
+
+ // Test high low bits set
+ buf.clear();
+ byte b = Byte.MIN_VALUE + 1;
+ buf.put(b);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E8), buf
+ .getEnumSet(TestEnum.class));
+
+ buf.clear();
+ short s = Short.MIN_VALUE + 1;
+ buf.putShort(s);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E16), buf
+ .getEnumSetShort(TestEnum.class));
+
+ buf.clear();
+ buf.putInt(Integer.MIN_VALUE + 1);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E32), buf
+ .getEnumSetInt(TestEnum.class));
+
+ buf.clear();
+ buf.putLong(Long.MIN_VALUE + 1);
+ buf.flip();
+ assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E64), buf
+ .getEnumSetLong(TestEnum.class));
+ }
+
+ @Test
+ public void testBitVectorOverFlow() {
+ IoBuffer buf = IoBuffer.allocate(8);
+ try {
+ buf.putEnumSet(EnumSet.of(TestEnum.E9));
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ try {
+ buf.putEnumSetShort(EnumSet.of(TestEnum.E17));
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ try {
+ buf.putEnumSetInt(EnumSet.of(TestEnum.E33));
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+
+ try {
+ buf.putEnumSetLong(EnumSet.of(TooBigEnum.E65));
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Expected an Exception, signifies test success
+ assertTrue(true);
+ }
+ }
+
+ @Test
+ public void testGetPutEnum() {
+ IoBuffer buf = IoBuffer.allocate(4);
+
+ buf.putEnum(TestEnum.E64);
+ buf.flip();
+ assertEquals(TestEnum.E64, buf.getEnum(TestEnum.class));
+
+ buf.clear();
+ buf.putEnumShort(TestEnum.E64);
+ buf.flip();
+ assertEquals(TestEnum.E64, buf.getEnumShort(TestEnum.class));
+
+ buf.clear();
+ buf.putEnumInt(TestEnum.E64);
+ buf.flip();
+ assertEquals(TestEnum.E64, buf.getEnumInt(TestEnum.class));
+ }
+
+ @Test
+ public void testGetMediumInt() {
+ IoBuffer buf = IoBuffer.allocate(3);
+
+ buf.put((byte) 0x01);
+ buf.put((byte) 0x02);
+ buf.put((byte) 0x03);
+ assertEquals(3, buf.position());
+
+ buf.flip();
+ assertEquals(0x010203, buf.getMediumInt());
+ assertEquals(0x010203, buf.getMediumInt(0));
+ buf.flip();
+ assertEquals(0x010203, buf.getUnsignedMediumInt());
+ assertEquals(0x010203, buf.getUnsignedMediumInt(0));
+ buf.flip();
+ assertEquals(0x010203, buf.getUnsignedMediumInt());
+ buf.flip().order(ByteOrder.LITTLE_ENDIAN);
+ assertEquals(0x030201, buf.getMediumInt());
+ assertEquals(0x030201, buf.getMediumInt(0));
+
+ // Test max medium int
+ buf.flip().order(ByteOrder.BIG_ENDIAN);
+ buf.put((byte) 0x7f);
+ buf.put((byte) 0xff);
+ buf.put((byte) 0xff);
+ buf.flip();
+ assertEquals(0x7fffff, buf.getMediumInt());
+ assertEquals(0x7fffff, buf.getMediumInt(0));
+
+ // Test negative number
+ buf.flip().order(ByteOrder.BIG_ENDIAN);
+ buf.put((byte) 0xff);
+ buf.put((byte) 0x02);
+ buf.put((byte) 0x03);
+ buf.flip();
+
+ assertEquals(0xffff0203, buf.getMediumInt());
+ assertEquals(0xffff0203, buf.getMediumInt(0));
+ buf.flip();
+
+ assertEquals(0x00ff0203, buf.getUnsignedMediumInt());
+ assertEquals(0x00ff0203, buf.getUnsignedMediumInt(0));
+ }
+
+ @Test
+ public void testPutMediumInt() {
+ IoBuffer buf = IoBuffer.allocate(3);
+
+ checkMediumInt(buf, 0);
+ checkMediumInt(buf, 1);
+ checkMediumInt(buf, -1);
+ checkMediumInt(buf, 0x7fffff);
+ }
+
+ private void checkMediumInt(IoBuffer buf, int x) {
+ buf.putMediumInt(x);
+ assertEquals(3, buf.position());
+ buf.flip();
+ assertEquals(x, buf.getMediumInt());
+ assertEquals(3, buf.position());
+
+ buf.putMediumInt(0, x);
+ assertEquals(3, buf.position());
+ assertEquals(x, buf.getMediumInt(0));
+
+ buf.flip();
+ }
}
Modified:
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Bar.java
URL:
http://svn.apache.org/viewvc/mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Bar.java?rev=1090561&r1=1090560&r2=1090561&view=diff
==============================================================================
--- mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Bar.java
(original)
+++ mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Bar.java
Sat Apr 9 10:56:50 2011
@@ -19,7 +19,7 @@
*/
package org.apache.mina.util;
-import org.apache.mina.core.IoBufferTest;
+import org.apache.mina.core.buffer.IoBufferTest;
/**
* The subtype of {@link Foo}. It is used to test the serialization of
inherited object
Modified:
mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Foo.java
URL:
http://svn.apache.org/viewvc/mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Foo.java?rev=1090561&r1=1090560&r2=1090561&view=diff
==============================================================================
--- mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Foo.java
(original)
+++ mina/branches/2.0.3/mina-core/src/test/java/org/apache/mina/util/Foo.java
Sat Apr 9 10:56:50 2011
@@ -21,7 +21,8 @@ package org.apache.mina.util;
import java.io.Serializable;
-import org.apache.mina.core.IoBufferTest;
+import org.apache.mina.core.buffer.IoBufferTest;
+
/**
* The parent class of {@link Bar}. It is used to test the serialization of
inherited object