Merge pull request #5138 from ikonst/notify_exception_without_terminal

Fix dependencies on 'terminal' plugin
This commit is contained in:
Daniel Hahler 2019-04-17 23:20:49 +02:00 committed by GitHub
commit e87d3d70e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 20 additions and 11 deletions

View File

@ -105,6 +105,7 @@ Hugo van Kemenade
Hui Wang (coldnight) Hui Wang (coldnight)
Ian Bicking Ian Bicking
Ian Lesperance Ian Lesperance
Ilya Konstantinov
Ionuț Turturică Ionuț Turturică
Iwan Briquemont Iwan Briquemont
Jaap Broekhuizen Jaap Broekhuizen

View File

@ -0,0 +1 @@
Eliminate core dependency on 'terminal' plugin.

View File

@ -699,7 +699,7 @@ class Config(object):
return self return self
def notify_exception(self, excinfo, option=None): def notify_exception(self, excinfo, option=None):
if option and option.fulltrace: if option and getattr(option, "fulltrace", False):
style = "long" style = "long"
else: else:
style = "native" style = "native"

View File

@ -248,7 +248,7 @@ class Node(object):
if excinfo.errisinstance(fm.FixtureLookupError): if excinfo.errisinstance(fm.FixtureLookupError):
return excinfo.value.formatrepr() return excinfo.value.formatrepr()
tbfilter = True tbfilter = True
if self.config.option.fulltrace: if self.config.getoption("fulltrace", False):
style = "long" style = "long"
else: else:
tb = _pytest._code.Traceback([excinfo.traceback[-1]]) tb = _pytest._code.Traceback([excinfo.traceback[-1]])
@ -260,12 +260,12 @@ class Node(object):
style = "long" style = "long"
# XXX should excinfo.getrepr record all data and toterminal() process it? # XXX should excinfo.getrepr record all data and toterminal() process it?
if style is None: if style is None:
if self.config.option.tbstyle == "short": if self.config.getoption("tbstyle", "auto") == "short":
style = "short" style = "short"
else: else:
style = "long" style = "long"
if self.config.option.verbose > 1: if self.config.getoption("verbose", 0) > 1:
truncate_locals = False truncate_locals = False
else: else:
truncate_locals = True truncate_locals = True
@ -279,7 +279,7 @@ class Node(object):
return excinfo.getrepr( return excinfo.getrepr(
funcargs=True, funcargs=True,
abspath=abspath, abspath=abspath,
showlocals=self.config.option.showlocals, showlocals=self.config.getoption("showlocals", False),
style=style, style=style,
tbfilter=tbfilter, tbfilter=tbfilter,
truncate_locals=truncate_locals, truncate_locals=truncate_locals,

View File

@ -820,7 +820,7 @@ class FunctionMixin(PyobjMixin):
self.obj = self._getobj() self.obj = self._getobj()
def _prunetraceback(self, excinfo): def _prunetraceback(self, excinfo):
if hasattr(self, "_obj") and not self.config.option.fulltrace: if hasattr(self, "_obj") and not self.config.getoption("fulltrace", False):
code = _pytest._code.Code(get_real_func(self.obj)) code = _pytest._code.Code(get_real_func(self.obj))
path, firstlineno = code.path, code.firstlineno path, firstlineno = code.path, code.firstlineno
traceback = excinfo.traceback traceback = excinfo.traceback
@ -835,14 +835,14 @@ class FunctionMixin(PyobjMixin):
excinfo.traceback = ntraceback.filter() excinfo.traceback = ntraceback.filter()
# issue364: mark all but first and last frames to # issue364: mark all but first and last frames to
# only show a single-line message for each frame # only show a single-line message for each frame
if self.config.option.tbstyle == "auto": if self.config.getoption("tbstyle", "auto") == "auto":
if len(excinfo.traceback) > 2: if len(excinfo.traceback) > 2:
for entry in excinfo.traceback[1:-1]: for entry in excinfo.traceback[1:-1]:
entry.set_repr_style("short") entry.set_repr_style("short")
def repr_failure(self, excinfo, outerr=None): def repr_failure(self, excinfo, outerr=None):
assert outerr is None, "XXX outerr usage is deprecated" assert outerr is None, "XXX outerr usage is deprecated"
style = self.config.option.tbstyle style = self.config.getoption("tbstyle", "auto")
if style == "auto": if style == "auto":
style = "long" style = "long"
return self._repr_failure_py(excinfo, style=style) return self._repr_failure_py(excinfo, style=style)

View File

@ -361,7 +361,7 @@ class TestReport(BaseReport):
longrepr = item.repr_failure(excinfo) longrepr = item.repr_failure(excinfo)
else: # exception in setup or teardown else: # exception in setup or teardown
longrepr = item._repr_failure_py( longrepr = item._repr_failure_py(
excinfo, style=item.config.option.tbstyle excinfo, style=item.config.getoption("tbstyle", "auto")
) )
for rwhen, key, content in item._report_sections: for rwhen, key, content in item._report_sections:
sections.append(("Captured %s %s" % (key, rwhen), content)) sections.append(("Captured %s %s" % (key, rwhen), content))

View File

@ -770,7 +770,7 @@ def test_notify_exception(testdir, capfd):
config = testdir.parseconfig() config = testdir.parseconfig()
with pytest.raises(ValueError) as excinfo: with pytest.raises(ValueError) as excinfo:
raise ValueError(1) raise ValueError(1)
config.notify_exception(excinfo) config.notify_exception(excinfo, config.option)
out, err = capfd.readouterr() out, err = capfd.readouterr()
assert "ValueError" in err assert "ValueError" in err
@ -779,10 +779,17 @@ def test_notify_exception(testdir, capfd):
return True return True
config.pluginmanager.register(A()) config.pluginmanager.register(A())
config.notify_exception(excinfo) config.notify_exception(excinfo, config.option)
out, err = capfd.readouterr() out, err = capfd.readouterr()
assert not err assert not err
config = testdir.parseconfig("-p", "no:terminal")
with pytest.raises(ValueError) as excinfo:
raise ValueError(1)
config.notify_exception(excinfo, config.option)
out, err = capfd.readouterr()
assert "ValueError" in err
def test_load_initial_conftest_last_ordering(testdir, _config_for_test): def test_load_initial_conftest_last_ordering(testdir, _config_for_test):
pm = _config_for_test.pluginmanager pm = _config_for_test.pluginmanager