/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package freenet.support; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; /** * Test case for {@link freenet.support.ShortBuffer} class. * * @author stuart martin <wavey@freenetproject.org> * @author Daniel Cheng <sdiz@freenetproject.org> */ public class ShortBufferTest extends TestCase { private static final String DATA_STRING_1 = "asldkjaskjdsakdhasdhaskjdhaskjhbkasbhdjkasbduiwbxgdoudgboewuydxbybuewyxbuewyuwe" + "dasdkljasndijwnodhnqweoidhnaouidhbnwoduihwnxodiuhnwuioxdhnwqiouhnxwqoiushdnxwqoiudhxnwqoiudhxni"; public void testByteArrayShortBuffer() { byte[] data = DATA_STRING_1.getBytes(); ShortBuffer buffer = new ShortBuffer(data); assertEquals(data, buffer.getData()); doTestShortBuffer(data, buffer); } public void testByteArrayIndexShortBuffer() { // get content byte[] data = DATA_STRING_1.getBytes(); byte[] dataSub = new byte[5]; // prepare 'substring' System.arraycopy(data, 4, dataSub, 0, 5); ShortBuffer buffer = new ShortBuffer(data, 4, 5); assertFalse(dataSub.equals(buffer.getData())); doTestShortBuffer(dataSub, buffer); } public void testBadLength() { try{ new ShortBuffer(new byte[0], 0, -1); fail(); } catch(IllegalArgumentException e) { // expect this } try{ new ShortBuffer(new byte[0], 0, 1); fail(); } catch(IllegalArgumentException e) { // expect this } try{ new ShortBuffer(new byte[0], 1, 0); fail(); } catch(IllegalArgumentException e) { // expect this } try{ new ShortBuffer(new byte[32768], 0, 32768); fail(); } catch(IllegalArgumentException e) { // expect this } new Buffer(new byte[1], 1, 0); new Buffer(new byte[1], 0, 1); } public void testDataInputStreamShortBuffer() { byte[] data = DATA_STRING_1.getBytes(); // get some content byte[] data2 = new byte[data.length + 2]; // make room for 4 byte length indicator int length = DATA_STRING_1.getBytes().length; // populate length as first 4 bytes data2[0] = (byte)((length & 0xff00) >> 8); data2[1] = (byte)((length & 0xff) ); System.arraycopy(data, 0, data2, 2, data.length); // populate rest of content DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data2)); ShortBuffer buffer = null; try { buffer = new ShortBuffer(dis); } catch (IOException e) { fail("unexpected exception: " + e.getMessage()); } // perform rest of test with the *original* array because ShortBuffer(DataInputStream) chomps first 4 bytes doTestShortBuffer(data, buffer); } private void doTestShortBuffer(byte[] data, ShortBuffer buffer) { assertEquals(data.length, buffer.getLength()); for(int i = 0; i < buffer.getLength(); i++) { assertEquals(data[i], buffer.byteAt(i)); } try{ buffer.byteAt(data.length + 1); // expect exception fail(); } catch(ArrayIndexOutOfBoundsException e) { // expect this } } public void testShortBufferToString() { String shortString = "feep"; ShortBuffer shortShortBuffer = new ShortBuffer(shortString.getBytes()); String outString = shortShortBuffer.toString(); assertEquals(outString, "{4:102 101 101 112 "); // FIXME: final brace? } public void testEquals() { ShortBuffer b1 = new ShortBuffer("ShortBuffer1".getBytes()); ShortBuffer b2 = new ShortBuffer("ShortBuffer2".getBytes()); ShortBuffer b3 = new ShortBuffer("ShortBuffer1".getBytes()); assertFalse(b1.equals(b2)); assertTrue(b1.equals(b3)); assertFalse(b2.equals(b3)); assertTrue(b1.equals(b1)); assertTrue(b2.equals(b2)); assertTrue(b3.equals(b1)); } public void testHashcode() { ShortBuffer b1 = new ShortBuffer("ShortBuffer1".getBytes()); ShortBuffer b2 = new ShortBuffer("ShortBuffer2".getBytes()); ShortBuffer b3 = new ShortBuffer("ShortBuffer1".getBytes()); Map<ShortBuffer, ShortBuffer> hashMap = new HashMap<ShortBuffer, ShortBuffer>(); hashMap.put(b1, b1); hashMap.put(b2, b2); hashMap.put(b3, b3); // should clobber b1 due to content // see if b3 survived Object o = hashMap.get(b3); assertFalse(o == b1); assertTrue(o == b3); // see if b1 survived o = hashMap.get(b1); assertFalse(o == b1); assertTrue(o == b3); } public void testCopy() { byte[] oldBuf = DATA_STRING_1.getBytes(); ShortBuffer b = new ShortBuffer(oldBuf); byte[] newBuf = new byte[b.getLength()]; b.copyTo(newBuf, 0); for(int i = 0; i < oldBuf.length; i++) { assertEquals(newBuf[i], oldBuf[i]); } } }