parent
93eab63868
commit
f01796b1a4
@ -0,0 +1,37 @@ |
|||||||
|
# type: ignore |
||||||
|
import inspect |
||||||
|
from doctest import DocTestFinder, DocTestSuite |
||||||
|
|
||||||
|
import pyoxigraph |
||||||
|
|
||||||
|
|
||||||
|
class ExtendedDocTestFinder(DocTestFinder): |
||||||
|
""" |
||||||
|
More aggressive doctest lookup |
||||||
|
""" |
||||||
|
|
||||||
|
def _find(self, tests, obj, name, module, source_lines, globs, seen): |
||||||
|
# If we've already processed this object, then ignore it. |
||||||
|
if id(obj) in seen: |
||||||
|
return |
||||||
|
seen[id(obj)] = 1 |
||||||
|
|
||||||
|
# Find a test for this object, and add it to the list of tests. |
||||||
|
test = self._get_test(obj, name, module, globs, source_lines) |
||||||
|
if test is not None: |
||||||
|
tests.append(test) |
||||||
|
|
||||||
|
# Look for tests in a module's contained objects. |
||||||
|
if inspect.ismodule(obj) or inspect.isclass(obj): |
||||||
|
for valname, val in obj.__dict__.items(): |
||||||
|
if valname == "__doc__": |
||||||
|
continue |
||||||
|
# Special handling for staticmethod/classmethod. |
||||||
|
if isinstance(val, (staticmethod, classmethod)): |
||||||
|
val = val.__func__ |
||||||
|
self._find(tests, val, f"{name}.{valname}", module, source_lines, globs, seen) |
||||||
|
|
||||||
|
|
||||||
|
def load_tests(_loader, tests, _ignore): |
||||||
|
tests.addTests(DocTestSuite(pyoxigraph, test_finder=ExtendedDocTestFinder())) |
||||||
|
return tests |
Loading…
Reference in new issue