package org.limewire.nio.channel; import java.nio.ByteBuffer; import java.util.Random; import junit.framework.Test; import org.limewire.util.BaseTestCase; public class BufferReaderTest extends BaseTestCase { private static Random RND = new Random(); private ByteBuffer BUFFER = ByteBuffer.allocate(1024); private BufferReader READER = new BufferReader(BUFFER); public BufferReaderTest(String name) { super(name); } public static Test suite() { return buildTestSuite(BufferReaderTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public void testReadOne() throws Exception { RND.nextBytes(BUFFER.array()); ByteBuffer read = ByteBuffer.allocate(2000); read.limit(20); assertEquals(20, READER.read(read)); assertEquals(BUFFER.array(), 0, 20, read.array(), 0, 20); read.limit(2000); assertEquals(1004, READER.read(read)); assertEquals(BUFFER.array(), read.array(), 0, 1024); assertTrue(read.hasRemaining()); assertEquals(0, READER.read(read)); assertEquals(BUFFER.array(), read.array(), 0, 1024); } public void testReadScatter() throws Exception { RND.nextBytes(BUFFER.array()); ByteBuffer read1 = ByteBuffer.allocate(100); ByteBuffer read2 = ByteBuffer.allocate(201); ByteBuffer read3 = ByteBuffer.allocate(399); ByteBuffer read4 = ByteBuffer.allocate(1000); ByteBuffer[] read = new ByteBuffer[] { read1, read2, read3, read4 }; read1.limit(20); read2.limit(0); read3.limit(0); read4.limit(0); assertEquals(20, READER.read(read)); assertEquals(BUFFER.array(), 0, 20, read1.array(), 0, 20); assertEquals(0, READER.read(read)); read1.limit(100); read2.limit(201); read3.limit(399); read4.limit(1); assertEquals(681, READER.read(read)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 1, read4.array(), 0, 1); read4.limit(1000); assertEquals(323, READER.read(read)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 324, read4.array(), 0, 324); assertEquals(0, read1.remaining()); assertEquals(0, read2.remaining()); assertEquals(0, read3.remaining()); assertEquals(676, read4.remaining()); assertEquals(0, READER.read(read)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 324, read4.array(), 0, 324); assertEquals(0, read1.remaining()); assertEquals(0, read2.remaining()); assertEquals(0, read3.remaining()); assertEquals(676, read4.remaining()); } public void testReadScatterWithArgs() throws Exception { RND.nextBytes(BUFFER.array()); ByteBuffer read1 = ByteBuffer.allocate(100); ByteBuffer read2 = ByteBuffer.allocate(201); ByteBuffer read3 = ByteBuffer.allocate(399); ByteBuffer read4 = ByteBuffer.allocate(1000); ByteBuffer[] read = new ByteBuffer[] { read1, read2, read3, read4 }; read1.limit(20); assertEquals(20, READER.read(read, 0, 1)); assertEquals(BUFFER.array(), 0, 20, read1.array(), 0, 20); assertEquals(0, READER.read(read, 0, 1)); read1.limit(100); read2.limit(201); assertEquals(281, READER.read(read, 0, 2)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); read3.limit(399); read4.limit(1); assertEquals(400, READER.read(read, 1, 3)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 1, read4.array(), 0, 1); read4.limit(1000); assertEquals(323, READER.read(read, 0, 4)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 324, read4.array(), 0, 324); assertEquals(0, read1.remaining()); assertEquals(0, read2.remaining()); assertEquals(0, read3.remaining()); assertEquals(676, read4.remaining()); assertEquals(0, READER.read(read, 0, 4)); assertEquals(BUFFER.array(), 0, 100, read1.array()); assertEquals(BUFFER.array(), 100, 201, read2.array()); assertEquals(BUFFER.array(), 301, 399, read3.array()); assertEquals(BUFFER.array(), 700, 324, read4.array(), 0, 324); assertEquals(0, read1.remaining()); assertEquals(0, read2.remaining()); assertEquals(0, read3.remaining()); assertEquals(676, read4.remaining()); } }