package org.limewire.bittorrent.bencoding; import java.util.List; import java.util.Map; import org.limewire.util.BaseTestCase; import org.limewire.util.ReadBufferChannel; import org.limewire.util.StringUtils; public class TokenTest extends BaseTestCase { public TokenTest(String name) { super(name); } public void testParseString() throws Exception { Object parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("4:test"))); byte[] result = (byte[]) parsedObject; assertEquals("test", StringUtils.getASCIIString(result)); parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("44:the rain in spain stays mostly on the plains"))); result = (byte[]) parsedObject; assertEquals("the rain in spain stays mostly on the plains", StringUtils.getASCIIString(result)); } public void testParseInt() throws Exception { Object parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("i12345e"))); Long result = (Long) parsedObject; assertEquals(new Long(12345), result); parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("i12345678910e"))); result = (Long) parsedObject; assertEquals(new Long(12345678910L), result); } @SuppressWarnings("unchecked") public void testParseList() throws Exception { Object parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("l5:test1e"))); List<Object> result = (List<Object>) parsedObject; assertEquals(1, result.size()); byte[] index0 = (byte[]) result.get(0); assertEquals("test1", StringUtils.getASCIIString(index0)); parsedObject = Token.parse(new ReadBufferChannel(StringUtils.toAsciiBytes("l5:test14:blah5:test23:ende"))); result = (List<Object>) parsedObject; assertEquals(4, result.size()); index0 = (byte[]) result.get(0); byte[] index1 = (byte[]) result.get(1); byte[] index2 = (byte[]) result.get(2); byte[] index3 = (byte[]) result.get(3); assertEquals("test1", StringUtils.getASCIIString(index0)); assertEquals("blah", StringUtils.getASCIIString(index1)); assertEquals("test2", StringUtils.getASCIIString(index2)); assertEquals("end", StringUtils.getASCIIString(index3)); } @SuppressWarnings("unchecked") public void testParseDictionary() throws Exception { Object parsedObject = Token .parse(new ReadBufferChannel(StringUtils.toAsciiBytes("d4:ainti12345e3:key5:value4:type4:test4:listl5:test14:blahee"))); Map<String, Object> result = (Map<String, Object>) parsedObject; assertEquals(4, result.size()); String key1 = "aint"; String key2 = "key"; String key3 = "type"; String key4 = "list"; Long value1 = (Long) result.get(key1); byte[] value2 = (byte[]) result.get(key2); byte[] value3 = (byte[]) result.get(key3); List<Object> value4 = (List<Object>) result.get(key4); assertEquals(new Long(12345), value1); assertEquals("value", StringUtils.getASCIIString(value2)); assertEquals("test", StringUtils.getASCIIString(value3)); assertEquals(2, value4.size()); String index0 = StringUtils.getASCIIString((byte[]) value4.get(0)); String index1 = StringUtils.getASCIIString((byte[]) value4.get(1)); assertEquals("test1", index0); assertEquals("blah", index1); } public void testParseEmptyByteArray() throws Exception { Object parsedObject = Token.parse(new ReadBufferChannel(new byte[] {})); assertNull(parsedObject); } }