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):
|
||||
from target import Class
|
||||
from target.inheritance import Derived
|
||||
|
||||
directive = make_directive_bridge(app.env)
|
||||
directive.genopt['members'] = ALL
|
||||
|
||||
def assert_getter_works(objtype, name, obj, attrs=[], **kw):
|
||||
getattr_spy = []
|
||||
|
||||
def special_getattr(obj, name, *defargs):
|
||||
if name in attrs:
|
||||
getattr_spy.append((obj, name))
|
||||
return None
|
||||
return getattr(obj, name, *defargs)
|
||||
app.add_autodoc_attrgetter(type, special_getattr)
|
||||
|
||||
del getattr_spy[:]
|
||||
inst = app.registry.documenters[objtype](directive, name)
|
||||
inst.generate(**kw)
|
||||
|
||||
hooked_members = [s[1] for s in getattr_spy]
|
||||
documented_members = [s[1] for s in processed_signatures]
|
||||
for attr in attrs:
|
||||
fullname = '.'.join((name, attr))
|
||||
assert attr in hooked_members
|
||||
assert fullname not in documented_members, \
|
||||
'%r was not hooked by special_attrgetter function' % fullname
|
||||
|
||||
directive.genopt['inherited_members'] = False
|
||||
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'])
|
||||
_assert_getter_works(app, directive, 'class', 'target.Class', ['meth'])
|
||||
|
||||
directive.genopt['inherited_members'] = True
|
||||
assert_getter_works('class', 'target.inheritance.Derived', Derived, ['inheritedmeth'])
|
||||
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 = []
|
||||
|
||||
def _special_getattr(obj, attr_name, *defargs):
|
||||
if attr_name in attrs:
|
||||
getattr_spy.append((obj, attr_name))
|
||||
return None
|
||||
return getattr(obj, attr_name, *defargs)
|
||||
|
||||
app.add_autodoc_attrgetter(type, _special_getattr)
|
||||
|
||||
getattr_spy.clear()
|
||||
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:
|
||||
fullname = '.'.join((name, attr))
|
||||
assert attr in hooked_members
|
||||
assert fullname not in documented_members, f'{fullname!r} not intercepted'
|
||||
|
||||
|
||||
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||
|
Loading…
Reference in New Issue
Block a user