+ timeout = 2
+
+ def test_bdecode_string(self):
+ self.failUnlessRaises(BencodeError, bdecode, '0:0:')
+ self.failUnlessRaises(BencodeError, bdecode, '')
+ self.failUnlessRaises(BencodeError, bdecode, '35208734823ljdahflajhdf')
+ self.failUnlessRaises(BencodeError, bdecode, '2:abfdjslhfld')
+ self.failUnlessEqual(bdecode('0:'), '')
+ self.failUnlessEqual(bdecode('3:abc'), 'abc')
+ self.failUnlessEqual(bdecode('10:1234567890'), '1234567890')
+ self.failUnlessRaises(BencodeError, bdecode, '02:xy')
+ self.failUnlessRaises(BencodeError, bdecode, '9999:x')
+
+ def test_bdecode_int(self):
+ self.failUnlessRaises(BencodeError, bdecode, 'ie')
+ self.failUnlessRaises(BencodeError, bdecode, 'i341foo382e')
+ self.failUnlessEqual(bdecode('i4e'), 4L)
+ self.failUnlessEqual(bdecode('i0e'), 0L)
+ self.failUnlessEqual(bdecode('i123456789e'), 123456789L)
+ self.failUnlessEqual(bdecode('i-10e'), -10L)
+ self.failUnlessRaises(BencodeError, bdecode, 'i-0e')
+ self.failUnlessRaises(BencodeError, bdecode, 'i123')
+ self.failUnlessRaises(BencodeError, bdecode, 'i6easd')
+ self.failUnlessRaises(BencodeError, bdecode, 'i03e')
+
+ def test_bdecode_list(self):
+ self.failUnlessRaises(BencodeError, bdecode, 'l')
+ self.failUnlessEqual(bdecode('le'), [])
+ self.failUnlessRaises(BencodeError, bdecode, 'leanfdldjfh')
+ self.failUnlessEqual(bdecode('l0:0:0:e'), ['', '', ''])
+ self.failUnlessRaises(BencodeError, bdecode, 'relwjhrlewjh')
+ self.failUnlessEqual(bdecode('li1ei2ei3ee'), [1, 2, 3])
+ self.failUnlessEqual(bdecode('l3:asd2:xye'), ['asd', 'xy'])
+ self.failUnlessEqual(bdecode('ll5:Alice3:Bobeli2ei3eee'), [['Alice', 'Bob'], [2, 3]])
+ self.failUnlessRaises(BencodeError, bdecode, 'l01:ae')
+ self.failUnlessRaises(BencodeError, bdecode, 'l0:')
+
+ def test_bdecode_dict(self):
+ self.failUnlessRaises(BencodeError, bdecode, 'd')
+ self.failUnlessRaises(BencodeError, bdecode, 'defoobar')
+ self.failUnlessEqual(bdecode('de'), {})
+ self.failUnlessEqual(bdecode('d3:agei25e4:eyes4:bluee'), {'age': 25, 'eyes': 'blue'})
+ self.failUnlessEqual(bdecode('d8:spam.mp3d6:author5:Alice6:lengthi100000eee'),
+ {'spam.mp3': {'author': 'Alice', 'length': 100000}})
+ self.failUnlessRaises(BencodeError, bdecode, 'd3:fooe')
+ self.failUnlessRaises(BencodeError, bdecode, 'di1e0:e')
+ self.failUnlessRaises(BencodeError, bdecode, 'd1:b0:1:a0:e')
+ self.failUnlessRaises(BencodeError, bdecode, 'd1:a0:1:a0:e')
+ self.failUnlessRaises(BencodeError, bdecode, 'd0:0:')
+ self.failUnlessRaises(BencodeError, bdecode, 'd0:')
+
+ def test_bdecode_unicode(self):
+ self.failUnlessRaises(BencodeError, bdecode, 'u0:0:')
+ self.failUnlessRaises(BencodeError, bdecode, 'u')
+ self.failUnlessRaises(BencodeError, bdecode, 'u35208734823ljdahflajhdf')
+ self.failUnlessRaises(BencodeError, bdecode, 'u2:abfdjslhfld')
+ self.failUnlessEqual(bdecode('u0:'), '')
+ self.failUnlessEqual(bdecode('u3:abc'), 'abc')
+ self.failUnlessEqual(bdecode('u10:1234567890'), '1234567890')
+ self.failUnlessRaises(BencodeError, bdecode, 'u02:xy')
+ self.failUnlessRaises(BencodeError, bdecode, 'u9999:x')
+
+ def test_bencode_int(self):
+ self.failUnlessEqual(bencode(4), 'i4e')
+ self.failUnlessEqual(bencode(0), 'i0e')
+ self.failUnlessEqual(bencode(-10), 'i-10e')
+ self.failUnlessEqual(bencode(12345678901234567890L), 'i12345678901234567890e')
+
+ def test_bencode_string(self):
+ self.failUnlessEqual(bencode(''), '0:')
+ self.failUnlessEqual(bencode('abc'), '3:abc')
+ self.failUnlessEqual(bencode('1234567890'), '10:1234567890')
+
+ def test_bencode_list(self):
+ self.failUnlessEqual(bencode([]), 'le')
+ self.failUnlessEqual(bencode([1, 2, 3]), 'li1ei2ei3ee')
+ self.failUnlessEqual(bencode([['Alice', 'Bob'], [2, 3]]), 'll5:Alice3:Bobeli2ei3eee')
+
+ def test_bencode_dict(self):
+ self.failUnlessEqual(bencode({}), 'de')
+ self.failUnlessEqual(bencode({'age': 25, 'eyes': 'blue'}), 'd3:agei25e4:eyes4:bluee')
+ self.failUnlessEqual(bencode({'spam.mp3': {'author': 'Alice', 'length': 100000}}),
+ 'd8:spam.mp3d6:author5:Alice6:lengthi100000eee')
+ self.failUnlessRaises(BencodeError, bencode, {1: 'foo'})
+
+ def test_bencode_unicode(self):
+ self.failUnlessEqual(bencode(u''), '0:')
+ self.failUnlessEqual(bencode(u'abc'), '3:abc')
+ self.failUnlessEqual(bencode(u'1234567890'), '10:1234567890')
+
+ def test_bool(self):
+ self.failUnless(bdecode(bencode(True)))
+ self.failIf(bdecode(bencode(False)))
+
+ def test_datetime(self):
+ date = datetime.utcnow()
+ self.failUnlessEqual(bdecode(bencode(date)), date.replace(microsecond = 0))
+
+ if UnicodeType == None:
+ test_bencode_unicode.skip = "Python was not compiled with unicode support"
+ test_bdecode_unicode.skip = "Python was not compiled with unicode support"