package org.limewire.util;
import java.nio.ByteBuffer;
import java.util.Random;
import junit.framework.Test;
public class BufferUtilsTest extends BaseTestCase {
public BufferUtilsTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(BufferUtilsTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public void testDelete()throws Exception {
byte[] data = data(100);
byte[] copy = new byte[100];
System.arraycopy(data, 0, copy, 0, 100);
ByteBuffer buf = ByteBuffer.wrap(copy).compact();
assertEquals(100, buf.position());
for(int i = 0; i < 100; i++)
assertEquals("wrong data at: " + i, buf.get(i), data[i]);
assertEquals(0, BufferUtils.delete(buf, 1));
assertEquals(99, buf.position());
for(int i = 0; i < 99; i++)
assertEquals("wrong data at: " + i, buf.get(i), data[i+1]);
assertEquals(51, BufferUtils.delete(buf, 150));
assertEquals(0, buf.position());
data = data(100);
buf = ByteBuffer.wrap(data).compact();
assertEquals(0, BufferUtils.delete(buf, 100));
assertEquals(0, buf.position());
}
public void testTransfer() throws Exception {
byte[] srcData = data(100);
ByteBuffer src = buffer(srcData).compact();
ByteBuffer dst = ByteBuffer.allocate(100);
assertEquals(100, src.position());
assertEquals(100, BufferUtils.transfer(src, dst));
assertEquals(0, src.position());
assertEquals(srcData, dst.array());
}
public void testTransferNoFlip() throws Exception {
byte[] srcData = data(100);
ByteBuffer src = buffer(srcData);
ByteBuffer dst = ByteBuffer.allocate(100);
assertTrue(src.hasRemaining());
assertEquals(100, BufferUtils.transfer(src, dst, false));
assertFalse(src.hasRemaining());
assertEquals(srcData, dst.array());
}
public void testReadAll() throws Exception {
byte[] bufferData = data(100);
ByteBuffer bufferSrc = buffer(bufferData).compact();
byte[] channelData = data(100);
ByteBuffer channelBuf = buffer(channelData);
ReadBufferChannel channelSrc = new ReadBufferChannel(channelBuf);
ByteBuffer dst = ByteBuffer.allocate(500);
assertEquals(100, bufferSrc.position());
assertEquals(0, BufferUtils.readAll(bufferSrc, channelSrc, dst));
assertEquals(0, bufferSrc.position());
assertFalse(channelBuf.hasRemaining());
assertEquals(bufferData, dst.array(), 0, 100);
assertEquals(channelData, dst.array(), 100, 100);
assertEquals(0, BufferUtils.readAll(bufferSrc, channelSrc, dst));
assertEquals(0, bufferSrc.position());
assertFalse(channelBuf.hasRemaining());
assertEquals(bufferData, dst.array(), 0, 100);
assertEquals(channelData, dst.array(), 100, 100);
channelData = data(100);
channelSrc = new ReadBufferChannel(buffer(channelData), true);
assertEquals(-1, BufferUtils.readAll(bufferSrc, channelSrc, dst));
assertEquals(channelData, dst.array(), 200, 100);
}
private ByteBuffer buffer(byte[] b) {
byte[] copy = new byte[b.length];
System.arraycopy(b, 0, copy, 0, copy.length);
ByteBuffer buf = ByteBuffer.wrap(copy);
return buf;
}
private byte[] data(int len) {
Random rnd = new Random();
byte[] b = new byte[len];
rnd.nextBytes(b);
return b;
}
}