11a6387e68300b6f554f4f4f044491b7034733442Christian Heimes"""Unit tests for the bytes and bytearray types. 21a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 386e0d5761177ef3fe7b50f7e9f235c70960d7834Martin PanterXXX This is a mess. Common tests should be unified with string_tests.py (and 486e0d5761177ef3fe7b50f7e9f235c70960d7834Martin Panterthe latter should be modernized). 51a6387e68300b6f554f4f4f044491b7034733442Christian Heimes""" 61a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 71a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport os 81a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport re 91a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport sys 101a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport copy 119b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xiclunaimport functools 121a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport pickle 131a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport tempfile 141a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport unittest 151a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport test.test_support 161a6387e68300b6f554f4f4f044491b7034733442Christian Heimesimport test.string_tests 171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 189b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna 199b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xiclunaif sys.flags.bytes_warning: 209b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna def check_bytes_warnings(func): 219b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna @functools.wraps(func) 229b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna def wrapper(*args, **kw): 239b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna with test.test_support.check_warnings(('', BytesWarning)): 249b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna return func(*args, **kw) 259b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna return wrapper 269b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xiclunaelse: 279b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna # no-op 289b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna def check_bytes_warnings(func): 299b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna return func 309b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna 319b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna 323e483f643de3d38125a7ca04bb424323cf736762Georg Brandlclass Indexable: 333e483f643de3d38125a7ca04bb424323cf736762Georg Brandl def __init__(self, value=0): 343e483f643de3d38125a7ca04bb424323cf736762Georg Brandl self.value = value 353e483f643de3d38125a7ca04bb424323cf736762Georg Brandl def __index__(self): 363e483f643de3d38125a7ca04bb424323cf736762Georg Brandl return self.value 373e483f643de3d38125a7ca04bb424323cf736762Georg Brandl 381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 391a6387e68300b6f554f4f4f044491b7034733442Christian Heimesclass BaseBytesTest(unittest.TestCase): 401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 411a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_basics(self): 421a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test() 431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(type(b), self.type2test) 441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.__class__, self.type2test) 451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_empty_sequence(self): 471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test() 481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(len(b), 0) 491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[0]) 501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[1]) 511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[sys.maxint]) 521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[sys.maxint+1]) 531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[10**100]) 541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-1]) 551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-2]) 561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-sys.maxint]) 571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-sys.maxint-1]) 581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-sys.maxint-2]) 591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b[-10**100]) 601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_from_list(self): 621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ints = list(range(256)) 631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(i for i in ints) 641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(len(b), 256) 651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(list(b), ints) 661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_from_index(self): 683e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b = self.type2test([Indexable(), Indexable(1), Indexable(254), 693e483f643de3d38125a7ca04bb424323cf736762Georg Brandl Indexable(255)]) 701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(list(b), [0, 1, 254, 255]) 7106f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertRaises(ValueError, self.type2test, [Indexable(-1)]) 7206f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertRaises(ValueError, self.type2test, [Indexable(256)]) 731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_from_ssize(self): 7506f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertEqual(self.type2test(0), b'') 7606f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertEqual(self.type2test(1), b'\x00') 775c4e292c14b71bfecb45e39f501329a71254b2ccBenjamin Peterson self.assertEqual(self.type2test(5), b'\x00\x00\x00\x00\x00') 7806f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertRaises(ValueError, self.type2test, -1) 791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8006f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertEqual(self.type2test('0', 'ascii'), b'0') 8106f06a0b2fb871a8acad8576816eda5f05160856Benjamin Peterson self.assertEqual(self.type2test(b'0'), b'0') 82821a8ea39fb93095cc06c0cd9ef4ce498af73ab3Benjamin Peterson self.assertRaises(OverflowError, self.type2test, sys.maxsize + 1) 831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_constructor_type_errors(self): 851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test, 0.0) 861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes class C: 871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 88efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou # allowed in 2.x 890a34baf1fc10ffd61f4e9a8d053008dd57930fffGeorg Brandl #self.assertRaises(TypeError, self.type2test, ["0"]) 901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test, [0.0]) 911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test, [None]) 921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test, [C()]) 931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_constructor_value_errors(self): 951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [-1]) 961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [-sys.maxint]) 971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [-sys.maxint-1]) 981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [-sys.maxint-2]) 991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [-10**100]) 1001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [256]) 1011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [257]) 1021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [sys.maxint]) 1031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [sys.maxint+1]) 1041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test, [10**100]) 1051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_compare(self): 1071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b1 = self.type2test([1, 2, 3]) 1081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b2 = self.type2test([1, 2, 3]) 1091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b3 = self.type2test([1, 3]) 1101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b1, b2) 1125c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b2 != b3) 1135c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b1 <= b2) 1145c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b1 <= b3) 1155c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b1 < b3) 1165c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b1 >= b2) 1175c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b3 >= b2) 1185c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b3 > b2) 1195c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson 1205c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b1 != b2) 1215c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b2 == b3) 1225c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b1 > b2) 1235c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b1 > b3) 1245c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b1 >= b3) 1255c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b1 < b2) 1265c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b3 < b2) 1275c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(b3 <= b2) 1281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1299b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna @check_bytes_warnings 1301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_compare_to_str(self): 1311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Byte comparisons with unicode should always fail! 1321a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test this for all expected byte orders and Unicode character sizes 1331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"\0a\0b\0c") == u"abc", False) 1341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"\0\0\0a\0\0\0b\0\0\0c") == u"abc", False) 1351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"a\0b\0c\0") == u"abc", False) 1361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"a\0\0\0b\0\0\0c\0\0\0") == u"abc", False) 1371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test() == unicode(), False) 1381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test() != unicode(), True) 1391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_reversed(self): 1411a6387e68300b6f554f4f4f044491b7034733442Christian Heimes input = list(map(ord, "Hello")) 1421a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(input) 1431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes output = list(reversed(b)) 1441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes input.reverse() 1451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(output, input) 1461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_getslice(self): 1481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def by(s): 1491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes return self.type2test(map(ord, s)) 1501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = by("Hello, world") 1511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[:5], by("Hello")) 1531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[1:5], by("ello")) 1541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[5:7], by(", ")) 1551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[7:], by("world")) 1561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[7:12], by("world")) 1571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[7:100], by("world")) 1581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[:-7], by("Hello")) 1601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-11:-7], by("ello")) 1611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-7:-5], by(", ")) 1621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-5:], by("world")) 1631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-5:12], by("world")) 1641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-5:100], by("world")) 1651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[-100:5], by("Hello")) 1661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_extended_getslice(self): 1681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test extended slicing by comparing with list slicing. 1691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes L = list(range(255)) 1701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(L) 1711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 1721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for start in indices: 1731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for stop in indices: 1741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Skip step 0 (invalid) 1751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for step in indices[1:]: 1761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b[start:stop:step], self.type2test(L[start:stop:step])) 1771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_encoding(self): 1791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes sample = u"Hello world\n\u1234\u5678\u9abc\udef0" 1801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for enc in ("utf8", "utf16"): 1811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(sample, enc) 1821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, self.type2test(sample.encode(enc))) 1831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(UnicodeEncodeError, self.type2test, sample, "latin1") 1841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(sample, "latin1", "ignore") 1851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, self.type2test(sample[:-4], "utf-8")) 1861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_decode(self): 1881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes sample = u"Hello world\n\u1234\u5678\u9abc\def0\def0" 1891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for enc in ("utf8", "utf16"): 1901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(sample, enc) 1911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.decode(enc), sample) 1921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes sample = u"Hello world\n\x80\x81\xfe\xff" 1931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(sample, "latin1") 1941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(UnicodeDecodeError, b.decode, "utf8") 1951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n") 196dc782b55f2c7ede13c8c2bbc76662e8a9784d20cBenjamin Peterson self.assertEqual(b.decode(errors="ignore", encoding="utf8"), 197dc782b55f2c7ede13c8c2bbc76662e8a9784d20cBenjamin Peterson "Hello world\n") 1981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 1991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_from_int(self): 2001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(0) 2011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, self.type2test()) 2021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(10) 2031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, self.type2test([0]*10)) 2041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(10000) 2051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, self.type2test([0]*10000)) 2061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_concat(self): 2081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b1 = self.type2test(b"abc") 2091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b2 = self.type2test(b"def") 2101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b1 + b2, b"abcdef") 2111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b1 + bytes(b"def"), b"abcdef") 2121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"def") + b1, b"defabc") 2131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: b1 + u"def") 2141a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: u"abc" + b2) 2151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_repeat(self): 2171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for b in b"abc", self.type2test(b"abc"): 2181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b * 3, b"abcabcabc") 2191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b * 0, b"") 2201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b * -1, b"") 2211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: b * 3.14) 2221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: 3.14 * b) 2231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # XXX Shouldn't bytes and bytearray agree on what to raise? 2241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises((OverflowError, MemoryError), 22569ed5240451b5e9642ddc87bb6b0ca2d2e47d784Mark Hammond lambda: b * sys.maxsize) 2261a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2271a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_repeat_1char(self): 2281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b'x')*100, self.type2test([ord('x')]*100)) 2291a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_contains(self): 2311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b"abc") 232aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(ord('a'), b) 233aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(int(ord('a')), b) 234aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn(200, b) 2351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, lambda: 300 in b) 2361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, lambda: -1 in b) 2371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: None in b) 2381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: float(ord('a')) in b) 2391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: u"a" in b) 2401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for f in bytes, bytearray: 241aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b""), b) 242aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"a"), b) 243aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"b"), b) 244aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"c"), b) 245aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"ab"), b) 246aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"bc"), b) 247aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertIn(f(b"abc"), b) 248aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn(f(b"ac"), b) 249aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn(f(b"d"), b) 250aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn(f(b"dab"), b) 251aa98058cc44ba20f35c106d20918c6196b737561Ezio Melotti self.assertNotIn(f(b"abd"), b) 2521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_fromhex(self): 2541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test.fromhex) 2551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test.fromhex, 1) 2562623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(self.type2test.fromhex(u''), self.type2test()) 2571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray([0x1a, 0x2b, 0x30]) 2582623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(self.type2test.fromhex(u'1a2B30'), b) 2592623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(self.type2test.fromhex(u' 1A 2B 30 '), b) 2602623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(self.type2test.fromhex(u'0000'), b'\0\0') 2611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test.fromhex, u'a') 2621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test.fromhex, u'rt') 2631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test.fromhex, u'1a b cd') 2641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test.fromhex, u'\x00') 2651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, self.type2test.fromhex, u'12 \x00 34') 2661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_join(self): 2681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"").join([]), b"") 2691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"").join([b""]), b"") 2701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for lst in [[b"abc"], [b"a", b"bc"], [b"ab", b"c"], [b"a", b"b", b"c"]]: 2711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes lst = list(map(self.type2test, lst)) 2721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"").join(lst), b"abc") 2731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"").join(tuple(lst)), b"abc") 2741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b"").join(iter(lst)), b"abc") 2751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b".").join([b"ab", b"cd"]), b"ab.cd") 2761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # XXX more... 2771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_count(self): 2791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 2801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.count(b'i'), 4) 2811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.count(b'ss'), 2) 2821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.count(b'w'), 0) 2831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_startswith(self): 2851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'hello') 2861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(self.type2test().startswith(b"anything")) 2871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.startswith(b"hello")) 2881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.startswith(b"hel")) 2891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.startswith(b"h")) 2901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(b.startswith(b"hellow")) 2911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(b.startswith(b"ha")) 2921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 2931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_endswith(self): 2941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'hello') 2951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(bytearray().endswith(b"anything")) 2961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.endswith(b"hello")) 2971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.endswith(b"llo")) 2981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(b.endswith(b"o")) 2991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(b.endswith(b"whello")) 3001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(b.endswith(b"no")) 3011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_find(self): 3031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 3041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'ss'), 2) 3051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'ss', 3), 5) 3061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'ss', 1, 7), 2) 3071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'ss', 1, 3), -1) 3081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'w'), -1) 3091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.find(b'mississippian'), -1) 3101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rfind(self): 3121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 3131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rfind(b'ss'), 5) 3141a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rfind(b'ss', 3), 5) 3151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rfind(b'ss', 0, 6), 2) 3161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rfind(b'w'), -1) 3171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rfind(b'mississippian'), -1) 3181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_index(self): 3201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'world') 3211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.index(b'w'), 0) 3221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.index(b'orl'), 1) 3231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, b.index, b'worm') 3241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, b.index, b'ldo') 3251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3261a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rindex(self): 3271a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # XXX could be more rigorous 3281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'world') 3291a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rindex(b'w'), 0) 3301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rindex(b'orl'), 1) 3311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, b.rindex, b'worm') 3321a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, b.rindex, b'ldo') 3331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_replace(self): 3351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 3361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.replace(b'i', b'a'), b'massassappa') 3371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.replace(b'ss', b'x'), b'mixixippi') 3381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_split_string_error(self): 3401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test(b'a b').split, u' ') 3411a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 342efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou def test_split_unicodewhitespace(self): 343f1669a390d262bf138cd8dc954443fb0e3c8c85eMartin Panter for b in (b'a\x1Cb', b'a\x1Db', b'a\x1Eb', b'a\x1Fb'): 344f1669a390d262bf138cd8dc954443fb0e3c8c85eMartin Panter b = self.type2test(b) 345f1669a390d262bf138cd8dc954443fb0e3c8c85eMartin Panter self.assertEqual(b.split(), [b]) 346efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") 347efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou self.assertEqual(b.split(), [b'\x1c\x1d\x1e\x1f']) 348efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou 3491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rsplit_string_error(self): 3501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test(b'a b').rsplit, u' ') 3511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rsplit_unicodewhitespace(self): 3531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") 3541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rsplit(), [b'\x1c\x1d\x1e\x1f']) 3551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_partition(self): 3571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 3581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.partition(b'ss'), (b'mi', b'ss', b'issippi')) 359efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou self.assertEqual(b.partition(b'w'), (b'mississippi', b'', b'')) 3601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rpartition(self): 3621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'mississippi') 3631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rpartition(b'ss'), (b'missi', b'ss', b'ippi')) 3641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.rpartition(b'i'), (b'mississipp', b'i', b'')) 365efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou self.assertEqual(b.rpartition(b'w'), (b'', b'', b'mississippi')) 3661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_pickling(self): 368592c2755677d77061ceb99607c10fa7d70e5c2ddHirokazu Yamamoto for proto in range(pickle.HIGHEST_PROTOCOL + 1): 3691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0": 3701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b) 3711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ps = pickle.dumps(b, proto) 3721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes q = pickle.loads(ps) 3731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, q) 3741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 375efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou def test_strip_bytearray(self): 3761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b'abc').strip(memoryview(b'ac')), b'b') 3771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b'abc').lstrip(memoryview(b'ac')), b'bc') 3781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(self.type2test(b'abc').rstrip(memoryview(b'ac')), b'ab') 3791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_strip_string_error(self): 3811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test(b'abc').strip, u'b') 3821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test(b'abc').lstrip, u'b') 3831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, self.type2test(b'abc').rstrip, u'b') 3841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 3851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_ord(self): 3861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = self.type2test(b'\0A\x7f\x80\xff') 3871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual([ord(b[i:i+1]) for i in range(len(b))], 3881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes [0, 65, 127, 128, 255]) 3891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 39044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea def test_none_arguments(self): 39144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea # issue 11828 39244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea b = self.type2test(b'hello') 39344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea l = self.type2test(b'l') 39444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea h = self.type2test(b'h') 39544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x = self.type2test(b'x') 39644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea o = self.type2test(b'o') 39744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 39844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.find(l, None)) 39944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.find(l, -2, None)) 40044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.find(l, None, -2)) 40144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(0, b.find(h, None, None)) 40244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 40344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.rfind(l, None)) 40444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.rfind(l, -2, None)) 40544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.rfind(l, None, -2)) 40644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(0, b.rfind(h, None, None)) 40744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 40844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.index(l, None)) 40944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.index(l, -2, None)) 41044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.index(l, None, -2)) 41144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(0, b.index(h, None, None)) 41244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 41344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.rindex(l, None)) 41444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(3, b.rindex(l, -2, None)) 41544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.rindex(l, None, -2)) 41644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(0, b.rindex(h, None, None)) 41744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 41844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(2, b.count(l, None)) 41944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(1, b.count(l, -2, None)) 42044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(1, b.count(l, None, -2)) 42144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(0, b.count(x, None, None)) 42244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 42344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.endswith(o, None)) 42444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.endswith(o, -2, None)) 42544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.endswith(l, None, -2)) 42644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(False, b.endswith(x, None, None)) 42744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 42844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.startswith(h, None)) 42944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.startswith(l, -2, None)) 43044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(True, b.startswith(h, None, -2)) 43144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertEqual(False, b.startswith(x, None, None)) 43244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 43344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea def test_find_etc_raise_correct_error_messages(self): 43444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea # issue 11828 43544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea b = self.type2test(b'hello') 43644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x = self.type2test(b'x') 43744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\bfind\b', b.find, 43844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 43944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\brfind\b', b.rfind, 44044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 44144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\bindex\b', b.index, 44244e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 44344e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\brindex\b', b.rindex, 44444e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 44544e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\bcount\b', b.count, 44644e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 44744e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\bstartswith\b', b.startswith, 44844e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 44944e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea self.assertRaisesRegexp(TypeError, r'\bendswith\b', b.endswith, 45044e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea x, None, None, None) 45144e81687a22b5890e9fddc80de6afaeb1757aa6dJesus Cea 45214a7d6389fb453cca18d61bbe39deff7062bc66fSerhiy Storchaka def test_free_after_iterating(self): 45314a7d6389fb453cca18d61bbe39deff7062bc66fSerhiy Storchaka test.test_support.check_free_after_iterating(self, iter, self.type2test) 45414a7d6389fb453cca18d61bbe39deff7062bc66fSerhiy Storchaka test.test_support.check_free_after_iterating(self, reversed, self.type2test) 45514a7d6389fb453cca18d61bbe39deff7062bc66fSerhiy Storchaka 4561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 4571a6387e68300b6f554f4f4f044491b7034733442Christian Heimesclass ByteArrayTest(BaseBytesTest): 4581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes type2test = bytearray 4591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 4601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_nohash(self): 4611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, hash, bytearray()) 4621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 4631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_bytearray_api(self): 4641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes short_sample = b"Hello world\n" 4651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes sample = short_sample + b"\0"*(20 - len(short_sample)) 4661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes tfn = tempfile.mktemp() 4671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 4681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Prepare 4691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes with open(tfn, "wb") as f: 4701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes f.write(short_sample) 4711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test readinto 4721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes with open(tfn, "rb") as f: 4731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(20) 4741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes n = f.readinto(b) 4751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(n, len(short_sample)) 4761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Python 2.x 4771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b_sample = (ord(s) for s in sample) 4781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(list(b), list(b_sample)) 4791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test writing in binary mode 4801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes with open(tfn, "wb") as f: 4811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes f.write(b) 4821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes with open(tfn, "rb") as f: 4831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f.read(), sample) 4841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Text mode is ambiguous; don't test 4851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes finally: 4861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 4871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes os.remove(tfn) 4881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except os.error: 4891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 4901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 4911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_reverse(self): 4921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'hello') 4931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.reverse(), None) 4941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'olleh') 4951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'hello1') # test even number of items 4961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.reverse() 4971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'1olleh') 4981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray() 4991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.reverse() 5001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertFalse(b) 5011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_regexps(self): 5031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def by(s): 5041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes return bytearray(map(ord, s)) 5051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = by("Hello, world") 5061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(re.findall(r"\w+", b), [by("Hello"), by("world")]) 5071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_setitem(self): 5091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray([1, 2, 3]) 5101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[1] = 100 5111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([1, 100, 3])) 5121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[-1] = 200 5131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([1, 100, 200])) 5143e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b[0] = Indexable(10) 5151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([10, 100, 200])) 5161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 5171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[3] = 0 5181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("Didn't raise IndexError") 5191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except IndexError: 5201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 5211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 5221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[-10] = 0 5231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("Didn't raise IndexError") 5241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except IndexError: 5251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 5261a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 5271a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[0] = 256 5281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("Didn't raise ValueError") 5291a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except ValueError: 5301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 5311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 5323e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b[0] = Indexable(-1) 5331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("Didn't raise ValueError") 5341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except ValueError: 5351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 5361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 5371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[0] = None 5381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("Didn't raise TypeError") 5391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except TypeError: 5401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 5411a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5421a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_delitem(self): 5431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(range(10)) 5441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del b[0] 5451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(range(1, 10))) 5461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del b[-1] 5471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(range(1, 9))) 5481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del b[4] 5491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([1, 2, 3, 4, 6, 7, 8])) 5501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_setslice(self): 5521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(range(10)) 5531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(list(b), list(range(10))) 5541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[0:5] = bytearray([1, 1, 1, 1, 1]) 5561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([1, 1, 1, 1, 1, 5, 6, 7, 8, 9])) 5571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del b[0:-5] 5591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([5, 6, 7, 8, 9])) 5601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[0:0] = bytearray([0, 1, 2, 3, 4]) 5621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(range(10))) 5631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[-7:-3] = bytearray([100, 101]) 5651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([0, 1, 2, 100, 101, 7, 8, 9])) 5661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[3:5] = [3, 4, 5, 6] 5681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(range(10))) 5691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 5701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[3:0] = [42, 42, 42] 5711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray([0, 1, 2, 42, 42, 42, 3, 4, 5, 6, 7, 8, 9])) 5721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 57367dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[3:] = b'foo' 57467dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti self.assertEqual(b, bytearray([0, 1, 2, 102, 111, 111])) 57567dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 57667dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[:3] = memoryview(b'foo') 57767dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti self.assertEqual(b, bytearray([102, 111, 111, 102, 111, 111])) 57867dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 57967dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[3:4] = [] 58067dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti self.assertEqual(b, bytearray([102, 111, 111, 111, 111])) 58167dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 58267dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[1:] = list(b'uuuu') # this works only on Python2 58367dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti self.assertEqual(b, bytearray([102, 117, 117, 117, 117])) 58467dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 58567dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti for elem in [5, -5, 0, long(10e20), u'str', 2.3, [u'a', u'b'], [[]]]: 58667dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti with self.assertRaises(TypeError): 58767dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[3:4] = elem 58867dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 58967dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti for elem in [[254, 255, 256], [-256, 9000]]: 59067dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti with self.assertRaises(ValueError): 59167dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti b[3:4] = elem 59267dc4a87fccb7ec52323ba26d536654698ae8cbaEzio Melotti 5931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_extended_set_del_slice(self): 59436ecd676eac6c9d7ace41a1ff35124912371e91dMark Dickinson indices = (0, None, 1, 3, 19, 300, 1<<333, -1, -2, -31, -300) 5951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for start in indices: 5961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for stop in indices: 5971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Skip invalid step 0 5981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for step in indices[1:]: 5991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes L = list(range(255)) 6001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(L) 6011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Make sure we have a slice of exactly the right length, 6021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # but with different data. 6031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes data = L[start:stop:step] 6041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes data.reverse() 6051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes L[start:stop:step] = data 6061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[start:stop:step] = data 6072623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, bytearray(L)) 6081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del L[start:stop:step] 6101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes del b[start:stop:step] 6112623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, bytearray(L)) 6121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_setslice_trap(self): 6141a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # This test verifies that we correctly handle assigning self 6151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # to a slice of self (the old Lambert Meertens trap). 6161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(range(256)) 6171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b[8:] = b 6181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(list(range(8)) + list(range(256)))) 6191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_iconcat(self): 6211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b"abc") 6221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b1 = b 6231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += b"def" 6241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"abcdef") 6251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b1) 6265c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b is b1) 6271a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += b"xyz" 6281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"abcdefxyz") 6291a6387e68300b6f554f4f4f044491b7034733442Christian Heimes try: 6301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += u"" 6311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes except TypeError: 6321a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 6331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes else: 6341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.fail("bytes += unicode didn't raise TypeError") 6351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_irepeat(self): 6371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b"abc") 6381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b1 = b 6391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b *= 3 6401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"abcabcabc") 6411a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b1) 6425c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b is b1) 6431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_irepeat_1char(self): 6451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b"x") 6461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b1 = b 6471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b *= 100 6481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"x"*100) 6491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b1) 6505c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b is b1) 6511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 6521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_alloc(self): 6531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray() 6541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes alloc = b.__alloc__() 6555c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(alloc >= 0) 6561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes seq = [alloc] 6571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for i in range(100): 6581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += b"x" 6591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes alloc = b.__alloc__() 660ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertGreater(alloc, len(b)) # including trailing null byte 6611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes if alloc not in seq: 6621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes seq.append(alloc) 6631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 664ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka def test_init_alloc(self): 665ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka b = bytearray() 666ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka def g(): 667ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka for i in range(1, 100): 668ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka yield i 669ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka a = list(b) 670ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertEqual(a, list(range(1, len(a)+1))) 671ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertEqual(len(b), len(a)) 672ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertLessEqual(len(b), i) 673ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka alloc = b.__alloc__() 674ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertGreater(alloc, len(b)) # including trailing null byte 675ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka b.__init__(g()) 676ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertEqual(list(b), list(range(1, 100))) 677ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertEqual(len(b), 99) 678ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka alloc = b.__alloc__() 679ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka self.assertGreater(alloc, len(b)) 680ab766350b665ff2cafb92191a7cd720a1ebf6fe7Serhiy Storchaka 6811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_extend(self): 6821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes orig = b'hello' 6831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = bytearray(orig) 6841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.extend(a) 6851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, orig + orig) 6861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a[5:], orig) 6871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = bytearray(b'') 6881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test iterators that don't have a __length_hint__ 6891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.extend(map(ord, orig * 25)) 6901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.extend(ord(x) for x in orig * 25) 6911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, orig * 50) 6921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a[-5:], orig) 6931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = bytearray(b'') 6941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.extend(iter(map(ord, orig * 50))) 6951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, orig * 50) 6961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a[-5:], orig) 6971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = bytearray(b'') 6981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.extend(list(map(ord, orig * 50))) 6991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, orig * 50) 7001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a[-5:], orig) 7011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = bytearray(b'') 7021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, a.extend, [0, 1, 2, 256]) 7031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, a.extend, [0, 1, 2, -1]) 7041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(len(a), 0) 7053e483f643de3d38125a7ca04bb424323cf736762Georg Brandl a = bytearray(b'') 7063e483f643de3d38125a7ca04bb424323cf736762Georg Brandl a.extend([Indexable(ord('a'))]) 7073e483f643de3d38125a7ca04bb424323cf736762Georg Brandl self.assertEqual(a, b'a') 7081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 7091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_remove(self): 7101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'hello') 7111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.remove(ord('l')) 7121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'helo') 7131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.remove(ord('l')) 7141a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'heo') 7151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, lambda: b.remove(ord('l'))) 7161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(ValueError, lambda: b.remove(400)) 7171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: b.remove(u'e')) 7181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # remove first and last 7191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.remove(ord('o')) 7201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.remove(ord('h')) 7211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'e') 7221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: b.remove(u'e')) 7233e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b.remove(Indexable(ord('e'))) 7243e483f643de3d38125a7ca04bb424323cf736762Georg Brandl self.assertEqual(b, b'') 7251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 726c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka # test values outside of the ascii range: (0, 127) 727c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka c = bytearray([126, 127, 128, 129]) 728c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka c.remove(127) 729c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka self.assertEqual(c, bytearray([126, 128, 129])) 730c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka c.remove(129) 731c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka self.assertEqual(c, bytearray([126, 128])) 732c742dff16a8dd6979a7857948f63f99f391bb369Serhiy Storchaka 7331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_pop(self): 7341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'world') 7351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.pop(), ord('d')) 7361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.pop(0), ord('w')) 7371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.pop(-2), ord('r')) 7381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(IndexError, lambda: b.pop(10)) 739680e6eb54f01610f44843ed3f0a1ea8dd69b9603Eli Bendersky self.assertRaises(IndexError, lambda: bytearray().pop()) 740c8a7c7c3b9c28dd2c0f9b81d807f8c7f60cb0924Mark Dickinson # test for issue #6846 741c8a7c7c3b9c28dd2c0f9b81d807f8c7f60cb0924Mark Dickinson self.assertEqual(bytearray(b'\xff').pop(), 0xff) 7421a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 7431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_nosort(self): 7441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(AttributeError, lambda: bytearray().sort()) 7451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 7461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_append(self): 7471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'hell') 7481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.append(ord('o')) 7491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'hello') 7501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b.append(100), None) 7511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray() 7521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.append(ord('A')) 7531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(len(b), 1) 7541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(TypeError, lambda: b.append(u'o')) 7553e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b = bytearray() 7563e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b.append(Indexable(ord('A'))) 7573e483f643de3d38125a7ca04bb424323cf736762Georg Brandl self.assertEqual(b, b'A') 7581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 7591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_insert(self): 7601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(b'msssspp') 7611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.insert(1, ord('i')) 7621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.insert(4, ord('i')) 7631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.insert(-2, ord('i')) 7641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b.insert(1000, ord('i')) 7651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'mississippi') 766efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou # allowed in 2.x 7673e483f643de3d38125a7ca04bb424323cf736762Georg Brandl #self.assertRaises(TypeError, lambda: b.insert(0, b'1')) 7683e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b = bytearray() 7693e483f643de3d38125a7ca04bb424323cf736762Georg Brandl b.insert(0, Indexable(ord('A'))) 7703e483f643de3d38125a7ca04bb424323cf736762Georg Brandl self.assertEqual(b, b'A') 7711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 77246cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson def test_copied(self): 77346cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson # Issue 4348. Make sure that operations that don't mutate the array 77446cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson # copy the bytes. 77546cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson b = bytearray(b'abc') 776d3b5a7985d81fd28fe970ab5d7429fa57e723e2cBenjamin Peterson self.assertFalse(b is b.replace(b'abc', b'cde', 0)) 77746cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson 77846cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson t = bytearray([i for i in range(256)]) 77946cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson x = bytearray(b'') 78046cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson self.assertFalse(x is x.translate(t)) 78146cc6d11020d0bfa7b245b18679a613e9bc2b325Benjamin Peterson 7821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_partition_bytearray_doesnt_share_nullstring(self): 7831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a, b, c = bytearray(b"x").partition(b"y") 7841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"") 7851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 7865c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b is not c) 7871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += b"!" 7881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 7891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a, b, c = bytearray(b"x").partition(b"y") 7901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"") 7911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 7921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Same for rpartition 7931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b, c, a = bytearray(b"x").rpartition(b"y") 7941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"") 7951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 7965c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(b is not c) 7971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b += b"!" 7981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 7991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes c, b, a = bytearray(b"x").rpartition(b"y") 8001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b"") 8011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b"") 8021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 803efa45f35b529a61aceb4e1266ded7a0b268b0c17Antoine Pitrou def test_resize_forbidden(self): 804ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # #4509: can't resize a bytearray when there are buffer exports, even 805ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # if it wouldn't reallocate the underlying buffer. 806ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # Furthermore, no destructive changes to the buffer may be applied 807ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # before raising the error. 808ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou b = bytearray(range(10)) 809ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou v = memoryview(b) 810ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou def resize(n): 811ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou b[1:-1] = range(n + 1, 2*n - 1) 812ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou resize(10) 813ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou orig = b[:] 814ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, resize, 11) 8152623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 816ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, resize, 9) 8172623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 818ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, resize, 0) 8192623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 820ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # Other operations implying resize 821ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, b.pop, 0) 8222623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 823ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, b.remove, b[1]) 8242623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 825ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou def delitem(): 826ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou del b[1] 827ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, delitem) 8282623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 829ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou # deleting a non-contiguous slice 830ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou def delslice(): 831ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou b[1:-1:2] = b"" 832ae5beceb35384da8eed64940e5632d62c4907576Antoine Pitrou self.assertRaises(BufferError, delslice) 8332623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(b, orig) 8341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 835e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou def test_empty_bytearray(self): 836e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou # Issue #7561: operations on empty bytearrays could crash in many 837e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou # situations, due to a fragile implementation of the 838e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou # PyByteArray_AS_STRING() C macro. 839e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou self.assertRaises(ValueError, int, bytearray(b'')) 840e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou 8410ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka def test_exhausted_iterator(self): 8420ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka a = self.type2test([1, 2, 3]) 8430ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka exhit = iter(a) 8440ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka empit = iter(a) 8450ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka for x in exhit: # exhaust the iterator 8460ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka next(empit) # not exhausted 8470ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka a.append(9) 8480ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka self.assertEqual(list(exhit), []) 8490ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka self.assertEqual(list(empit), [9]) 8500ed3891915425b1af26e26c4c5d350e85e7ea4cfSerhiy Storchaka self.assertEqual(a, self.type2test([1, 2, 3, 9])) 851e80a6a4ead1da87d2a4149bfcbb95c1a3320dbc2Antoine Pitrou 8521a6387e68300b6f554f4f4f044491b7034733442Christian Heimesclass AssortedBytesTest(unittest.TestCase): 8531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # 8541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test various combinations of bytes and bytearray 8551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # 8561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8579b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna @check_bytes_warnings 8581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_repr_str(self): 8591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for f in str, repr: 8601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(bytearray()), "bytearray(b'')") 8611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')") 8621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(bytearray([0, 1, 254, 255])), 8631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes "bytearray(b'\\x00\\x01\\xfe\\xff')") 8641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(b"abc"), "b'abc'") 8651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(b"'"), '''b"'"''') # ''' 8661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' 8671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_compare_bytes_to_bytearray(self): 8691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" == bytes(b"abc"), True) 8701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" != bytes(b"abc"), True) 8711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" <= bytes(b"abc"), True) 8721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" < bytes(b"abc"), True) 8731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" >= bytes(b"ab"), True) 8741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" > bytes(b"ab"), True) 8751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" != bytes(b"abc"), False) 8771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" == bytes(b"abc"), False) 8781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" > bytes(b"abc"), False) 8791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"ab" >= bytes(b"abc"), False) 8801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" < bytes(b"ab"), False) 8811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b"abc" <= bytes(b"ab"), False) 8821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") == b"abc", True) 8841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") != b"abc", True) 8851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") <= b"abc", True) 8861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") < b"abc", True) 8871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") >= b"ab", True) 8881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") > b"ab", True) 8891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") != b"abc", False) 8911a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") == b"abc", False) 8921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") > b"abc", False) 8931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"ab") >= b"abc", False) 8941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") < b"ab", False) 8951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(bytes(b"abc") <= b"ab", False) 8961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 8974216aa1e52380ecc17566d0c60cac51834cfb22cStefan Krah @test.test_support.requires_docstrings 8981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_doc(self): 899bc27c6a5aa75a8f52304ecd311fbadef4ec621ceFlorent Xicluna self.assertIsNotNone(bytearray.__doc__) 9005c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) 901bc27c6a5aa75a8f52304ecd311fbadef4ec621ceFlorent Xicluna self.assertIsNotNone(bytes.__doc__) 9025c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) 9031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_from_bytearray(self): 9051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes sample = bytes(b"Hello world\n\x80\x81\xfe\xff") 9061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes buf = memoryview(sample) 9071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = bytearray(buf) 9081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(sample)) 9091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9109b90cd1f7b7fa658a48389ca599cd6ffde922e34Florent Xicluna @check_bytes_warnings 9111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_to_str(self): 9121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(b''), "b''") 9131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(b'x'), "b'x'") 9141a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(b'\x80'), "b'\\x80'") 9151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(bytearray(b'')), "bytearray(b'')") 9161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')") 9171a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')") 9181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_literal(self): 9201a6387e68300b6f554f4f4f044491b7034733442Christian Heimes tests = [ 9211a6387e68300b6f554f4f4f044491b7034733442Christian Heimes (b"Wonderful spam", "Wonderful spam"), 9221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes (br"Wonderful spam too", "Wonderful spam too"), 9231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes (b"\xaa\x00\000\200", "\xaa\x00\000\200"), 9241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes (br"\xaa\x00\000\200", r"\xaa\x00\000\200"), 9251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ] 9261a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for b, s in tests: 9271a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, bytearray(s, 'latin-1')) 9281a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for c in range(128, 256): 9291a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertRaises(SyntaxError, eval, 9301a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 'b"%s"' % chr(c)) 9311a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9321a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_translate(self): 9331a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = b'hello' 9346425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl ba = bytearray(b) 9351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes rosetta = bytearray(range(0, 256)) 9361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes rosetta[ord('o')] = ord('e') 9371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes c = b.translate(rosetta, b'l') 9381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b, b'hello') 9391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(c, b'hee') 9406425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl c = ba.translate(rosetta, b'l') 9416425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertEqual(ba, b'hello') 9426425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertEqual(c, b'hee') 9436425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl c = b.translate(None, b'e') 9446425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertEqual(c, b'hllo') 9456425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl c = ba.translate(None, b'e') 9466425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertEqual(c, b'hllo') 9476425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertRaises(TypeError, b.translate, None, None) 9486425a2fa8f354e755f876f2dea708697e42cc9fdGeorg Brandl self.assertRaises(TypeError, ba.translate, None, None) 9491a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9501a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_split_bytearray(self): 9511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b']) 9521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_rsplit_bytearray(self): 9541a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(b'a b'.rsplit(memoryview(b' ')), [b'a', b'b']) 9551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Optimizations: 9571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # __iter__? (optimization) 9581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # __reversed__? (optimization) 9591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9601a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # XXX More string methods? (Those that don't use character properties) 9611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # There are tests in string_tests.py that are more 963f1669a390d262bf138cd8dc954443fb0e3c8c85eMartin Panter # comprehensive for things like partition, etc. 9641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Unfortunately they are all bundled with tests that 9651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # are not appropriate for bytes 9661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # I've started porting some of those into bytearray_tests.py, we should port 9681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # the rest that make sense (the code can be cleaned up to use modern 9691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # unittest methods at the same time). 9701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 97186e0d5761177ef3fe7b50f7e9f235c70960d7834Martin Panterclass BytearrayPEP3137Test(unittest.TestCase): 9721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def marshal(self, x): 9731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes return bytearray(x) 9741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_returns_new_copy(self): 9761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes val = self.marshal(b'1234') 9771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # On immutable types these MAY return a reference to themselves 9781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # but on mutable types like bytearray they MUST return a new copy. 9791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for methname in ('zfill', 'rjust', 'ljust', 'center'): 9801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes method = getattr(val, methname) 9811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes newval = method(3) 9821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(val, newval) 9831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertTrue(val is not newval, 9841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes methname+' returned self on a mutable object') 9855f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou for expr in ('val.split()[0]', 'val.rsplit()[0]', 9865f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou 'val.partition(".")[0]', 'val.rpartition(".")[2]', 9875f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou 'val.splitlines()[0]', 'val.replace("", "")'): 9885f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou newval = eval(expr) 9895f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou self.assertEqual(val, newval) 9905f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou self.assertTrue(val is not newval, 9915f76d132a56a92f1911e16afb59443d5b44f8d32Antoine Pitrou expr+' returned val on a mutable object') 9921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 99486e0d5761177ef3fe7b50f7e9f235c70960d7834Martin Panterclass ByteArrayAsStringTest(test.string_tests.CommonTest, 99586e0d5761177ef3fe7b50f7e9f235c70960d7834Martin Panter test.string_tests.NonStringModuleTest): 99686e0d5761177ef3fe7b50f7e9f235c70960d7834Martin Panter type2test = bytearray 9971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 9981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Currently the bytes containment testing uses a single integer 9991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # value. This may not be the final design, but until then the 10001a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # bytes section with in a bytes containment not valid 10011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_contains(self): 10021a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10031a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_expandtabs(self): 10041a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10051a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_upper(self): 10061a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10071a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_lower(self): 10081a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10091a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_hash(self): 10101a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # XXX check this out 10111a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10121a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10131a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10141a6387e68300b6f554f4f4f044491b7034733442Christian Heimesclass ByteArraySubclass(bytearray): 10151a6387e68300b6f554f4f4f044491b7034733442Christian Heimes pass 10161a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10171a6387e68300b6f554f4f4f044491b7034733442Christian Heimesclass ByteArraySubclassTest(unittest.TestCase): 10181a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10191a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_basic(self): 10205c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(issubclass(ByteArraySubclass, bytearray)) 1021b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(ByteArraySubclass(), bytearray) 10221a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10231a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a, b = b"abcd", b"efgh" 10241a6387e68300b6f554f4f4f044491b7034733442Christian Heimes _a, _b = ByteArraySubclass(a), ByteArraySubclass(b) 10251a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10261a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # test comparison operators with subclass instances 10275c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_a == _a) 10285c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_a != _b) 10295c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_a < _b) 10305c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_a <= _b) 10315c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_b >= _a) 10325c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_b > _a) 10335c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(_a is not a) 10341a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10351a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # test concat of subclass instances 10361a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a + b, _a + _b) 10371a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a + b, a + _b) 10381a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a + b, _a + b) 10391a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10401a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # test repeat 10415c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(a*5 == _a*5) 10421a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10431a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_join(self): 10441a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Make sure join returns a NEW object for single item sequences 10451a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # involving a subclass. 10461a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Make sure that it is of the appropriate type. 10471a6387e68300b6f554f4f4f044491b7034733442Christian Heimes s1 = ByteArraySubclass(b"abcd") 10481a6387e68300b6f554f4f4f044491b7034733442Christian Heimes s2 = bytearray().join([s1]) 10495c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(s1 is not s2) 10505c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(type(s2) is bytearray, type(s2)) 10511a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10521a6387e68300b6f554f4f4f044491b7034733442Christian Heimes # Test reverse, calling join on subclass 10531a6387e68300b6f554f4f4f044491b7034733442Christian Heimes s3 = s1.join([b"abcd"]) 10545c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(type(s3) is bytearray) 10551a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10561a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_pickle(self): 10571a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = ByteArraySubclass(b"abcd") 10581a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.x = 10 10591a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.y = ByteArraySubclass(b"efgh") 1060592c2755677d77061ceb99607c10fa7d70e5c2ddHirokazu Yamamoto for proto in range(pickle.HIGHEST_PROTOCOL + 1): 10611a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = pickle.loads(pickle.dumps(a, proto)) 10621a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertNotEqual(id(a), id(b)) 10631a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, b) 10641a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a.x, b.x) 10651a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a.y, b.y) 10661a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(type(a), type(b)) 10671a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(type(a.y), type(b.y)) 10681a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10691a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_copy(self): 10701a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a = ByteArraySubclass(b"abcd") 10711a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.x = 10 10721a6387e68300b6f554f4f4f044491b7034733442Christian Heimes a.y = ByteArraySubclass(b"efgh") 10731a6387e68300b6f554f4f4f044491b7034733442Christian Heimes for copy_method in (copy.copy, copy.deepcopy): 10741a6387e68300b6f554f4f4f044491b7034733442Christian Heimes b = copy_method(a) 10751a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertNotEqual(id(a), id(b)) 10761a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a, b) 10771a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a.x, b.x) 10781a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(a.y, b.y) 10791a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(type(a), type(b)) 10801a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(type(a.y), type(b.y)) 10811a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10821a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def test_init_override(self): 10831a6387e68300b6f554f4f4f044491b7034733442Christian Heimes class subclass(bytearray): 10841a6387e68300b6f554f4f4f044491b7034733442Christian Heimes def __init__(self, newarg=1, *args, **kwargs): 10851a6387e68300b6f554f4f4f044491b7034733442Christian Heimes bytearray.__init__(self, *args, **kwargs) 10861a6387e68300b6f554f4f4f044491b7034733442Christian Heimes x = subclass(4, source=b"abcd") 10871a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(x, b"abcd") 10881a6387e68300b6f554f4f4f044491b7034733442Christian Heimes x = subclass(newarg=4, source=b"abcd") 10891a6387e68300b6f554f4f4f044491b7034733442Christian Heimes self.assertEqual(x, b"abcd") 10901a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 10911a6387e68300b6f554f4f4f044491b7034733442Christian Heimesdef test_main(): 10921a6387e68300b6f554f4f4f044491b7034733442Christian Heimes #test.test_support.run_unittest(BytesTest) 10931a6387e68300b6f554f4f4f044491b7034733442Christian Heimes #test.test_support.run_unittest(AssortedBytesTest) 10941a6387e68300b6f554f4f4f044491b7034733442Christian Heimes test.test_support.run_unittest( 10951a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ByteArrayTest, 10961a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ByteArrayAsStringTest, 10971a6387e68300b6f554f4f4f044491b7034733442Christian Heimes ByteArraySubclassTest, 10981a6387e68300b6f554f4f4f044491b7034733442Christian Heimes BytearrayPEP3137Test) 10991a6387e68300b6f554f4f4f044491b7034733442Christian Heimes 11001a6387e68300b6f554f4f4f044491b7034733442Christian Heimesif __name__ == "__main__": 11011a6387e68300b6f554f4f4f044491b7034733442Christian Heimes test_main() 1102