@@ -587,6 +587,63 @@ def _fail(str, level=-1):
587587 if not standalone :
588588 pytest .fail (str )
589589
590+ #
591+ # Test function for the unit test
592+ #
593+ class simple_class :
594+ def simple_function (arg1 , arg2 , opt1 = None , ** kwargs ):
595+ """Simple function for testing."""
596+ kwargs ['test' ] = None
597+
598+ Failed = pytest .fail .Exception
599+
600+ doc_header = simple_class .simple_function .__doc__
601+ doc_parameters = "\n Parameters\n ----------\n "
602+ doc_arg1 = "\n arg1 : int\n Argument 1.\n "
603+ doc_arg2 = "\n arg2 : int\n Argument 2.\n "
604+ doc_arg2_nospace = "\n arg2: int\n Argument 2.\n "
605+ doc_arg3 = "\n arg3 : int\n Non-existent argument 1.\n "
606+ doc_opt1 = "\n opt1 : int\n Keyword argument 1.\n "
607+ doc_test = "\n test : int\n Internal keyword argument 1.\n "
608+ doc_returns = "\n Returns\n -------\n "
609+ doc_ret = "\n out : int\n "
610+ doc_ret_nospace = "\n out: int\n "
611+
612+ @pytest .mark .parametrize ("docstring, exception, match" , [
613+ (None , UserWarning , "missing docstring" ),
614+ (doc_header + doc_parameters + doc_arg1 + doc_arg2 + doc_opt1 +
615+ doc_test + doc_returns + doc_ret , None , "" ),
616+ (doc_header + doc_parameters + doc_arg1 + doc_arg2 + doc_opt1 + doc_test ,
617+ None , "" ), # no return section (OK)
618+ (doc_header + doc_parameters + doc_arg1 + doc_arg2_nospace + doc_opt1 +
619+ doc_test + doc_returns + doc_ret , UserWarning , "missing space" ),
620+ (doc_header + doc_parameters + doc_arg1 + doc_opt1 +
621+ doc_test + doc_returns + doc_ret , Failed , "'arg2' not documented" ),
622+ (doc_header + doc_parameters + doc_arg1 + doc_arg2 + doc_arg2 + doc_opt1 +
623+ doc_test + doc_returns + doc_ret , Failed , "'arg2' documented twice" ),
624+ (doc_header + doc_parameters + doc_arg1 + doc_arg2 + doc_opt1 +
625+ doc_returns + doc_ret , Failed , "'test' not documented" ),
626+ (doc_header + doc_parameters + doc_arg1 + doc_arg2_nospace + doc_opt1 +
627+ doc_test + doc_returns + doc_ret_nospace , UserWarning , "missing space" ),
628+ (doc_header + doc_arg1 + doc_arg2_nospace + doc_opt1 + doc_test +
629+ doc_returns + doc_ret_nospace , Failed , "missing Parameters section" ),
630+ (doc_header , None , "" ),
631+ (doc_header + "\n .. deprecated::" , None , "" ),
632+ (doc_header + "\n simple_function() is deprecated" ,
633+ UserWarning , "deprecated, but not numpydoc compliant" ),
634+ ])
635+ def test_check_parameter_docs (docstring , exception , match ):
636+ simple_class .simple_function .__doc__ = docstring
637+ if exception is None :
638+ # Pass prefix to allow empty parameters to work
639+ assert test_parameter_docs (simple_class , "test" ) is None
640+ elif exception in [UserWarning ]:
641+ with pytest .warns (exception , match = match ):
642+ test_parameter_docs (simple_class , "" ) is None
643+ elif exception in [Failed ]:
644+ with pytest .raises (exception , match = match ):
645+ test_parameter_docs (simple_class , "" ) is None
646+
590647
591648if __name__ == "__main__" :
592649 verbose = 0 if len (sys .argv ) == 1 else int (sys .argv [1 ])
0 commit comments