mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Refactor `test_attrgetter_using
` (#11293)
Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com>
This commit is contained in:
parent
99f9209924
commit
2c0b81d88b
@ -403,42 +403,40 @@ def test_new_documenter(app):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||||
def test_attrgetter_using(app):
|
def test_attrgetter_using(app):
|
||||||
from target import Class
|
|
||||||
from target.inheritance import Derived
|
|
||||||
|
|
||||||
directive = make_directive_bridge(app.env)
|
directive = make_directive_bridge(app.env)
|
||||||
|
directive.genopt['members'] = ALL
|
||||||
|
|
||||||
def assert_getter_works(objtype, name, obj, attrs=[], **kw):
|
directive.genopt['inherited_members'] = False
|
||||||
|
with catch_warnings(record=True):
|
||||||
|
_assert_getter_works(app, directive, 'class', 'target.Class', ['meth'])
|
||||||
|
|
||||||
|
directive.genopt['inherited_members'] = True
|
||||||
|
with catch_warnings(record=True):
|
||||||
|
_assert_getter_works(app, directive, 'class', 'target.inheritance.Derived', ['inheritedmeth'])
|
||||||
|
|
||||||
|
|
||||||
|
def _assert_getter_works(app, directive, objtype, name, attrs=(), **kw):
|
||||||
getattr_spy = []
|
getattr_spy = []
|
||||||
|
|
||||||
def special_getattr(obj, name, *defargs):
|
def _special_getattr(obj, attr_name, *defargs):
|
||||||
if name in attrs:
|
if attr_name in attrs:
|
||||||
getattr_spy.append((obj, name))
|
getattr_spy.append((obj, attr_name))
|
||||||
return None
|
return None
|
||||||
return getattr(obj, name, *defargs)
|
return getattr(obj, attr_name, *defargs)
|
||||||
app.add_autodoc_attrgetter(type, special_getattr)
|
|
||||||
|
|
||||||
del getattr_spy[:]
|
app.add_autodoc_attrgetter(type, _special_getattr)
|
||||||
inst = app.registry.documenters[objtype](directive, name)
|
|
||||||
inst.generate(**kw)
|
|
||||||
|
|
||||||
hooked_members = [s[1] for s in getattr_spy]
|
getattr_spy.clear()
|
||||||
documented_members = [s[1] for s in processed_signatures]
|
app.registry.documenters[objtype](directive, name).generate(**kw)
|
||||||
|
|
||||||
|
hooked_members = {s[1] for s in getattr_spy}
|
||||||
|
documented_members = {s[1] for s in processed_signatures}
|
||||||
for attr in attrs:
|
for attr in attrs:
|
||||||
fullname = '.'.join((name, attr))
|
fullname = '.'.join((name, attr))
|
||||||
assert attr in hooked_members
|
assert attr in hooked_members
|
||||||
assert fullname not in documented_members, \
|
assert fullname not in documented_members, f'{fullname!r} not intercepted'
|
||||||
'%r was not hooked by special_attrgetter function' % fullname
|
|
||||||
|
|
||||||
with catch_warnings(record=True):
|
|
||||||
directive.genopt['members'] = ALL
|
|
||||||
directive.genopt['inherited_members'] = False
|
|
||||||
print(directive.genopt)
|
|
||||||
assert_getter_works('class', 'target.Class', Class, ['meth'])
|
|
||||||
|
|
||||||
directive.genopt['inherited_members'] = True
|
|
||||||
assert_getter_works('class', 'target.inheritance.Derived', Derived, ['inheritedmeth'])
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||||
|
Loading…
Reference in New Issue
Block a user