mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue #12170: The count(), find(), rfind(), index() and rindex() methods
of bytes and bytearray objects now accept an integer between 0 and 255 as their first argument. Patch by Petri Lehtinen.
This commit is contained in:
parent
407cfd1a26
commit
ac65d96777
7 changed files with 262 additions and 52 deletions
|
@ -293,10 +293,27 @@ class BaseBytesTest(unittest.TestCase):
|
|||
|
||||
def test_count(self):
|
||||
b = self.type2test(b'mississippi')
|
||||
i = 105
|
||||
p = 112
|
||||
w = 119
|
||||
|
||||
self.assertEqual(b.count(b'i'), 4)
|
||||
self.assertEqual(b.count(b'ss'), 2)
|
||||
self.assertEqual(b.count(b'w'), 0)
|
||||
|
||||
self.assertEqual(b.count(i), 4)
|
||||
self.assertEqual(b.count(w), 0)
|
||||
|
||||
self.assertEqual(b.count(b'i', 6), 2)
|
||||
self.assertEqual(b.count(b'p', 6), 2)
|
||||
self.assertEqual(b.count(b'i', 1, 3), 1)
|
||||
self.assertEqual(b.count(b'p', 7, 9), 1)
|
||||
|
||||
self.assertEqual(b.count(i, 6), 2)
|
||||
self.assertEqual(b.count(p, 6), 2)
|
||||
self.assertEqual(b.count(i, 1, 3), 1)
|
||||
self.assertEqual(b.count(p, 7, 9), 1)
|
||||
|
||||
def test_startswith(self):
|
||||
b = self.type2test(b'hello')
|
||||
self.assertFalse(self.type2test().startswith(b"anything"))
|
||||
|
@ -327,35 +344,81 @@ class BaseBytesTest(unittest.TestCase):
|
|||
|
||||
def test_find(self):
|
||||
b = self.type2test(b'mississippi')
|
||||
i = 105
|
||||
w = 119
|
||||
|
||||
self.assertEqual(b.find(b'ss'), 2)
|
||||
self.assertEqual(b.find(b'ss', 3), 5)
|
||||
self.assertEqual(b.find(b'ss', 1, 7), 2)
|
||||
self.assertEqual(b.find(b'ss', 1, 3), -1)
|
||||
self.assertEqual(b.find(b'w'), -1)
|
||||
self.assertEqual(b.find(b'mississippian'), -1)
|
||||
|
||||
self.assertEqual(b.find(i), 1)
|
||||
self.assertEqual(b.find(w), -1)
|
||||
|
||||
self.assertEqual(b.find(b'ss', 3), 5)
|
||||
self.assertEqual(b.find(b'ss', 1, 7), 2)
|
||||
self.assertEqual(b.find(b'ss', 1, 3), -1)
|
||||
|
||||
self.assertEqual(b.find(i, 6), 7)
|
||||
self.assertEqual(b.find(i, 1, 3), 1)
|
||||
self.assertEqual(b.find(w, 1, 3), -1)
|
||||
|
||||
def test_rfind(self):
|
||||
b = self.type2test(b'mississippi')
|
||||
i = 105
|
||||
w = 119
|
||||
|
||||
self.assertEqual(b.rfind(b'ss'), 5)
|
||||
self.assertEqual(b.rfind(b'ss', 3), 5)
|
||||
self.assertEqual(b.rfind(b'ss', 0, 6), 2)
|
||||
self.assertEqual(b.rfind(b'w'), -1)
|
||||
self.assertEqual(b.rfind(b'mississippian'), -1)
|
||||
|
||||
self.assertEqual(b.rfind(i), 10)
|
||||
self.assertEqual(b.rfind(w), -1)
|
||||
|
||||
self.assertEqual(b.rfind(b'ss', 3), 5)
|
||||
self.assertEqual(b.rfind(b'ss', 0, 6), 2)
|
||||
|
||||
self.assertEqual(b.rfind(i, 1, 3), 1)
|
||||
self.assertEqual(b.rfind(i, 3, 9), 7)
|
||||
self.assertEqual(b.rfind(w, 1, 3), -1)
|
||||
|
||||
def test_index(self):
|
||||
b = self.type2test(b'world')
|
||||
self.assertEqual(b.index(b'w'), 0)
|
||||
self.assertEqual(b.index(b'orl'), 1)
|
||||
self.assertRaises(ValueError, b.index, b'worm')
|
||||
self.assertRaises(ValueError, b.index, b'ldo')
|
||||
b = self.type2test(b'mississippi')
|
||||
i = 105
|
||||
w = 119
|
||||
|
||||
self.assertEqual(b.index(b'ss'), 2)
|
||||
self.assertRaises(ValueError, b.index, b'w')
|
||||
self.assertRaises(ValueError, b.index, b'mississippian')
|
||||
|
||||
self.assertEqual(b.index(i), 1)
|
||||
self.assertRaises(ValueError, b.index, w)
|
||||
|
||||
self.assertEqual(b.index(b'ss', 3), 5)
|
||||
self.assertEqual(b.index(b'ss', 1, 7), 2)
|
||||
self.assertRaises(ValueError, b.index, b'ss', 1, 3)
|
||||
|
||||
self.assertEqual(b.index(i, 6), 7)
|
||||
self.assertEqual(b.index(i, 1, 3), 1)
|
||||
self.assertRaises(ValueError, b.index, w, 1, 3)
|
||||
|
||||
def test_rindex(self):
|
||||
# XXX could be more rigorous
|
||||
b = self.type2test(b'world')
|
||||
self.assertEqual(b.rindex(b'w'), 0)
|
||||
self.assertEqual(b.rindex(b'orl'), 1)
|
||||
self.assertRaises(ValueError, b.rindex, b'worm')
|
||||
self.assertRaises(ValueError, b.rindex, b'ldo')
|
||||
b = self.type2test(b'mississippi')
|
||||
i = 105
|
||||
w = 119
|
||||
|
||||
self.assertEqual(b.rindex(b'ss'), 5)
|
||||
self.assertRaises(ValueError, b.rindex, b'w')
|
||||
self.assertRaises(ValueError, b.rindex, b'mississippian')
|
||||
|
||||
self.assertEqual(b.rindex(i), 10)
|
||||
self.assertRaises(ValueError, b.rindex, w)
|
||||
|
||||
self.assertEqual(b.rindex(b'ss', 3), 5)
|
||||
self.assertEqual(b.rindex(b'ss', 0, 6), 2)
|
||||
|
||||
self.assertEqual(b.rindex(i, 1, 3), 1)
|
||||
self.assertEqual(b.rindex(i, 3, 9), 7)
|
||||
self.assertRaises(ValueError, b.rindex, w, 1, 3)
|
||||
|
||||
def test_replace(self):
|
||||
b = self.type2test(b'mississippi')
|
||||
|
@ -552,6 +615,14 @@ class BaseBytesTest(unittest.TestCase):
|
|||
self.assertEqual(True, b.startswith(h, None, -2))
|
||||
self.assertEqual(False, b.startswith(x, None, None))
|
||||
|
||||
def test_integer_arguments_out_of_byte_range(self):
|
||||
b = self.type2test(b'hello')
|
||||
|
||||
for method in (b.count, b.find, b.index, b.rfind, b.rindex):
|
||||
self.assertRaises(ValueError, method, -1)
|
||||
self.assertRaises(ValueError, method, 256)
|
||||
self.assertRaises(ValueError, method, 9999)
|
||||
|
||||
def test_find_etc_raise_correct_error_messages(self):
|
||||
# issue 11828
|
||||
b = self.type2test(b'hello')
|
||||
|
@ -1161,9 +1232,11 @@ class FixedStringTest(test.string_tests.BaseTest):
|
|||
|
||||
class ByteArrayAsStringTest(FixedStringTest):
|
||||
type2test = bytearray
|
||||
contains_bytes = True
|
||||
|
||||
class BytesAsStringTest(FixedStringTest):
|
||||
type2test = bytes
|
||||
contains_bytes = True
|
||||
|
||||
|
||||
class SubclassTest(unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue