@@ -3378,26 +3378,44 @@ def test_keyword_only_parameter(self):
3378
3378
ac_tester .keyword_only_parameter (1 )
3379
3379
self .assertEqual (ac_tester .keyword_only_parameter (a = 1 ), (1 ,))
3380
3380
3381
- def test_posonly_vararg (self ):
3382
- with self .assertRaises (TypeError ):
3383
- ac_tester .posonly_vararg ()
3384
- self .assertEqual (ac_tester .posonly_vararg (1 , 2 ), (1 , 2 , ()))
3385
- self .assertEqual (ac_tester .posonly_vararg (1 , b = 2 ), (1 , 2 , ()))
3386
- self .assertEqual (ac_tester .posonly_vararg (1 , 2 , 3 , 4 ), (1 , 2 , (3 , 4 )))
3387
- with self .assertRaises (TypeError ):
3388
- ac_tester .posonly_vararg (b = 4 )
3389
- with self .assertRaises (TypeError ):
3390
- ac_tester .posonly_vararg (1 , 2 , 3 , b = 4 )
3381
+ def test_varpos (self ):
3382
+ # fn(*args)
3383
+ fn = ac_tester .varpos
3384
+ self .assertEqual (fn (), ())
3385
+ self .assertEqual (fn (1 , 2 ), (1 , 2 ))
3386
+
3387
+ def test_posonly_varpos (self ):
3388
+ # fn(a, b, /, *args)
3389
+ fn = ac_tester .posonly_varpos
3390
+ self .assertRaises (TypeError , fn )
3391
+ self .assertRaises (TypeError , fn , 1 )
3392
+ self .assertRaises (TypeError , fn , 1 , b = 2 )
3393
+ self .assertEqual (fn (1 , 2 ), (1 , 2 , ()))
3394
+ self .assertEqual (fn (1 , 2 , 3 , 4 ), (1 , 2 , (3 , 4 )))
3391
3395
3392
- def test_vararg (self ):
3393
- with self .assertRaises (TypeError ):
3394
- ac_tester .vararg ()
3395
- with self .assertRaises (TypeError ):
3396
- ac_tester .vararg (1 , b = 2 )
3397
- self .assertEqual (ac_tester .vararg (1 , 2 , 3 , 4 ), (1 , (2 , 3 , 4 )))
3396
+ def test_posonly_poskw_varpos (self ):
3397
+ # fn(a, /, b, *args)
3398
+ fn = ac_tester .posonly_poskw_varpos
3399
+ self .assertRaises (TypeError , fn )
3400
+ self .assertEqual (fn (1 , 2 ), (1 , 2 , ()))
3401
+ self .assertEqual (fn (1 , b = 2 ), (1 , 2 , ()))
3402
+ self .assertEqual (fn (1 , 2 , 3 , 4 ), (1 , 2 , (3 , 4 )))
3403
+ self .assertRaises (TypeError , fn , b = 4 )
3404
+ self .assertRaises (TypeError , fn , 1 , 2 , 3 , b = 4 )
3405
+
3406
+ def test_poskw_varpos (self ):
3407
+ # fn(a, *args)
3408
+ fn = ac_tester .poskw_varpos
3409
+ self .assertRaises (TypeError , fn )
3410
+ self .assertRaises (TypeError , fn , 1 , b = 2 )
3411
+ self .assertEqual (fn (a = 1 ), (1 , ()))
3412
+ self .assertRaises (TypeError , fn , 1 , a = 2 )
3413
+ self .assertEqual (fn (1 ), (1 , ()))
3414
+ self .assertEqual (fn (1 , 2 , 3 , 4 ), (1 , (2 , 3 , 4 )))
3398
3415
3399
- def test_vararg_with_default (self ):
3400
- fn = ac_tester .vararg_with_default
3416
+ def test_poskw_varpos_kwonly_opt (self ):
3417
+ # fn(a, *args, b=False)
3418
+ fn = ac_tester .poskw_varpos_kwonly_opt
3401
3419
self .assertRaises (TypeError , fn )
3402
3420
self .assertRaises (TypeError , fn , 1 , a = 2 )
3403
3421
self .assertEqual (fn (1 , b = 2 ), (1 , (), True ))
@@ -3406,35 +3424,38 @@ def test_vararg_with_default(self):
3406
3424
self .assertEqual (fn (a = 1 ), (1 , (), False ))
3407
3425
self .assertEqual (fn (a = 1 , b = 2 ), (1 , (), True ))
3408
3426
3409
- def test_vararg_with_default2 (self ):
3410
- fn = ac_tester .vararg_with_default2
3427
+ def test_poskw_varpos_kwonly_opt2 (self ):
3428
+ # fn(a, *args, b=False, c=False)
3429
+ fn = ac_tester .poskw_varpos_kwonly_opt2
3411
3430
self .assertRaises (TypeError , fn )
3412
3431
self .assertRaises (TypeError , fn , 1 , a = 2 )
3413
- self .assertEqual (fn (1 , b = 2 ), (1 , (), 2 , None ))
3432
+ self .assertEqual (fn (1 , b = 2 ), (1 , (), 2 , False ))
3414
3433
self .assertEqual (fn (1 , b = 2 , c = 3 ), (1 , (), 2 , 3 ))
3415
- self .assertEqual (fn (1 , 2 , 3 ), (1 , (2 , 3 ), None , None ))
3416
- self .assertEqual (fn (1 , 2 , 3 , b = 4 ), (1 , (2 , 3 ), 4 , None ))
3434
+ self .assertEqual (fn (1 , 2 , 3 ), (1 , (2 , 3 ), False , False ))
3435
+ self .assertEqual (fn (1 , 2 , 3 , b = 4 ), (1 , (2 , 3 ), 4 , False ))
3417
3436
self .assertEqual (fn (1 , 2 , 3 , b = 4 , c = 5 ), (1 , (2 , 3 ), 4 , 5 ))
3418
- self .assertEqual (fn (a = 1 ), (1 , (), None , None ))
3419
- self .assertEqual (fn (a = 1 , b = 2 ), (1 , (), 2 , None ))
3437
+ self .assertEqual (fn (a = 1 ), (1 , (), False , False ))
3438
+ self .assertEqual (fn (a = 1 , b = 2 ), (1 , (), 2 , False ))
3420
3439
self .assertEqual (fn (a = 1 , b = 2 , c = 3 ), (1 , (), 2 , 3 ))
3421
3440
3422
- def test_vararg_with_only_defaults (self ):
3423
- self .assertEqual (ac_tester .vararg_with_only_defaults (), ((), None ))
3424
- self .assertEqual (ac_tester .vararg_with_only_defaults (b = 2 ), ((), 2 ))
3425
- self .assertEqual (ac_tester .vararg_with_only_defaults (1 , b = 2 ), ((1 , ), 2 ))
3426
- self .assertEqual (ac_tester .vararg_with_only_defaults (1 , 2 , 3 , 4 ), ((1 , 2 , 3 , 4 ), None ))
3427
- self .assertEqual (ac_tester .vararg_with_only_defaults (1 , 2 , 3 , 4 , b = 5 ), ((1 , 2 , 3 , 4 ), 5 ))
3428
-
3429
- def test_vararg_kwonly_req_opt (self ):
3430
- fn = ac_tester .vararg_kwonly_req_opt
3441
+ def test_varpos_kwonly_opt (self ):
3442
+ # fn(*args, b=False)
3443
+ fn = ac_tester .varpos_kwonly_opt
3444
+ self .assertEqual (fn (), ((), False ))
3445
+ self .assertEqual (fn (b = 2 ), ((), 2 ))
3446
+ self .assertEqual (fn (1 , b = 2 ), ((1 , ), 2 ))
3447
+ self .assertEqual (fn (1 , 2 , 3 , 4 ), ((1 , 2 , 3 , 4 ), False ))
3448
+ self .assertEqual (fn (1 , 2 , 3 , 4 , b = 5 ), ((1 , 2 , 3 , 4 ), 5 ))
3449
+
3450
+ def test_varpos_kwonly_req_opt (self ):
3451
+ fn = ac_tester .varpos_kwonly_req_opt
3431
3452
self .assertRaises (TypeError , fn )
3432
- self .assertEqual (fn (a = 1 ), ((), 1 , None , None ))
3433
- self .assertEqual (fn (a = 1 , b = 2 ), ((), 1 , 2 , None ))
3453
+ self .assertEqual (fn (a = 1 ), ((), 1 , False , False ))
3454
+ self .assertEqual (fn (a = 1 , b = 2 ), ((), 1 , 2 , False ))
3434
3455
self .assertEqual (fn (a = 1 , b = 2 , c = 3 ), ((), 1 , 2 , 3 ))
3435
3456
self .assertRaises (TypeError , fn , 1 )
3436
- self .assertEqual (fn (1 , a = 2 ), ((1 ,), 2 , None , None ))
3437
- self .assertEqual (fn (1 , a = 2 , b = 3 ), ((1 ,), 2 , 3 , None ))
3457
+ self .assertEqual (fn (1 , a = 2 ), ((1 ,), 2 , False , False ))
3458
+ self .assertEqual (fn (1 , a = 2 , b = 3 ), ((1 ,), 2 , 3 , False ))
3438
3459
self .assertEqual (fn (1 , a = 2 , b = 3 , c = 4 ), ((1 ,), 2 , 3 , 4 ))
3439
3460
3440
3461
def test_gh_32092_oob (self ):
@@ -3459,35 +3480,19 @@ def test_gh_99240_double_free(self):
3459
3480
ac_tester .gh_99240_double_free ('a' , '\0 b' )
3460
3481
3461
3482
def test_null_or_tuple_for_varargs (self ):
3483
+ # fn(name, *constraints, covariant=False)
3484
+ fn = ac_tester .null_or_tuple_for_varargs
3462
3485
# All of these should not crash:
3463
- valid_args_for_test = [
3464
- (('a' ,), {},
3465
- ('a' , (), False )),
3466
- (('a' , 1 , 2 , 3 ), {'covariant' : True },
3467
- ('a' , (1 , 2 , 3 ), True )),
3468
- ((), {'name' : 'a' },
3469
- ('a' , (), False )),
3470
- ((), {'name' : 'a' , 'covariant' : True },
3471
- ('a' , (), True )),
3472
- ((), {'covariant' : True , 'name' : 'a' },
3473
- ('a' , (), True )),
3474
- ]
3475
- for args , kwargs , expected in valid_args_for_test :
3476
- with self .subTest (args = args , kwargs = kwargs ):
3477
- self .assertEqual (
3478
- ac_tester .null_or_tuple_for_varargs (* args , ** kwargs ),
3479
- expected ,
3480
- )
3486
+ self .assertEqual (fn ('a' ), ('a' , (), False ))
3487
+ self .assertEqual (fn ('a' , 1 , 2 , 3 , covariant = True ), ('a' , (1 , 2 , 3 ), True ))
3488
+ self .assertEqual (fn (name = 'a' ), ('a' , (), False ))
3489
+ self .assertEqual (fn (name = 'a' , covariant = True ), ('a' , (), True ))
3490
+ self .assertEqual (fn (covariant = True , name = 'a' ), ('a' , (), True ))
3481
3491
3482
- def test_null_or_tuple_for_varargs_error (self ):
3483
- with self .assertRaises (TypeError ):
3484
- ac_tester .null_or_tuple_for_varargs (covariant = True )
3485
- with self .assertRaises (TypeError ):
3486
- ac_tester .null_or_tuple_for_varargs (1 , name = 'a' )
3487
- with self .assertRaises (TypeError ):
3488
- ac_tester .null_or_tuple_for_varargs (1 , 2 , 3 , name = 'a' , covariant = True )
3489
- with self .assertRaises (TypeError ):
3490
- ac_tester .null_or_tuple_for_varargs (1 , 2 , 3 , covariant = True , name = 'a' )
3492
+ self .assertRaises (TypeError , fn , covariant = True )
3493
+ self .assertRaises (TypeError , fn , 1 , name = 'a' )
3494
+ self .assertRaises (TypeError , fn , 1 , 2 , 3 , name = 'a' , covariant = True )
3495
+ self .assertRaises (TypeError , fn , 1 , 2 , 3 , covariant = True , name = 'a' )
3491
3496
3492
3497
def test_cloned_func_exception_message (self ):
3493
3498
incorrect_arg = - 1 # f1() and f2() accept a single str
@@ -3546,6 +3551,34 @@ def test_get_defining_class_arg(self):
3546
3551
with self .assertRaises (TypeError ):
3547
3552
obj .get_defining_class_arg ("arg1" , "arg2" )
3548
3553
3554
+ def test_defclass_varpos (self ):
3555
+ # fn(*args)
3556
+ cls = ac_tester .TestClass
3557
+ obj = cls ()
3558
+ fn = obj .defclass_varpos
3559
+ self .assertEqual (fn (), (cls , ()))
3560
+ self .assertEqual (fn (1 , 2 ), (cls , (1 , 2 )))
3561
+ fn = cls .defclass_varpos
3562
+ self .assertRaises (TypeError , fn )
3563
+ self .assertEqual (fn (obj ), (cls , ()))
3564
+ self .assertEqual (fn (obj , 1 , 2 ), (cls , (1 , 2 )))
3565
+
3566
+ def test_defclass_posonly_varpos (self ):
3567
+ # fn(a, b, /, *args)
3568
+ cls = ac_tester .TestClass
3569
+ obj = cls ()
3570
+ fn = obj .defclass_posonly_varpos
3571
+ self .assertRaises (TypeError , fn )
3572
+ self .assertRaises (TypeError , fn , 1 )
3573
+ self .assertEqual (fn (1 , 2 ), (cls , 1 , 2 , ()))
3574
+ self .assertEqual (fn (1 , 2 , 3 , 4 ), (cls , 1 , 2 , (3 , 4 )))
3575
+ fn = cls .defclass_posonly_varpos
3576
+ self .assertRaises (TypeError , fn )
3577
+ self .assertRaises (TypeError , fn , obj )
3578
+ self .assertRaises (TypeError , fn , obj , 1 )
3579
+ self .assertEqual (fn (obj , 1 , 2 ), (cls , 1 , 2 , ()))
3580
+ self .assertEqual (fn (obj , 1 , 2 , 3 , 4 ), (cls , 1 , 2 , (3 , 4 )))
3581
+
3549
3582
def test_depr_star_new (self ):
3550
3583
cls = ac_tester .DeprStarNew
3551
3584
cls ()
0 commit comments