From 253c5dde3510075180a7fdfe351d6b51141e100f Mon Sep 17 00:00:00 2001 From: Leo Singer Date: Tue, 15 Feb 2022 14:34:12 -0500 Subject: [PATCH] Doctests in ufuncs should respect __doctest_skip__ --- pytest_doctestplus/plugin.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pytest_doctestplus/plugin.py b/pytest_doctestplus/plugin.py index d36ad19..3d3565e 100644 --- a/pytest_doctestplus/plugin.py +++ b/pytest_doctestplus/plugin.py @@ -252,13 +252,7 @@ def collect(self): runner = doctest.DebugRunner( verbose=False, optionflags=options, checker=OutputChecker()) - tests = finder.find(module) - for method in module.__dict__.values(): - if _is_numpy_ufunc(method): - found = finder.find(method, module=module) - tests += found - - for test in tests: + for test in finder.find(module): if test.examples: # skip empty doctests ignore_warnings_context_needed = False show_warnings_context_needed = False @@ -664,13 +658,19 @@ def check_required_modules(cls, mods): def find(self, obj, name=None, module=None, globs=None, extraglobs=None): tests = doctest.DocTestFinder.find(self, obj, name, module, globs, extraglobs) + + if name is None and hasattr(obj, '__name__'): + name = obj.__name__ + else: + raise ValueError("DocTestFinder.find: name must be given " + "when obj.__name__ doesn't exist: {!r}" + .format((type(obj),))) + + for ufunc_name, ufunc_method in obj.__dict__.items(): + if _is_numpy_ufunc(ufunc_method): + tests += doctest.DocTestFinder.find(self, ufunc_method, f'{name}.{ufunc_name}') + if hasattr(obj, '__doctest_skip__') or hasattr(obj, '__doctest_requires__'): - if name is None and hasattr(obj, '__name__'): - name = obj.__name__ - else: - raise ValueError("DocTestFinder.find: name must be given " - "when obj.__name__ doesn't exist: {!r}" - .format((type(obj),))) def test_filter(test): for pat in getattr(obj, '__doctest_skip__', []):