@@ -1429,123 +1429,6 @@ def test_nested_sequence(self):
1429
1429
"argument 1 must be sequence of length 1, not 0" ):
1430
1430
parse (([],), {}, '(' + f + ')' , ['a' ])
1431
1431
1432
- def test_specific_type_errors (self ):
1433
- parse = _testcapi .parse_tuple_and_keywords
1434
-
1435
- def check (format , arg , expected , got = 'list' ):
1436
- errmsg = f'must be { expected } , not { got } '
1437
- with self .assertRaisesRegex (TypeError , errmsg ):
1438
- parse ((arg ,), {}, format , ['a' ])
1439
-
1440
- check ('k' , [], 'int' )
1441
- check ('k?' , [], 'int or None' )
1442
- check ('K' , [], 'int' )
1443
- check ('K?' , [], 'int or None' )
1444
- check ('c' , [], 'a byte string of length 1' )
1445
- check ('c?' , [], 'a byte string of length 1 or None' )
1446
- check ('c' , b'abc' , 'a byte string of length 1' ,
1447
- 'a bytes object of length 3' )
1448
- check ('c?' , b'abc' , 'a byte string of length 1 or None' ,
1449
- 'a bytes object of length 3' )
1450
- check ('c' , bytearray (b'abc' ), 'a byte string of length 1' ,
1451
- 'a bytearray object of length 3' )
1452
- check ('c?' , bytearray (b'abc' ), 'a byte string of length 1 or None' ,
1453
- 'a bytearray object of length 3' )
1454
- check ('C' , [], 'a unicode character' )
1455
- check ('C?' , [], 'a unicode character or None' )
1456
- check ('C' , 'abc' , 'a unicode character' ,
1457
- 'a string of length 3' )
1458
- check ('C?' , 'abc' , 'a unicode character or None' ,
1459
- 'a string of length 3' )
1460
- check ('s' , [], 'str' )
1461
- check ('s?' , [], 'str or None' )
1462
- check ('z' , [], 'str or None' )
1463
- check ('z?' , [], 'str or None' )
1464
- check ('es' , [], 'str' )
1465
- check ('es?' , [], 'str or None' )
1466
- check ('es#' , [], 'str' )
1467
- check ('es#?' , [], 'str or None' )
1468
- check ('et' , [], 'str, bytes or bytearray' )
1469
- check ('et?' , [], 'str, bytes, bytearray or None' )
1470
- check ('et#' , [], 'str, bytes or bytearray' )
1471
- check ('et#?' , [], 'str, bytes, bytearray or None' )
1472
- check ('w*' , [], 'read-write bytes-like object' )
1473
- check ('w*?' , [], 'read-write bytes-like object or None' )
1474
- check ('S' , [], 'bytes' )
1475
- check ('S?' , [], 'bytes or None' )
1476
- check ('U' , [], 'str' )
1477
- check ('U?' , [], 'str or None' )
1478
- check ('Y' , [], 'bytearray' )
1479
- check ('Y?' , [], 'bytearray or None' )
1480
- check ('(OO)' , 42 , '2-item tuple' , 'int' )
1481
- check ('(OO)?' , 42 , '2-item tuple or None' , 'int' )
1482
- check ('(OO)' , (1 , 2 , 3 ), 'tuple of length 2' , '3' )
1483
-
1484
- def test_nullable (self ):
1485
- parse = _testcapi .parse_tuple_and_keywords
1486
-
1487
- def check (format , arg , allows_none = False ):
1488
- # Because some format units (such as y*) require cleanup,
1489
- # we force the parsing code to perform the cleanup by adding
1490
- # an argument that always fails.
1491
- # By checking for an exception, we ensure that the parsing
1492
- # of the first argument was successful.
1493
- self .assertRaises (OverflowError , parse ,
1494
- (arg , 256 ), {}, format + '?b' , ['a' , 'b' ])
1495
- self .assertRaises (OverflowError , parse ,
1496
- (None , 256 ), {}, format + '?b' , ['a' , 'b' ])
1497
- self .assertRaises (OverflowError , parse ,
1498
- (arg , 256 ), {}, format + 'b' , ['a' , 'b' ])
1499
- self .assertRaises (OverflowError if allows_none else TypeError , parse ,
1500
- (None , 256 ), {}, format + 'b' , ['a' , 'b' ])
1501
-
1502
- check ('b' , 42 )
1503
- check ('B' , 42 )
1504
- check ('h' , 42 )
1505
- check ('H' , 42 )
1506
- check ('i' , 42 )
1507
- check ('I' , 42 )
1508
- check ('n' , 42 )
1509
- check ('l' , 42 )
1510
- check ('k' , 42 )
1511
- check ('L' , 42 )
1512
- check ('K' , 42 )
1513
- check ('f' , 2.5 )
1514
- check ('d' , 2.5 )
1515
- check ('D' , 2.5j )
1516
- check ('c' , b'a' )
1517
- check ('C' , 'a' )
1518
- check ('p' , True , allows_none = True )
1519
- check ('y' , b'buffer' )
1520
- check ('y*' , b'buffer' )
1521
- check ('y#' , b'buffer' )
1522
- check ('s' , 'string' )
1523
- check ('s*' , 'string' )
1524
- check ('s#' , 'string' )
1525
- check ('z' , 'string' , allows_none = True )
1526
- check ('z*' , 'string' , allows_none = True )
1527
- check ('z#' , 'string' , allows_none = True )
1528
- check ('w*' , bytearray (b'buffer' ))
1529
- check ('U' , 'string' )
1530
- check ('S' , b'bytes' )
1531
- check ('Y' , bytearray (b'bytearray' ))
1532
- check ('O' , object , allows_none = True )
1533
-
1534
- check ('(OO)' , (1 , 2 ))
1535
- self .assertEqual (parse ((((1 , 2 ), 3 ),), {}, '((OO)?O)' , ['a' ]), (1 , 2 , 3 ))
1536
- self .assertEqual (parse (((None , 3 ),), {}, '((OO)?O)' , ['a' ]), (NULL , NULL , 3 ))
1537
- self .assertEqual (parse ((((1 , 2 ), 3 ),), {}, '((OO)O)' , ['a' ]), (1 , 2 , 3 ))
1538
- self .assertRaises (TypeError , parse , ((None , 3 ),), {}, '((OO)O)' , ['a' ])
1539
-
1540
- parse ((None ,), {}, 'es?' , ['a' ])
1541
- parse ((None ,), {}, 'es#?' , ['a' ])
1542
- parse ((None ,), {}, 'et?' , ['a' ])
1543
- parse ((None ,), {}, 'et#?' , ['a' ])
1544
- parse ((None ,), {}, 'O!?' , ['a' ])
1545
- parse ((None ,), {}, 'O&?' , ['a' ])
1546
-
1547
- # TODO: More tests for es?, es#?, et?, et#?, O!, O&
1548
-
1549
1432
@unittest .skipIf (_testinternalcapi is None , 'needs _testinternalcapi' )
1550
1433
def test_gh_119213 (self ):
1551
1434
rc , out , err = script_helper .assert_python_ok ("-c" , """if True:
0 commit comments