@@ -1207,6 +1207,8 @@ class SubBytes(bytes):
1207
1207
class ByteArrayTest (BaseBytesTest , unittest .TestCase ):
1208
1208
type2test = bytearray
1209
1209
1210
+ _testcapi = import_helper .import_module ('_testcapi' )
1211
+
1210
1212
def test_getitem_error (self ):
1211
1213
b = bytearray (b'python' )
1212
1214
msg = "bytearray indices must be integers or slices"
@@ -1299,47 +1301,73 @@ def by(s):
1299
1301
self .assertEqual (re .findall (br"\w+" , b ), [by ("Hello" ), by ("world" )])
1300
1302
1301
1303
def test_setitem (self ):
1302
- b = bytearray ([1 , 2 , 3 ])
1303
- b [1 ] = 100
1304
- self .assertEqual (b , bytearray ([1 , 100 , 3 ]))
1305
- b [- 1 ] = 200
1306
- self .assertEqual (b , bytearray ([1 , 100 , 200 ]))
1307
- b [0 ] = Indexable (10 )
1308
- self .assertEqual (b , bytearray ([10 , 100 , 200 ]))
1309
- try :
1310
- b [3 ] = 0
1311
- self .fail ("Didn't raise IndexError" )
1312
- except IndexError :
1313
- pass
1314
- try :
1315
- b [- 10 ] = 0
1316
- self .fail ("Didn't raise IndexError" )
1317
- except IndexError :
1318
- pass
1319
- try :
1320
- b [0 ] = 256
1321
- self .fail ("Didn't raise ValueError" )
1322
- except ValueError :
1323
- pass
1324
- try :
1325
- b [0 ] = Indexable (- 1 )
1326
- self .fail ("Didn't raise ValueError" )
1327
- except ValueError :
1328
- pass
1329
- try :
1330
- b [0 ] = None
1331
- self .fail ("Didn't raise TypeError" )
1332
- except TypeError :
1333
- pass
1304
+ def setitem_as_mapping (b , i , val ):
1305
+ b [i ] = val
1306
+
1307
+ def setitem_as_sequence (b , i , val ):
1308
+ self ._testcapi .sequence_setitem (b , i , val )
1309
+
1310
+ def do_tests (setitem ):
1311
+ b = bytearray ([1 , 2 , 3 ])
1312
+ setitem (b , 1 , 100 )
1313
+ self .assertEqual (b , bytearray ([1 , 100 , 3 ]))
1314
+ setitem (b , - 1 , 200 )
1315
+ self .assertEqual (b , bytearray ([1 , 100 , 200 ]))
1316
+ setitem (b , 0 , Indexable (10 ))
1317
+ self .assertEqual (b , bytearray ([10 , 100 , 200 ]))
1318
+ try :
1319
+ setitem (b , 3 , 0 )
1320
+ self .fail ("Didn't raise IndexError" )
1321
+ except IndexError :
1322
+ pass
1323
+ try :
1324
+ setitem (b , - 10 , 0 )
1325
+ self .fail ("Didn't raise IndexError" )
1326
+ except IndexError :
1327
+ pass
1328
+ try :
1329
+ setitem (b , 0 , 256 )
1330
+ self .fail ("Didn't raise ValueError" )
1331
+ except ValueError :
1332
+ pass
1333
+ try :
1334
+ setitem (b , 0 , Indexable (- 1 ))
1335
+ self .fail ("Didn't raise ValueError" )
1336
+ except ValueError :
1337
+ pass
1338
+ try :
1339
+ setitem (b , 0 , None )
1340
+ self .fail ("Didn't raise TypeError" )
1341
+ except TypeError :
1342
+ pass
1343
+
1344
+ with self .subTest ("tp_as_mapping" ):
1345
+ do_tests (setitem_as_mapping )
1346
+
1347
+ with self .subTest ("tp_as_sequence" ):
1348
+ do_tests (setitem_as_sequence )
1334
1349
1335
1350
def test_delitem (self ):
1336
- b = bytearray (range (10 ))
1337
- del b [0 ]
1338
- self .assertEqual (b , bytearray (range (1 , 10 )))
1339
- del b [- 1 ]
1340
- self .assertEqual (b , bytearray (range (1 , 9 )))
1341
- del b [4 ]
1342
- self .assertEqual (b , bytearray ([1 , 2 , 3 , 4 , 6 , 7 , 8 ]))
1351
+ def del_as_mapping (b , i ):
1352
+ del b [i ]
1353
+
1354
+ def del_as_sequence (b , i ):
1355
+ self ._testcapi .sequence_delitem (b , i )
1356
+
1357
+ def do_tests (delete ):
1358
+ b = bytearray (range (10 ))
1359
+ delete (b , 0 )
1360
+ self .assertEqual (b , bytearray (range (1 , 10 )))
1361
+ delete (b , - 1 )
1362
+ self .assertEqual (b , bytearray (range (1 , 9 )))
1363
+ delete (b , 4 )
1364
+ self .assertEqual (b , bytearray ([1 , 2 , 3 , 4 , 6 , 7 , 8 ]))
1365
+
1366
+ with self .subTest ("tp_as_mapping" ):
1367
+ do_tests (del_as_mapping )
1368
+
1369
+ with self .subTest ("tp_as_sequence" ):
1370
+ do_tests (del_as_sequence )
1343
1371
1344
1372
def test_setslice (self ):
1345
1373
b = bytearray (range (10 ))
@@ -1711,6 +1739,8 @@ def test_repeat_after_setslice(self):
1711
1739
self .assertEqual (b3 , b'xcxcxc' )
1712
1740
1713
1741
def test_mutating_index (self ):
1742
+ # See gh-91153
1743
+
1714
1744
class Boom :
1715
1745
def __index__ (self ):
1716
1746
b .clear ()
@@ -1722,10 +1752,9 @@ def __index__(self):
1722
1752
b [0 ] = Boom ()
1723
1753
1724
1754
with self .subTest ("tp_as_sequence" ):
1725
- _testcapi = import_helper .import_module ('_testcapi' )
1726
1755
b = bytearray (b'Now you see me...' )
1727
1756
with self .assertRaises (IndexError ):
1728
- _testcapi .sequence_setitem (b , 0 , Boom ())
1757
+ self . _testcapi .sequence_setitem (b , 0 , Boom ())
1729
1758
1730
1759
1731
1760
class AssortedBytesTest (unittest .TestCase ):
0 commit comments