@@ -632,6 +632,16 @@ def test_varkw(self):
632632 self .assertEqualCallArgs (f , '2, c=4, **collections.UserDict(b=3)' )
633633 self .assertEqualCallArgs (f , 'b=2, **collections.UserDict(a=3, c=4)' )
634634
635+ def test_varkw_only (self ):
636+ # issue11256:
637+ f = self .makeCallable ('**c' )
638+ self .assertEqualCallArgs (f , '' )
639+ self .assertEqualCallArgs (f , 'a=1' )
640+ self .assertEqualCallArgs (f , 'a=1, b=2' )
641+ self .assertEqualCallArgs (f , 'c=3, **{"a": 1, "b": 2}' )
642+ self .assertEqualCallArgs (f , '**collections.UserDict(a=1, b=2)' )
643+ self .assertEqualCallArgs (f , 'c=3, **collections.UserDict(a=1, b=2)' )
644+
635645 def test_keyword_only (self ):
636646 f = self .makeCallable ('a=3, *, c, d=2' )
637647 self .assertEqualCallArgs (f , 'c=3' )
@@ -643,6 +653,11 @@ def test_keyword_only(self):
643653 self .assertEqualException (f , 'a=3' )
644654 self .assertEqualException (f , 'd=4' )
645655
656+ f = self .makeCallable ('*, c, d=2' )
657+ self .assertEqualCallArgs (f , 'c=3' )
658+ self .assertEqualCallArgs (f , 'c=3, d=4' )
659+ self .assertEqualCallArgs (f , 'd=4, c=3' )
660+
646661 def test_multiple_features (self ):
647662 f = self .makeCallable ('a, b=2, *f, **g' )
648663 self .assertEqualCallArgs (f , '2, 3, 7' )
@@ -656,6 +671,17 @@ def test_multiple_features(self):
656671 '(4,[5,6])]), **collections.UserDict('
657672 'y=9, z=10)' )
658673
674+ f = self .makeCallable ('a, b=2, *f, x, y=99, **g' )
675+ self .assertEqualCallArgs (f , '2, 3, x=8' )
676+ self .assertEqualCallArgs (f , '2, 3, x=8, *[(4,[5,6]), 7]' )
677+ self .assertEqualCallArgs (f , '2, x=8, *[3, (4,[5,6]), 7], y=9, z=10' )
678+ self .assertEqualCallArgs (f , 'x=8, *[2, 3, (4,[5,6])], y=9, z=10' )
679+ self .assertEqualCallArgs (f , 'x=8, *collections.UserList('
680+ '[2, 3, (4,[5,6])]), q=0, **{"y":9, "z":10}' )
681+ self .assertEqualCallArgs (f , '2, x=8, *collections.UserList([3, '
682+ '(4,[5,6])]), q=0, **collections.UserDict('
683+ 'y=9, z=10)' )
684+
659685 def test_errors (self ):
660686 f0 = self .makeCallable ('' )
661687 f1 = self .makeCallable ('a, b' )
@@ -692,6 +718,13 @@ def test_errors(self):
692718 # - for functions and bound methods: unexpected keyword 'c'
693719 # - for unbound methods: multiple values for keyword 'a'
694720 #self.assertEqualException(f, '1, c=3, a=2')
721+ # issue11256:
722+ f3 = self .makeCallable ('**c' )
723+ self .assertEqualException (f3 , '1, 2' )
724+ self .assertEqualException (f3 , '1, 2, a=1, b=2' )
725+ f4 = self .makeCallable ('*, a, b=0' )
726+ self .assertEqualException (f3 , '1, 2' )
727+ self .assertEqualException (f3 , '1, 2, a=1, b=2' )
695728
696729class TestGetcallargsMethods (TestGetcallargsFunctions ):
697730
0 commit comments