@@ -628,6 +628,18 @@ class D(B, C): pass
628628 got = inspect .getmro (D )
629629 self .assertEqual (expected , got )
630630
631+ def assertArgSpecEquals (self , routine , args_e , varargs_e = None ,
632+ varkw_e = None , defaults_e = None , formatted = None ):
633+ with self .assertWarns (DeprecationWarning ):
634+ args , varargs , varkw , defaults = inspect .getargspec (routine )
635+ self .assertEqual (args , args_e )
636+ self .assertEqual (varargs , varargs_e )
637+ self .assertEqual (varkw , varkw_e )
638+ self .assertEqual (defaults , defaults_e )
639+ if formatted is not None :
640+ self .assertEqual (inspect .formatargspec (args , varargs , varkw , defaults ),
641+ formatted )
642+
631643 def assertFullArgSpecEquals (self , routine , args_e , varargs_e = None ,
632644 varkw_e = None , defaults_e = None ,
633645 kwonlyargs_e = [], kwonlydefaults_e = None ,
@@ -646,6 +658,23 @@ def assertFullArgSpecEquals(self, routine, args_e, varargs_e=None,
646658 kwonlyargs , kwonlydefaults , ann ),
647659 formatted )
648660
661+ def test_getargspec (self ):
662+ self .assertArgSpecEquals (mod .eggs , ['x' , 'y' ], formatted = '(x, y)' )
663+
664+ self .assertArgSpecEquals (mod .spam ,
665+ ['a' , 'b' , 'c' , 'd' , 'e' , 'f' ],
666+ 'g' , 'h' , (3 , 4 , 5 ),
667+ '(a, b, c, d=3, e=4, f=5, *g, **h)' )
668+
669+ self .assertRaises (ValueError , self .assertArgSpecEquals ,
670+ mod2 .keyworded , [])
671+
672+ self .assertRaises (ValueError , self .assertArgSpecEquals ,
673+ mod2 .annotated , [])
674+ self .assertRaises (ValueError , self .assertArgSpecEquals ,
675+ mod2 .keyword_only_arg , [])
676+
677+
649678 def test_getfullargspec (self ):
650679 self .assertFullArgSpecEquals (mod2 .keyworded , [], varargs_e = 'arg1' ,
651680 kwonlyargs_e = ['arg2' ],
@@ -659,19 +688,20 @@ def test_getfullargspec(self):
659688 kwonlyargs_e = ['arg' ],
660689 formatted = '(*, arg)' )
661690
662- def test_fullargspec_api_ignores_wrapped (self ):
691+ def test_argspec_api_ignores_wrapped (self ):
663692 # Issue 20684: low level introspection API must ignore __wrapped__
664693 @functools .wraps (mod .spam )
665694 def ham (x , y ):
666695 pass
667696 # Basic check
697+ self .assertArgSpecEquals (ham , ['x' , 'y' ], formatted = '(x, y)' )
668698 self .assertFullArgSpecEquals (ham , ['x' , 'y' ], formatted = '(x, y)' )
669699 self .assertFullArgSpecEquals (functools .partial (ham ),
670700 ['x' , 'y' ], formatted = '(x, y)' )
671701 # Other variants
672702 def check_method (f ):
673- self .assertFullArgSpecEquals (f , ['self' , 'x' , 'y' ],
674- formatted = '(self, x, y)' )
703+ self .assertArgSpecEquals (f , ['self' , 'x' , 'y' ],
704+ formatted = '(self, x, y)' )
675705 class C :
676706 @functools .wraps (mod .spam )
677707 def ham (self , x , y ):
@@ -749,11 +779,11 @@ def test_getfullagrspec_builtin_func_no_signature(self):
749779 with self .assertRaises (TypeError ):
750780 inspect .getfullargspec (builtin )
751781
752- def test_getfullargspec_method (self ):
782+ def test_getargspec_method (self ):
753783 class A (object ):
754784 def m (self ):
755785 pass
756- self .assertFullArgSpecEquals (A .m , ['self' ])
786+ self .assertArgSpecEquals (A .m , ['self' ])
757787
758788 def test_classify_newstyle (self ):
759789 class A (object ):
0 commit comments