Simplify default pytest_runtestloop

The inner function and the explanatory comment it makes necessary can
all be removed if we switch to an if/else rather than try/except for
this condition.

Perhaps this bit comes from my fondness for C, but I think I would
find this style clearer and easier to understand even if it weren't
for the Python 2 quirk that makes the other style require us to add an
unnecessary-looking function abstraction.  In any case, given that the
alternative does require that abstraction this is definitely simpler.
This commit is contained in:
Greg Price 2016-06-15 18:10:08 -07:00
parent 66e66f61e8
commit ab8b2e75a3
2 changed files with 2 additions and 10 deletions

View File

@ -47,6 +47,7 @@ Floris Bruynooghe
Gabriel Reis Gabriel Reis
Georgy Dyuldin Georgy Dyuldin
Graham Horler Graham Horler
Greg Price
Grig Gheorghiu Grig Gheorghiu
Guido Wesdorp Guido Wesdorp
Harald Armin Massa Harald Armin Massa

View File

@ -136,17 +136,8 @@ def pytest_runtestloop(session):
if session.config.option.collectonly: if session.config.option.collectonly:
return True return True
def getnextitem(i):
# this is a function to avoid python2
# keeping sys.exc_info set when calling into a test
# python2 keeps sys.exc_info till the frame is left
try:
return session.items[i+1]
except IndexError:
return None
for i, item in enumerate(session.items): for i, item in enumerate(session.items):
nextitem = getnextitem(i) nextitem = session.items[i+1] if i+1 < len(session.items) else None
item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem) item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
if session.shouldstop: if session.shouldstop:
raise session.Interrupted(session.shouldstop) raise session.Interrupted(session.shouldstop)