Skip to content

Commit f00c89d

Browse files
committed
add unit test for the unit test
1 parent 8463f68 commit f00c89d

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

control/tests/docstrings_test.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = "\nParameters\n----------\n"
602+
doc_arg1 = "\narg1 : int\nArgument 1.\n"
603+
doc_arg2 = "\narg2 : int\nArgument 2.\n"
604+
doc_arg2_nospace = "\narg2: int\nArgument 2.\n"
605+
doc_arg3 = "\narg3 : int\nNon-existent argument 1.\n"
606+
doc_opt1 = "\nopt1 : int\nKeyword argument 1.\n"
607+
doc_test = "\ntest : int\nInternal keyword argument 1.\n"
608+
doc_returns = "\nReturns\n-------\n"
609+
doc_ret = "\nout : int\n"
610+
doc_ret_nospace = "\nout: 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

591648
if __name__ == "__main__":
592649
verbose = 0 if len(sys.argv) == 1 else int(sys.argv[1])

0 commit comments

Comments
 (0)