@@ -1225,6 +1225,8 @@ class SubBytes(bytes):
1225
1225
class ByteArrayTest (BaseBytesTest , unittest .TestCase ):
1226
1226
type2test = bytearray
1227
1227
1228
+ _testcapi = import_helper .import_module ('_testcapi' )
1229
+
1228
1230
def test_getitem_error (self ):
1229
1231
b = bytearray (b'python' )
1230
1232
msg = "bytearray indices must be integers or slices"
@@ -1317,47 +1319,73 @@ def by(s):
1317
1319
self .assertEqual (re .findall (br"\w+" , b ), [by ("Hello" ), by ("world" )])
1318
1320
1319
1321
def test_setitem (self ):
1320
- b = bytearray ([1 , 2 , 3 ])
1321
- b [1 ] = 100
1322
- self .assertEqual (b , bytearray ([1 , 100 , 3 ]))
1323
- b [- 1 ] = 200
1324
- self .assertEqual (b , bytearray ([1 , 100 , 200 ]))
1325
- b [0 ] = Indexable (10 )
1326
- self .assertEqual (b , bytearray ([10 , 100 , 200 ]))
1327
- try :
1328
- b [3 ] = 0
1329
- self .fail ("Didn't raise IndexError" )
1330
- except IndexError :
1331
- pass
1332
- try :
1333
- b [- 10 ] = 0
1334
- self .fail ("Didn't raise IndexError" )
1335
- except IndexError :
1336
- pass
1337
- try :
1338
- b [0 ] = 256
1339
- self .fail ("Didn't raise ValueError" )
1340
- except ValueError :
1341
- pass
1342
- try :
1343
- b [0 ] = Indexable (- 1 )
1344
- self .fail ("Didn't raise ValueError" )
1345
- except ValueError :
1346
- pass
1347
- try :
1348
- b [0 ] = None
1349
- self .fail ("Didn't raise TypeError" )
1350
- except TypeError :
1351
- pass
1322
+ def setitem_as_mapping (b , i , val ):
1323
+ b [i ] = val
1324
+
1325
+ def setitem_as_sequence (b , i , val ):
1326
+ self ._testcapi .sequence_setitem (b , i , val )
1327
+
1328
+ def do_tests (setitem ):
1329
+ b = bytearray ([1 , 2 , 3 ])
1330
+ setitem (b , 1 , 100 )
1331
+ self .assertEqual (b , bytearray ([1 , 100 , 3 ]))
1332
+ setitem (b , - 1 , 200 )
1333
+ self .assertEqual (b , bytearray ([1 , 100 , 200 ]))
1334
+ setitem (b , 0 , Indexable (10 ))
1335
+ self .assertEqual (b , bytearray ([10 , 100 , 200 ]))
1336
+ try :
1337
+ setitem (b , 3 , 0 )
1338
+ self .fail ("Didn't raise IndexError" )
1339
+ except IndexError :
1340
+ pass
1341
+ try :
1342
+ setitem (b , - 10 , 0 )
1343
+ self .fail ("Didn't raise IndexError" )
1344
+ except IndexError :
1345
+ pass
1346
+ try :
1347
+ setitem (b , 0 , 256 )
1348
+ self .fail ("Didn't raise ValueError" )
1349
+ except ValueError :
1350
+ pass
1351
+ try :
1352
+ setitem (b , 0 , Indexable (- 1 ))
1353
+ self .fail ("Didn't raise ValueError" )
1354
+ except ValueError :
1355
+ pass
1356
+ try :
1357
+ setitem (b , 0 , None )
1358
+ self .fail ("Didn't raise TypeError" )
1359
+ except TypeError :
1360
+ pass
1361
+
1362
+ with self .subTest ("tp_as_mapping" ):
1363
+ do_tests (setitem_as_mapping )
1364
+
1365
+ with self .subTest ("tp_as_sequence" ):
1366
+ do_tests (setitem_as_sequence )
1352
1367
1353
1368
def test_delitem (self ):
1354
- b = bytearray (range (10 ))
1355
- del b [0 ]
1356
- self .assertEqual (b , bytearray (range (1 , 10 )))
1357
- del b [- 1 ]
1358
- self .assertEqual (b , bytearray (range (1 , 9 )))
1359
- del b [4 ]
1360
- self .assertEqual (b , bytearray ([1 , 2 , 3 , 4 , 6 , 7 , 8 ]))
1369
+ def del_as_mapping (b , i ):
1370
+ del b [i ]
1371
+
1372
+ def del_as_sequence (b , i ):
1373
+ self ._testcapi .sequence_delitem (b , i )
1374
+
1375
+ def do_tests (delete ):
1376
+ b = bytearray (range (10 ))
1377
+ delete (b , 0 )
1378
+ self .assertEqual (b , bytearray (range (1 , 10 )))
1379
+ delete (b , - 1 )
1380
+ self .assertEqual (b , bytearray (range (1 , 9 )))
1381
+ delete (b , 4 )
1382
+ self .assertEqual (b , bytearray ([1 , 2 , 3 , 4 , 6 , 7 , 8 ]))
1383
+
1384
+ with self .subTest ("tp_as_mapping" ):
1385
+ do_tests (del_as_mapping )
1386
+
1387
+ with self .subTest ("tp_as_sequence" ):
1388
+ do_tests (del_as_sequence )
1361
1389
1362
1390
def test_setslice (self ):
1363
1391
b = bytearray (range (10 ))
@@ -1729,6 +1757,8 @@ def test_repeat_after_setslice(self):
1729
1757
self .assertEqual (b3 , b'xcxcxc' )
1730
1758
1731
1759
def test_mutating_index (self ):
1760
+ # See gh-91153
1761
+
1732
1762
class Boom :
1733
1763
def __index__ (self ):
1734
1764
b .clear ()
@@ -1740,10 +1770,9 @@ def __index__(self):
1740
1770
b [0 ] = Boom ()
1741
1771
1742
1772
with self .subTest ("tp_as_sequence" ):
1743
- _testcapi = import_helper .import_module ('_testcapi' )
1744
1773
b = bytearray (b'Now you see me...' )
1745
1774
with self .assertRaises (IndexError ):
1746
- _testcapi .sequence_setitem (b , 0 , Boom ())
1775
+ self . _testcapi .sequence_setitem (b , 0 , Boom ())
1747
1776
1748
1777
1749
1778
class AssortedBytesTest (unittest .TestCase ):
0 commit comments