tracker
Change-Id: I8f8ac81f9c4d7c7650cd64d2dade701dc6c11dce
diff --git a/ttorrent-master/bencoding/src/test/java/BDecoderTest.java b/ttorrent-master/bencoding/src/test/java/BDecoderTest.java
new file mode 100644
index 0000000..b48ef69
--- /dev/null
+++ b/ttorrent-master/bencoding/src/test/java/BDecoderTest.java
@@ -0,0 +1,56 @@
+import com.turn.ttorrent.bcodec.BDecoder;
+import com.turn.ttorrent.bcodec.InvalidBEncodingException;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+public class BDecoderTest {
+
+ @Test
+ public void testDecodeNumbers() throws IOException {
+
+ testNumber(0);
+ testNumber(1);
+ testNumber(Integer.MAX_VALUE);
+ testNumber(1234567);
+ testNumber(-1);
+ testNumber(-100);
+ testNumber(Integer.MIN_VALUE);
+ testNumber(Long.MAX_VALUE);
+ testNumber(Long.MIN_VALUE);
+
+ //by specification number with lead zero it's incorrect value
+ testBadNumber("00");
+ testBadNumber("01234");
+ testBadNumber("000");
+ testBadNumber("0001");
+
+ }
+
+ private void testBadNumber(String number) throws IOException {
+ try {
+ BDecoder.bdecode(numberToBEPBytes(number));
+ } catch (InvalidBEncodingException e) {
+ return;
+ }
+ fail("Value " + number + " is incorrect by BEP specification but is was parsed correctly");
+ }
+
+ private void testNumber(long value) throws IOException {
+ assertEquals(BDecoder.bdecode(numberToBEPBytes(value)).getLong(), value);
+ }
+
+ private ByteBuffer numberToBEPBytes(long value) throws UnsupportedEncodingException {
+ return ByteBuffer.wrap(("i" + value + "e").getBytes("ASCII"));
+ }
+
+ private ByteBuffer numberToBEPBytes(String value) throws UnsupportedEncodingException {
+ return ByteBuffer.wrap(("i" + value + "e").getBytes("ASCII"));
+ }
+
+}