Patch-Source: https://github.com/aresch/rencode/commit/0c0b771baf0c8edc0c7c69c2928fbce743c15124 https://github.com/aresch/rencode/pull/41 --- From 0c0b771baf0c8edc0c7c69c2928fbce743c15124 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Thu, 29 May 2025 17:19:49 -0700 Subject: [PATCH] Remove the use of the rencode_orig in the tests and instead just use expected values based on the spec. --- tests/test_rencode.py | 85 +++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/tests/test_rencode.py b/tests/test_rencode.py index a559fbb..c64e555 100644 --- a/tests/test_rencode.py +++ b/tests/test_rencode.py @@ -2,7 +2,7 @@ # # test_rencode.py # -# Copyright (C) 2010 Andrew Resch +# Copyright (C) 2025 Andrew Resch # # rencode is free software. # @@ -27,87 +27,102 @@ import unittest from rencode import _rencode as rencode -from rencode import rencode_orig class TestRencode(unittest.TestCase): def test_encode_fixed_pos_int(self): - self.assertEqual(rencode.dumps(1), rencode_orig.dumps(1)) - self.assertEqual(rencode.dumps(40), rencode_orig.dumps(40)) + self.assertEqual(rencode.dumps(1), b'\x01') + self.assertEqual(rencode.dumps(40), b'\x28') def test_encode_fixed_neg_int(self): - self.assertEqual(rencode.dumps(-10), rencode_orig.dumps(-10)) - self.assertEqual(rencode.dumps(-29), rencode_orig.dumps(-29)) + self.assertEqual(rencode.dumps(-10), b'O') + self.assertEqual(rencode.dumps(-29), b'b') def test_encode_int_char_size(self): - self.assertEqual(rencode.dumps(100), rencode_orig.dumps(100)) - self.assertEqual(rencode.dumps(-100), rencode_orig.dumps(-100)) + self.assertEqual(rencode.dumps(100), b'\x3e\x64') + self.assertEqual(rencode.dumps(-100), b'>\x9c') def test_encode_int_short_size(self): - self.assertEqual(rencode.dumps(27123), rencode_orig.dumps(27123)) - self.assertEqual(rencode.dumps(-27123), rencode_orig.dumps(-27123)) + self.assertEqual(rencode.dumps(27123), b'\x3f\x69\xf3') + self.assertEqual(rencode.dumps(-27123), b'?\x96\r') def test_encode_int_int_size(self): - self.assertEqual(rencode.dumps(7483648), rencode_orig.dumps(7483648)) - self.assertEqual(rencode.dumps(-7483648), rencode_orig.dumps(-7483648)) + self.assertEqual(rencode.dumps(7483648), b'@\x00r1\x00') + self.assertEqual(rencode.dumps(-7483648), b'@\xff\x8d\xcf\x00') def test_encode_int_long_long_size(self): self.assertEqual( - rencode.dumps(8223372036854775808), rencode_orig.dumps(8223372036854775808) + rencode.dumps(8223372036854775808), b'Ar\x1fILX\x9c\x00\x00' ) self.assertEqual( rencode.dumps(-8223372036854775808), - rencode_orig.dumps(-8223372036854775808), + b'A\x8d\xe0\xb6\xb3\xa7d\x00\x00', ) def test_encode_int_big_number(self): n = int("9" * 62) - self.assertEqual(rencode.dumps(n), rencode_orig.dumps(n)) + self.assertEqual(rencode.dumps(n), b'=' + str(n).encode() + b'\x7f') self.assertRaises(ValueError, rencode.dumps, int("9" * 65)) def test_encode_float_32bit(self): - self.assertEqual(rencode.dumps(1234.56), rencode_orig.dumps(1234.56)) + self.assertEqual(rencode.dumps(1234.56), b'BD\x9aQ\xec') def test_encode_float_64bit(self): - self.assertEqual(rencode.dumps(1234.56, 64), rencode_orig.dumps(1234.56, 64)) + self.assertEqual(rencode.dumps(1234.56, 64), b',@\x93J=p\xa3\xd7\n') def test_encode_float_invalid_size(self): self.assertRaises(ValueError, rencode.dumps, 1234.56, 36) def test_encode_fixed_str(self): - self.assertEqual(rencode.dumps(b"foobarbaz"), rencode_orig.dumps(b"foobarbaz")) + self.assertEqual(rencode.dumps(b"foobarbaz"), b'\x89foobarbaz') - def test_encode_str(self): - self.assertEqual(rencode.dumps(b"f" * 255), rencode_orig.dumps(b"f" * 255)) - self.assertEqual(rencode.dumps(b"\0"), rencode_orig.dumps(b"\0")) + def test_encode_bytes(self): + self.assertEqual(rencode.dumps(b"f" * 255), b'255:' + b'f' * 255) + self.assertEqual(rencode.dumps(b"\0"), b'\x81\x00') - def test_encode_unicode(self): - self.assertEqual(rencode.dumps("fööbar"), rencode_orig.dumps("fööbar")) + def test_encode_str(self): + self.assertEqual(rencode.dumps("fööbar"), b'\x88' + "fööbar".encode('utf-8')) def test_encode_none(self): - self.assertEqual(rencode.dumps(None), rencode_orig.dumps(None)) + self.assertEqual(rencode.dumps(None), b'E') def test_encode_bool(self): - self.assertEqual(rencode.dumps(True), rencode_orig.dumps(True)) - self.assertEqual(rencode.dumps(False), rencode_orig.dumps(False)) + self.assertEqual(rencode.dumps(True), b'C') + self.assertEqual(rencode.dumps(False), b'D') def test_encode_fixed_list(self): l = [100, -234.01, b"foobar", "bäz"] * 4 - self.assertEqual(rencode.dumps(l), rencode_orig.dumps(l)) + self.assertEqual(rencode.dumps(l), b'\xd0' + b''.join([ + b'\x3e\x64', # 100 + b'B\xc3j\x02\x8f', # -234.01 + b'\x86foobar', # "foobar" + b'\x84' + "bäz".encode('utf-8') # "bäz" + ]) * 4) def test_encode_list(self): l = [100, -234.01, b"foobar", "bäz"] * 80 - self.assertEqual(rencode.dumps(l), rencode_orig.dumps(l)) + self.assertEqual(rencode.dumps(l), b';' + b''.join([ + b'\x3e\x64', # 100 + b'B\xc3j\x02\x8f', # -234.01 + b'\x86foobar', # "foobar" + b'\x84' + "bäz".encode('utf-8') # "bäz" + ]) * 80 + b'\x7f') def test_encode_fixed_dict(self): s = b"abcdefghijk" d = dict(zip(s, [1234] * len(s))) - self.assertEqual(rencode.dumps(d), rencode_orig.dumps(d)) + self.assertEqual(rencode.dumps(d), b'q' + b''.join( + b'>' + bytes([i]) + b'?\x04\xd2' for i in range(ord('a'), ord('k') + 1) + )) def test_encode_dict(self): s = b"abcdefghijklmnopqrstuvwxyz1234567890" d = dict(zip(s, [1234] * len(s))) - self.assertEqual(rencode.dumps(d), rencode_orig.dumps(d)) + self.assertEqual(rencode.dumps(d), b'<' + b''.join( + b'>' + bytes([i]) + b'?\x04\xd2' for i in range(ord('a'), ord('z') + 1) + ) + b''.join( + b'>' + bytes([i]) + b'?\x04\xd2' for i in range(ord('1'), ord('9') + 1) + ) + b'>0?\x04\xd2' + b'\x7f') def test_decode_fixed_pos_int(self): self.assertEqual(rencode.loads(rencode.dumps(10)), 10) @@ -156,15 +171,15 @@ def test_decode_float_64bit(self): self.assertEqual(rencode.loads(f), rencode_orig.loads(f)) self.assertRaises(IndexError, rencode.loads, bytes(bytearray([44]))) - def test_decode_fixed_str(self): + def test_decode_fixed_bytes(self): self.assertEqual(rencode.loads(rencode.dumps(b"foobarbaz")), b"foobarbaz") self.assertRaises(IndexError, rencode.loads, bytes(bytearray([130]))) - def test_decode_str(self): + def test_decode_bytes(self): self.assertEqual(rencode.loads(rencode.dumps(b"f" * 255)), b"f" * 255) self.assertRaises(IndexError, rencode.loads, b"50") - def test_decode_unicode(self): + def test_decode_str(self): self.assertEqual( rencode.loads(rencode.dumps("fööbar")), "fööbar".encode("utf8") ) @@ -370,10 +385,8 @@ def test_decode_str_nullbytes(self): def test_decode_utf8(self): s = b"foobarbaz" - # no assertIsInstance with python2.6 d = rencode.loads(rencode.dumps(s), decode_utf8=True) - if not isinstance(d, str): - self.fail("%s is not an instance of %r" % (repr(d), str)) + self.assertIsInstance(d, str) s = rencode.dumps(b"\x56\xe4foo\xc3") self.assertRaises(UnicodeDecodeError, rencode.loads, s, decode_utf8=True) From 3f7847cd024cf2ab818b85cbab8b6df862661589 Mon Sep 17 00:00:00 2001 From: Nicholas Sherlock Date: Thu, 18 Sep 2025 20:34:46 +1200 Subject: [PATCH] Fix tests that still referenced rencode_orig --- tests/test_rencode.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/test_rencode.py b/tests/test_rencode.py index c64e555..7cfeee6 100644 --- a/tests/test_rencode.py +++ b/tests/test_rencode.py @@ -162,13 +162,13 @@ def test_decode_int_big_number(self): self.assertRaises(ValueError, rencode.loads, toobig) def test_decode_float_32bit(self): - f = rencode.dumps(1234.56) - self.assertEqual(rencode.loads(f), rencode_orig.loads(f)) + f = rencode.dumps(1234.5) + self.assertEqual(rencode.loads(f), 1234.5) self.assertRaises(IndexError, rencode.loads, bytes(bytearray([66]))) def test_decode_float_64bit(self): - f = rencode.dumps(1234.56, 64) - self.assertEqual(rencode.loads(f), rencode_orig.loads(f)) + f = rencode.dumps(1234.5, 64) + self.assertEqual(rencode.loads(f), 1234.5) self.assertRaises(IndexError, rencode.loads, bytes(bytearray([44]))) def test_decode_fixed_bytes(self): @@ -391,12 +391,9 @@ def test_decode_utf8(self): self.assertRaises(UnicodeDecodeError, rencode.loads, s, decode_utf8=True) def test_version_exposed(self): - assert rencode.__version__ - assert rencode_orig.__version__ self.assertEqual( rencode.__version__[1:], - rencode_orig.__version__[1:], - "version number does not match", + ("Cython", 1, 0, 8)[1:], ) def test_invalid_typecode(self):