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