import org.torrent.basnark.bencode.BEncodedStreamReader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.math.BigDecimal; import junit.framework.TestCase; /** * Date: 21.09.2009 * Time: 23:16:06 (Moscow Standard Time) * * @author Vlad Vinichenko (akerigan@gmail.com) */ public class BEncodedStreamReaderTest extends TestCase { Log log = LogFactory.getLog(getClass()); public BEncodedStreamReader getReader(String value) { return new BEncodedStreamReader(new ByteArrayInputStream(value.getBytes())); } public void testInt() throws IOException { log.info("intTest"); BEncodedStreamReader reader = getReader("i875e"); assertTrue(reader.hasNext()); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(875), reader.getNumber()); assertFalse(reader.hasNext()); } public void testString() throws IOException { log.info("stringTest"); BEncodedStreamReader reader = getReader("8:encoding"); assertTrue(reader.hasNext()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals("encoding", new String(reader.getByteArray())); assertFalse(reader.hasNext()); } public void testList() throws IOException { log.info("listTest"); BEncodedStreamReader reader = getReader("li54e4:testi55ee"); assertTrue(reader.hasNext()); assertEquals(BEncodedStreamReader.LIST_START, reader.next()); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(54), reader.getNumber()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "test"); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(55), reader.getNumber()); assertEquals(BEncodedStreamReader.LIST_END, reader.next()); assertFalse(reader.hasNext()); } public void testDictionary() throws IOException { log.info("dictTest"); BEncodedStreamReader reader = getReader("d4:name3:bob3:agei34ee"); assertTrue(reader.hasNext()); assertEquals(BEncodedStreamReader.DICTIONARY_START, reader.next()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "name"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "bob"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "age"); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(34), reader.getNumber()); assertEquals(BEncodedStreamReader.DICTIONARY_END, reader.next()); assertFalse(reader.hasNext()); } public void testBiggerDictionary() throws IOException { log.info("dictTest"); BEncodedStreamReader reader = getReader("d4:Name5:James3:Agei22e9:Relativesl3:Bob5:James5:Jennye7:Addressd6:Street5:Smith6:Suburb7:Preston8:Postcodei5425eee"); assertTrue(reader.hasNext()); assertEquals(BEncodedStreamReader.DICTIONARY_START, reader.next()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Name"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "James"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Age"); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(22), reader.getNumber()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Relatives"); assertEquals(BEncodedStreamReader.LIST_START, reader.next()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Bob"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "James"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Jenny"); assertEquals(BEncodedStreamReader.LIST_END, reader.next()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Address"); assertEquals(BEncodedStreamReader.DICTIONARY_START, reader.next()); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Street"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Smith"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Suburb"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Preston"); assertEquals(BEncodedStreamReader.BYTE_ARRAY, reader.next()); assertEquals(new String(reader.getByteArray()), "Postcode"); assertEquals(BEncodedStreamReader.INTEGER, reader.next()); assertEquals(new BigDecimal(5425), reader.getNumber()); assertEquals(BEncodedStreamReader.DICTIONARY_END, reader.next()); assertEquals(BEncodedStreamReader.DICTIONARY_END, reader.next()); assertFalse(reader.hasNext()); } }