Skip to content

Commit 7a7814c

Browse files
committed
add unit test for the unit test
1 parent 791bdbe commit 7a7814c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

control/tests/docstrings_test.py

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

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

0 commit comments

Comments
 (0)