14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"""Unit tests for the bytes and bytearray types. 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoXXX This is a mess. Common tests should be moved to buffer_tests.py, 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaowhich itself ought to be unified with string_tests.py (and the latter 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoshould be modernized). 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport re 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport copy 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport functools 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport pickle 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport tempfile 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport test.test_support 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport test.string_tests 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport test.buffer_tests 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif sys.flags.bytes_warning: 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def check_bytes_warnings(func): 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @functools.wraps(func) 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def wrapper(*args, **kw): 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test.test_support.check_warnings(('', BytesWarning)): 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return func(*args, **kw) 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return wrapper 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoelse: 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # no-op 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def check_bytes_warnings(func): 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return func 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Indexable: 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, value=0): 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.value = value 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __index__(self): 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.value 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BaseBytesTest(unittest.TestCase): 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_basics(self): 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test() 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(b), self.type2test) 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.__class__, self.type2test) 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_empty_sequence(self): 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test() 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(b), 0) 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[0]) 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[1]) 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[sys.maxint]) 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[sys.maxint+1]) 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[10**100]) 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-1]) 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-2]) 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-sys.maxint]) 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-sys.maxint-1]) 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-sys.maxint-2]) 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b[-10**100]) 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_list(self): 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ints = list(range(256)) 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(i for i in ints) 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(b), 256) 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(b), ints) 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_index(self): 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test([Indexable(), Indexable(1), Indexable(254), 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Indexable(255)]) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(b), [0, 1, 254, 255]) 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [Indexable(-1)]) 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [Indexable(256)]) 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_ssize(self): 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(0), b'') 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(1), b'\x00') 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(5), b'\x00\x00\x00\x00\x00') 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, -1) 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test('0', 'ascii'), b'0') 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b'0'), b'0') 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, self.type2test, sys.maxsize + 1) 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor_type_errors(self): 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, 0.0) 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class C: 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # allowed in 2.x 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertRaises(TypeError, self.type2test, ["0"]) 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, [0.0]) 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, [None]) 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, [C()]) 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor_value_errors(self): 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [-1]) 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [-sys.maxint]) 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [-sys.maxint-1]) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [-sys.maxint-2]) 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [-10**100]) 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [256]) 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [257]) 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [sys.maxint]) 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [sys.maxint+1]) 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test, [10**100]) 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_compare(self): 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b1 = self.type2test([1, 2, 3]) 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b2 = self.type2test([1, 2, 3]) 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b3 = self.type2test([1, 3]) 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b1, b2) 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b2 != b3) 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b1 <= b2) 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b1 <= b3) 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b1 < b3) 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b1 >= b2) 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b3 >= b2) 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b3 > b2) 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b1 != b2) 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b2 == b3) 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b1 > b2) 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b1 > b3) 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b1 >= b3) 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b1 < b2) 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b3 < b2) 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b3 <= b2) 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @check_bytes_warnings 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_compare_to_str(self): 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Byte comparisons with unicode should always fail! 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test this for all expected byte orders and Unicode character sizes 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"\0a\0b\0c") == u"abc", False) 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"\0\0\0a\0\0\0b\0\0\0c") == u"abc", False) 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"a\0b\0c\0") == u"abc", False) 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"a\0\0\0b\0\0\0c\0\0\0") == u"abc", False) 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test() == unicode(), False) 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test() != unicode(), True) 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_reversed(self): 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao input = list(map(ord, "Hello")) 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(input) 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao output = list(reversed(b)) 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao input.reverse() 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(output, input) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getslice(self): 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def by(s): 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.type2test(map(ord, s)) 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = by("Hello, world") 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[:5], by("Hello")) 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[1:5], by("ello")) 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[5:7], by(", ")) 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[7:], by("world")) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[7:12], by("world")) 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[7:100], by("world")) 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[:-7], by("Hello")) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-11:-7], by("ello")) 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-7:-5], by(", ")) 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-5:], by("world")) 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-5:12], by("world")) 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-5:100], by("world")) 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[-100:5], by("Hello")) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extended_getslice(self): 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test extended slicing by comparing with list slicing. 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao L = list(range(255)) 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(L) 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for start in indices: 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for stop in indices: 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Skip step 0 (invalid) 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for step in indices[1:]: 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[start:stop:step], self.type2test(L[start:stop:step])) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_encoding(self): 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sample = u"Hello world\n\u1234\u5678\u9abc\udef0" 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for enc in ("utf8", "utf16"): 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(sample, enc) 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, self.type2test(sample.encode(enc))) 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(UnicodeEncodeError, self.type2test, sample, "latin1") 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(sample, "latin1", "ignore") 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, self.type2test(sample[:-4], "utf-8")) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_decode(self): 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sample = u"Hello world\n\u1234\u5678\u9abc\def0\def0" 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for enc in ("utf8", "utf16"): 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(sample, enc) 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.decode(enc), sample) 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sample = u"Hello world\n\x80\x81\xfe\xff" 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(sample, "latin1") 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(UnicodeDecodeError, b.decode, "utf8") 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n") 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.decode(errors="ignore", encoding="utf8"), 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Hello world\n") 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_int(self): 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(0) 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, self.type2test()) 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(10) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, self.type2test([0]*10)) 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(10000) 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, self.type2test([0]*10000)) 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_concat(self): 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b1 = self.type2test(b"abc") 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b2 = self.type2test(b"def") 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b1 + b2, b"abcdef") 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b1 + bytes(b"def"), b"abcdef") 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"def") + b1, b"defabc") 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: b1 + u"def") 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: u"abc" + b2) 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_repeat(self): 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in b"abc", self.type2test(b"abc"): 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b * 3, b"abcabcabc") 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b * 0, b"") 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b * -1, b"") 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: b * 3.14) 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: 3.14 * b) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX Shouldn't bytes and bytearray agree on what to raise? 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises((OverflowError, MemoryError), 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lambda: b * sys.maxsize) 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_repeat_1char(self): 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b'x')*100, self.type2test([ord('x')]*100)) 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_contains(self): 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b"abc") 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(ord('a'), b) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(int(ord('a')), b) 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(200, b) 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, lambda: 300 in b) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, lambda: -1 in b) 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: None in b) 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: float(ord('a')) in b) 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: u"a" in b) 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in bytes, bytearray: 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b""), b) 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"a"), b) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"b"), b) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"c"), b) 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"ab"), b) 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"bc"), b) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(f(b"abc"), b) 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(f(b"ac"), b) 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(f(b"d"), b) 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(f(b"dab"), b) 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(f(b"abd"), b) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_fromhex(self): 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test.fromhex) 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test.fromhex, 1) 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test.fromhex(u''), self.type2test()) 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray([0x1a, 0x2b, 0x30]) 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test.fromhex(u'1a2B30'), b) 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test.fromhex(u' 1A 2B 30 '), b) 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test.fromhex(u'0000'), b'\0\0') 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test.fromhex, u'a') 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test.fromhex, u'rt') 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test.fromhex, u'1a b cd') 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test.fromhex, u'\x00') 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, self.type2test.fromhex, u'12 \x00 34') 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_join(self): 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"").join([]), b"") 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"").join([b""]), b"") 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for lst in [[b"abc"], [b"a", b"bc"], [b"ab", b"c"], [b"a", b"b", b"c"]]: 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lst = list(map(self.type2test, lst)) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"").join(lst), b"abc") 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"").join(tuple(lst)), b"abc") 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b"").join(iter(lst)), b"abc") 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b".").join([b"ab", b"cd"]), b"ab.cd") 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX more... 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_count(self): 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.count(b'i'), 4) 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.count(b'ss'), 2) 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.count(b'w'), 0) 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_startswith(self): 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'hello') 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(self.type2test().startswith(b"anything")) 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.startswith(b"hello")) 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.startswith(b"hel")) 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.startswith(b"h")) 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b.startswith(b"hellow")) 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b.startswith(b"ha")) 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_endswith(self): 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'hello') 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(bytearray().endswith(b"anything")) 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.endswith(b"hello")) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.endswith(b"llo")) 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b.endswith(b"o")) 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b.endswith(b"whello")) 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b.endswith(b"no")) 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_find(self): 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'ss'), 2) 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'ss', 3), 5) 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'ss', 1, 7), 2) 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'ss', 1, 3), -1) 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'w'), -1) 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.find(b'mississippian'), -1) 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rfind(self): 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rfind(b'ss'), 5) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rfind(b'ss', 3), 5) 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rfind(b'ss', 0, 6), 2) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rfind(b'w'), -1) 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rfind(b'mississippian'), -1) 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_index(self): 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'world') 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.index(b'w'), 0) 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.index(b'orl'), 1) 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, b.index, b'worm') 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, b.index, b'ldo') 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rindex(self): 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX could be more rigorous 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'world') 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rindex(b'w'), 0) 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rindex(b'orl'), 1) 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, b.rindex, b'worm') 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, b.rindex, b'ldo') 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_replace(self): 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.replace(b'i', b'a'), b'massassappa') 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.replace(b'ss', b'x'), b'mixixippi') 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_split(self): 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(b'i'), [b'm', b'ss', b'ss', b'pp', b'']) 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(b'ss'), [b'mi', b'i', b'ippi']) 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(b'w'), [b]) 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_split_whitespace(self): 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in (b' arf barf ', b'arf\tbarf', b'arf\nbarf', b'arf\rbarf', 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b'arf\fbarf', b'arf\vbarf'): 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b) 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(), [b'arf', b'barf']) 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(None), [b'arf', b'barf']) 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(None, 2), [b'arf', b'barf']) 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in (b'a\x1Cb', b'a\x1Db', b'a\x1Eb', b'a\x1Fb'): 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b) 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(), [b]) 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').split(None, 0), [b'a bb c ']) 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').split(None, 1), [b'a', b'bb c ']) 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').split(None, 2), [b'a', b'bb', b'c ']) 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').split(None, 3), [b'a', b'bb', b'c']) 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_split_string_error(self): 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test(b'a b').split, u' ') 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_split_unicodewhitespace(self): 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.split(), [b'\x1c\x1d\x1e\x1f']) 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rsplit(self): 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(b'i'), [b'm', b'ss', b'ss', b'pp', b'']) 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(b'ss'), [b'mi', b'i', b'ippi']) 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(b'w'), [b]) 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rsplit_whitespace(self): 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in (b' arf barf ', b'arf\tbarf', b'arf\nbarf', b'arf\rbarf', 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b'arf\fbarf', b'arf\vbarf'): 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b) 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(), [b'arf', b'barf']) 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(None), [b'arf', b'barf']) 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(None, 2), [b'arf', b'barf']) 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 0), [b' a bb c']) 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 1), [b' a bb', b'c']) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 2), [b' a', b'bb', b'c']) 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b' a bb c ').rsplit(None, 3), [b'a', b'bb', b'c']) 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rsplit_string_error(self): 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test(b'a b').rsplit, u' ') 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rsplit_unicodewhitespace(self): 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F") 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rsplit(), [b'\x1c\x1d\x1e\x1f']) 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_partition(self): 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.partition(b'ss'), (b'mi', b'ss', b'issippi')) 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.partition(b'w'), (b'mississippi', b'', b'')) 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rpartition(self): 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rpartition(b'ss'), (b'missi', b'ss', b'ippi')) 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rpartition(b'i'), (b'mississipp', b'i', b'')) 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rpartition(b'w'), (b'', b'', b'mississippi')) 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pickling(self): 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for proto in range(pickle.HIGHEST_PROTOCOL + 1): 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0": 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b) 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ps = pickle.dumps(b, proto) 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao q = pickle.loads(ps) 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, q) 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_strip(self): 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b'i'), b'mississipp') 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b'm'), b'ississippi') 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b'pi'), b'mississ') 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b'im'), b'ssissipp') 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b'pim'), b'ssiss') 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(b), b'') 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_lstrip(self): 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(b'i'), b'mississippi') 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(b'm'), b'ississippi') 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(b'pi'), b'mississippi') 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(b'im'), b'ssissippi') 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(b'pim'), b'ssissippi') 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rstrip(self): 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'mississippi') 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(b'i'), b'mississipp') 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(b'm'), b'mississippi') 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(b'pi'), b'mississ') 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(b'im'), b'mississipp') 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(b'pim'), b'mississ') 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_strip_whitespace(self): 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b' \t\n\r\f\vabc \t\n\r\f\v') 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.strip(), b'abc') 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.lstrip(), b'abc \t\n\r\f\v') 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.rstrip(), b' \t\n\r\f\vabc') 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_strip_bytearray(self): 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b'abc').strip(memoryview(b'ac')), b'b') 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b'abc').lstrip(memoryview(b'ac')), b'bc') 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(b'abc').rstrip(memoryview(b'ac')), b'ab') 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_strip_string_error(self): 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test(b'abc').strip, u'b') 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test(b'abc').lstrip, u'b') 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test(b'abc').rstrip, u'b') 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_ord(self): 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'\0A\x7f\x80\xff') 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual([ord(b[i:i+1]) for i in range(len(b))], 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [0, 65, 127, 128, 255]) 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_none_arguments(self): 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # issue 11828 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'hello') 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l = self.type2test(b'l') 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao h = self.type2test(b'h') 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = self.type2test(b'x') 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao o = self.type2test(b'o') 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.find(l, None)) 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.find(l, -2, None)) 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.find(l, None, -2)) 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(0, b.find(h, None, None)) 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.rfind(l, None)) 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.rfind(l, -2, None)) 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.rfind(l, None, -2)) 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(0, b.rfind(h, None, None)) 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.index(l, None)) 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.index(l, -2, None)) 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.index(l, None, -2)) 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(0, b.index(h, None, None)) 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.rindex(l, None)) 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(3, b.rindex(l, -2, None)) 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.rindex(l, None, -2)) 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(0, b.rindex(h, None, None)) 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(2, b.count(l, None)) 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(1, b.count(l, -2, None)) 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(1, b.count(l, None, -2)) 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(0, b.count(x, None, None)) 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.endswith(o, None)) 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.endswith(o, -2, None)) 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.endswith(l, None, -2)) 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(False, b.endswith(x, None, None)) 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.startswith(h, None)) 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.startswith(l, -2, None)) 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(True, b.startswith(h, None, -2)) 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(False, b.startswith(x, None, None)) 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_find_etc_raise_correct_error_messages(self): 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # issue 11828 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = self.type2test(b'hello') 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = self.type2test(b'x') 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\bfind\b', b.find, 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\brfind\b', b.rfind, 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\bindex\b', b.index, 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\brindex\b', b.rindex, 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\bcount\b', b.count, 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\bstartswith\b', b.startswith, 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaisesRegexp(TypeError, r'\bendswith\b', b.endswith, 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x, None, None, None) 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ByteArrayTest(BaseBytesTest): 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = bytearray 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nohash(self): 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, hash, bytearray()) 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_bytearray_api(self): 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao short_sample = b"Hello world\n" 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sample = short_sample + b"\0"*(20 - len(short_sample)) 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tfn = tempfile.mktemp() 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Prepare 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(tfn, "wb") as f: 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.write(short_sample) 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test readinto 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(tfn, "rb") as f: 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(20) 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n = f.readinto(b) 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(n, len(short_sample)) 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Python 2.x 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b_sample = (ord(s) for s in sample) 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(b), list(b_sample)) 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test writing in binary mode 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(tfn, "wb") as f: 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.write(b) 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(tfn, "rb") as f: 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f.read(), sample) 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Text mode is ambiguous; don't test 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.remove(tfn) 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except os.error: 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_reverse(self): 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'hello') 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.reverse(), None) 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'olleh') 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'hello1') # test even number of items 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.reverse() 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'1olleh') 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray() 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.reverse() 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b) 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_regexps(self): 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def by(s): 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return bytearray(map(ord, s)) 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = by("Hello, world") 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(re.findall(r"\w+", b), [by("Hello"), by("world")]) 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setitem(self): 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray([1, 2, 3]) 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[1] = 100 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([1, 100, 3])) 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[-1] = 200 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([1, 100, 200])) 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0] = Indexable(10) 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([10, 100, 200])) 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3] = 0 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Didn't raise IndexError") 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except IndexError: 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[-10] = 0 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Didn't raise IndexError") 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except IndexError: 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0] = 256 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Didn't raise ValueError") 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0] = Indexable(-1) 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Didn't raise ValueError") 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0] = None 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Didn't raise TypeError") 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except TypeError: 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_delitem(self): 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(range(10)) 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[0] 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(range(1, 10))) 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[-1] 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(range(1, 9))) 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[4] 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([1, 2, 3, 4, 6, 7, 8])) 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setslice(self): 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(range(10)) 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(b), list(range(10))) 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0:5] = bytearray([1, 1, 1, 1, 1]) 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([1, 1, 1, 1, 1, 5, 6, 7, 8, 9])) 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[0:-5] 6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([5, 6, 7, 8, 9])) 6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[0:0] = bytearray([0, 1, 2, 3, 4]) 6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(range(10))) 6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[-7:-3] = bytearray([100, 101]) 6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([0, 1, 2, 100, 101, 7, 8, 9])) 6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:5] = [3, 4, 5, 6] 6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(range(10))) 6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:0] = [42, 42, 42] 6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([0, 1, 2, 42, 42, 42, 3, 4, 5, 6, 7, 8, 9])) 6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:] = b'foo' 6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([0, 1, 2, 102, 111, 111])) 6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[:3] = memoryview(b'foo') 6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([102, 111, 111, 102, 111, 111])) 6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:4] = [] 6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([102, 111, 111, 111, 111])) 6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[1:] = list(b'uuuu') # this works only on Python2 6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray([102, 117, 117, 117, 117])) 6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for elem in [5, -5, 0, long(10e20), u'str', 2.3, [u'a', u'b'], [[]]]: 6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(TypeError): 6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:4] = elem 6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for elem in [[254, 255, 256], [-256, 9000]]: 6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(ValueError): 6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[3:4] = elem 6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extended_set_del_slice(self): 6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao indices = (0, None, 1, 3, 19, 300, 1<<333, -1, -2, -31, -300) 6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for start in indices: 6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for stop in indices: 6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Skip invalid step 0 6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for step in indices[1:]: 6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao L = list(range(255)) 6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(L) 6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure we have a slice of exactly the right length, 6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # but with different data. 6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = L[start:stop:step] 6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data.reverse() 6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao L[start:stop:step] = data 6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[start:stop:step] = data 6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(L)) 6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del L[start:stop:step] 6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[start:stop:step] 6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(L)) 6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setslice_trap(self): 6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # This test verifies that we correctly handle assigning self 6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # to a slice of self (the old Lambert Meertens trap). 6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(range(256)) 6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[8:] = b 6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(list(range(8)) + list(range(256)))) 6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iconcat(self): 6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b"abc") 6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b1 = b 6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += b"def" 6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"abcdef") 6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b1) 6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b is b1) 6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += b"xyz" 6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"abcdefxyz") 6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += u"" 6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except TypeError: 6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("bytes += unicode didn't raise TypeError") 7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_irepeat(self): 7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b"abc") 7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b1 = b 7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b *= 3 7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"abcabcabc") 7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b1) 7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b is b1) 7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_irepeat_1char(self): 7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b"x") 7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b1 = b 7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b *= 100 7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"x"*100) 7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b1) 7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b is b1) 7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_alloc(self): 7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray() 7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao alloc = b.__alloc__() 7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(alloc >= 0) 7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao seq = [alloc] 7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in range(100): 7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += b"x" 7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao alloc = b.__alloc__() 7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(alloc >= len(b)) 7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if alloc not in seq: 7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao seq.append(alloc) 7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extend(self): 7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao orig = b'hello' 7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(orig) 7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(a) 7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, orig + orig) 7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[5:], orig) 7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(b'') 7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test iterators that don't have a __length_hint__ 7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(map(ord, orig * 25)) 7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(ord(x) for x in orig * 25) 7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, orig * 50) 7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-5:], orig) 7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(b'') 7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(iter(map(ord, orig * 50))) 7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, orig * 50) 7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-5:], orig) 7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(b'') 7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(list(map(ord, orig * 50))) 7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, orig * 50) 7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-5:], orig) 7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(b'') 7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.extend, [0, 1, 2, 256]) 7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.extend, [0, 1, 2, -1]) 7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(a), 0) 7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = bytearray(b'') 7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend([Indexable(ord('a'))]) 7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b'a') 7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_remove(self): 7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'hello') 7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.remove(ord('l')) 7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'helo') 7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.remove(ord('l')) 7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'heo') 7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, lambda: b.remove(ord('l'))) 7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, lambda: b.remove(400)) 7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: b.remove(u'e')) 7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # remove first and last 7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.remove(ord('o')) 7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.remove(ord('h')) 7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'e') 7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: b.remove(u'e')) 7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.remove(Indexable(ord('e'))) 7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'') 7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pop(self): 7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'world') 7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.pop(), ord('d')) 7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.pop(0), ord('w')) 7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.pop(-2), ord('r')) 7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: b.pop(10)) 7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, lambda: bytearray().pop()) 7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test for issue #6846 7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytearray(b'\xff').pop(), 0xff) 7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nosort(self): 7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(AttributeError, lambda: bytearray().sort()) 7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_append(self): 7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'hell') 7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.append(ord('o')) 7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'hello') 7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b.append(100), None) 7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray() 7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.append(ord('A')) 7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(b), 1) 7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, lambda: b.append(u'o')) 7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray() 7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.append(Indexable(ord('A'))) 7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'A') 7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_insert(self): 8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'msssspp') 8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.insert(1, ord('i')) 8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.insert(4, ord('i')) 8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.insert(-2, ord('i')) 8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.insert(1000, ord('i')) 8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'mississippi') 8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # allowed in 2.x 8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertRaises(TypeError, lambda: b.insert(0, b'1')) 8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray() 8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.insert(0, Indexable(ord('A'))) 8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'A') 8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_copied(self): 8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Issue 4348. Make sure that operations that don't mutate the array 8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # copy the bytes. 8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(b'abc') 8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(b is b.replace(b'abc', b'cde', 0)) 8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = bytearray([i for i in range(256)]) 8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = bytearray(b'') 8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(x is x.translate(t)) 8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_partition_bytearray_doesnt_share_nullstring(self): 8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, b, c = bytearray(b"x").partition(b"y") 8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"") 8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b is not c) 8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += b"!" 8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, b, c = bytearray(b"x").partition(b"y") 8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"") 8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Same for rpartition 8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b, c, a = bytearray(b"x").rpartition(b"y") 8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"") 8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(b is not c) 8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b += b"!" 8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c, b, a = bytearray(b"x").rpartition(b"y") 8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b"") 8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b"") 8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_resize_forbidden(self): 8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # #4509: can't resize a bytearray when there are buffer exports, even 8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # if it wouldn't reallocate the underlying buffer. 8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Furthermore, no destructive changes to the buffer may be applied 8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # before raising the error. 8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(range(10)) 8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = memoryview(b) 8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def resize(n): 8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[1:-1] = range(n + 1, 2*n - 1) 8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao resize(10) 8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao orig = b[:] 8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, resize, 11) 8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, resize, 9) 8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, resize, 0) 8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Other operations implying resize 8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, b.pop, 0) 8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, b.remove, b[1]) 8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def delitem(): 8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del b[1] 8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, delitem) 8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # deleting a non-contiguous slice 8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def delslice(): 8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[1:-1:2] = b"" 8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BufferError, delslice) 8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, orig) 8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_empty_bytearray(self): 8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Issue #7561: operations on empty bytearrays could crash in many 8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # situations, due to a fragile implementation of the 8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # PyByteArray_AS_STRING() C macro. 8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, int, bytearray(b'')) 8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass AssortedBytesTest(unittest.TestCase): 8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # 8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test various combinations of bytes and bytearray 8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # 8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @check_bytes_warnings 8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_repr_str(self): 8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in str, repr: 8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(bytearray()), "bytearray(b'')") 8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')") 8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(bytearray([0, 1, 254, 255])), 8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "bytearray(b'\\x00\\x01\\xfe\\xff')") 8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(b"abc"), "b'abc'") 8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(b"'"), '''b"'"''') # ''' 8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' 8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_compare_bytes_to_bytearray(self): 9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" == bytes(b"abc"), True) 9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" != bytes(b"abc"), True) 9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" <= bytes(b"abc"), True) 9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" < bytes(b"abc"), True) 9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" >= bytes(b"ab"), True) 9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" > bytes(b"ab"), True) 9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" != bytes(b"abc"), False) 9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" == bytes(b"abc"), False) 9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" > bytes(b"abc"), False) 9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"ab" >= bytes(b"abc"), False) 9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" < bytes(b"ab"), False) 9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b"abc" <= bytes(b"ab"), False) 9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") == b"abc", True) 9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") != b"abc", True) 9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") <= b"abc", True) 9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") < b"abc", True) 9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") >= b"ab", True) 9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") > b"ab", True) 9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") != b"abc", False) 9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") == b"abc", False) 9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") > b"abc", False) 9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"ab") >= b"abc", False) 9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") < b"ab", False) 9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bytes(b"abc") <= b"ab", False) 9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @test.test_support.requires_docstrings 9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_doc(self): 9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNotNone(bytearray.__doc__) 9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) 9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNotNone(bytes.__doc__) 9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) 9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_bytearray(self): 9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sample = bytes(b"Hello world\n\x80\x81\xfe\xff") 9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao buf = memoryview(sample) 9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = bytearray(buf) 9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(sample)) 9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @check_bytes_warnings 9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_to_str(self): 9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(b''), "b''") 9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(b'x'), "b'x'") 9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(b'\x80'), "b'\\x80'") 9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(bytearray(b'')), "bytearray(b'')") 9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')") 9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')") 9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_literal(self): 9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tests = [ 9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (b"Wonderful spam", "Wonderful spam"), 9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (br"Wonderful spam too", "Wonderful spam too"), 9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (b"\xaa\x00\000\200", "\xaa\x00\000\200"), 9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (br"\xaa\x00\000\200", r"\xaa\x00\000\200"), 9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b, s in tests: 9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, bytearray(s, 'latin-1')) 9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for c in range(128, 256): 9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(SyntaxError, eval, 9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'b"%s"' % chr(c)) 9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_translate(self): 9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = b'hello' 9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ba = bytearray(b) 9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rosetta = bytearray(range(0, 256)) 9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rosetta[ord('o')] = ord('e') 9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = b.translate(rosetta, b'l') 9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, b'hello') 9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b'hee') 9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = ba.translate(rosetta, b'l') 9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ba, b'hello') 9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b'hee') 9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = b.translate(None, b'e') 9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b'hllo') 9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = ba.translate(None, b'e') 9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(c, b'hllo') 9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.translate, None, None) 9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ba.translate, None, None) 9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_split_bytearray(self): 9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b']) 9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_rsplit_bytearray(self): 9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b'a b'.rsplit(memoryview(b' ')), [b'a', b'b']) 9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Optimizations: 9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # __iter__? (optimization) 9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # __reversed__? (optimization) 9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX More string methods? (Those that don't use character properties) 9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # There are tests in string_tests.py that are more 9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # comprehensive for things like split, partition, etc. 9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Unfortunately they are all bundled with tests that 9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # are not appropriate for bytes 9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # I've started porting some of those into bytearray_tests.py, we should port 9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # the rest that make sense (the code can be cleaned up to use modern 10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # unittest methods at the same time). 10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BytearrayPEP3137Test(unittest.TestCase, 10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test.buffer_tests.MixinBytesBufferCommonTests): 10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def marshal(self, x): 10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return bytearray(x) 10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_returns_new_copy(self): 10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao val = self.marshal(b'1234') 10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # On immutable types these MAY return a reference to themselves 10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # but on mutable types like bytearray they MUST return a new copy. 10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for methname in ('zfill', 'rjust', 'ljust', 'center'): 10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao method = getattr(val, methname) 10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao newval = method(3) 10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(val, newval) 10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(val is not newval, 10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao methname+' returned self on a mutable object') 10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for expr in ('val.split()[0]', 'val.rsplit()[0]', 10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'val.partition(".")[0]', 'val.rpartition(".")[2]', 10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'val.splitlines()[0]', 'val.replace("", "")'): 10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao newval = eval(expr) 10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(val, newval) 10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(val is not newval, 10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expr+' returned val on a mutable object') 10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass FixedStringTest(test.string_tests.BaseTest): 10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def fixtype(self, obj): 10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(obj, str): 10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return obj.encode("utf-8") 10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return super(FixedStringTest, self).fixtype(obj) 10314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Currently the bytes containment testing uses a single integer 10334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # value. This may not be the final design, but until then the 10344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # bytes section with in a bytes containment not valid 10354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_contains(self): 10364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_expandtabs(self): 10384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_upper(self): 10404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_lower(self): 10424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_hash(self): 10444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX check this out 10454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ByteArrayAsStringTest(FixedStringTest): 10494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = bytearray 10504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ByteArraySubclass(bytearray): 10534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ByteArraySubclassTest(unittest.TestCase): 10564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_basic(self): 10584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ByteArraySubclass, bytearray)) 10594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(ByteArraySubclass(), bytearray) 10604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, b = b"abcd", b"efgh" 10624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _a, _b = ByteArraySubclass(a), ByteArraySubclass(b) 10634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test comparison operators with subclass instances 10654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_a == _a) 10664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_a != _b) 10674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_a < _b) 10684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_a <= _b) 10694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_b >= _a) 10704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_b > _a) 10714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(_a is not a) 10724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test concat of subclass instances 10744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a + b, _a + _b) 10754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a + b, a + _b) 10764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a + b, _a + b) 10774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test repeat 10794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a*5 == _a*5) 10804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_join(self): 10824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure join returns a NEW object for single item sequences 10834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # involving a subclass. 10844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure that it is of the appropriate type. 10854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s1 = ByteArraySubclass(b"abcd") 10864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s2 = bytearray().join([s1]) 10874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(s1 is not s2) 10884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(type(s2) is bytearray, type(s2)) 10894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test reverse, calling join on subclass 10914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s3 = s1.join([b"abcd"]) 10924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(type(s3) is bytearray) 10934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pickle(self): 10954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ByteArraySubclass(b"abcd") 10964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.x = 10 10974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.y = ByteArraySubclass(b"efgh") 10984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for proto in range(pickle.HIGHEST_PROTOCOL + 1): 10994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = pickle.loads(pickle.dumps(a, proto)) 11004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 11014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 11024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.x, b.x) 11034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.y, b.y) 11044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a), type(b)) 11054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a.y), type(b.y)) 11064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_copy(self): 11084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ByteArraySubclass(b"abcd") 11094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.x = 10 11104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.y = ByteArraySubclass(b"efgh") 11114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for copy_method in (copy.copy, copy.deepcopy): 11124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = copy_method(a) 11134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 11144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 11154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.x, b.x) 11164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.y, b.y) 11174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a), type(b)) 11184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a.y), type(b.y)) 11194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_init_override(self): 11214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class subclass(bytearray): 11224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, newarg=1, *args, **kwargs): 11234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bytearray.__init__(self, *args, **kwargs) 11244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = subclass(4, source=b"abcd") 11254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x, b"abcd") 11264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = subclass(newarg=4, source=b"abcd") 11274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x, b"abcd") 11284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 11304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #test.test_support.run_unittest(BytesTest) 11314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #test.test_support.run_unittest(AssortedBytesTest) 11324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #test.test_support.run_unittest(BytesAsStringTest) 11334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test.test_support.run_unittest( 11344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ByteArrayTest, 11354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ByteArrayAsStringTest, 11364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ByteArraySubclassTest, 11374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao BytearrayPEP3137Test) 11384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__": 11404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 1141