Fork of https://github.com/oxigraph/oxigraph.git for the purpose of NextGraph project
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.2 KiB
38 lines
1.2 KiB
12 months ago
|
# 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
|