Refactor `test_attrgetter_using` (#11293)

Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com>
This commit is contained in:
Martin Liška 2023-07-28 05:20:36 +02:00 committed by GitHub
parent 99f9209924
commit 2c0b81d88b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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')