Merge pull request #1405 from nicoddemus/collection-atty
Display collect progress only when in a terminal
This commit is contained in:
commit
5507a4d239
|
@ -72,7 +72,9 @@
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
*
|
* Collection only displays progress ("collecting X items") when in a terminal.
|
||||||
|
This avoids cluttering the output when using ``--color=yes`` to obtain
|
||||||
|
colors in CI integrations systems (`#1397`_).
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
@ -106,6 +108,7 @@
|
||||||
.. _#1226: https://github.com/pytest-dev/pytest/pull/1226
|
.. _#1226: https://github.com/pytest-dev/pytest/pull/1226
|
||||||
.. _#1290: https://github.com/pytest-dev/pytest/pull/1290
|
.. _#1290: https://github.com/pytest-dev/pytest/pull/1290
|
||||||
.. _#1355: https://github.com/pytest-dev/pytest/pull/1355
|
.. _#1355: https://github.com/pytest-dev/pytest/pull/1355
|
||||||
|
.. _#1397: https://github.com/pytest-dev/pytest/issues/1397
|
||||||
.. _@biern: https://github.com/biern
|
.. _@biern: https://github.com/biern
|
||||||
.. _@MichaelAquilina: https://github.com/MichaelAquilina
|
.. _@MichaelAquilina: https://github.com/MichaelAquilina
|
||||||
.. _@bukzor: https://github.com/bukzor
|
.. _@bukzor: https://github.com/bukzor
|
||||||
|
|
|
@ -112,6 +112,7 @@ class TerminalReporter:
|
||||||
self.currentfspath = None
|
self.currentfspath = None
|
||||||
self.reportchars = getreportopt(config)
|
self.reportchars = getreportopt(config)
|
||||||
self.hasmarkup = self._tw.hasmarkup
|
self.hasmarkup = self._tw.hasmarkup
|
||||||
|
self.isatty = file.isatty()
|
||||||
|
|
||||||
def hasopt(self, char):
|
def hasopt(self, char):
|
||||||
char = {'xfailed': 'x', 'skipped': 's'}.get(char, char)
|
char = {'xfailed': 'x', 'skipped': 's'}.get(char, char)
|
||||||
|
@ -234,7 +235,7 @@ class TerminalReporter:
|
||||||
self.currentfspath = -2
|
self.currentfspath = -2
|
||||||
|
|
||||||
def pytest_collection(self):
|
def pytest_collection(self):
|
||||||
if not self.hasmarkup and self.config.option.verbose >= 1:
|
if not self.isatty and self.config.option.verbose >= 1:
|
||||||
self.write("collecting ... ", bold=True)
|
self.write("collecting ... ", bold=True)
|
||||||
|
|
||||||
def pytest_collectreport(self, report):
|
def pytest_collectreport(self, report):
|
||||||
|
@ -244,7 +245,7 @@ class TerminalReporter:
|
||||||
self.stats.setdefault("skipped", []).append(report)
|
self.stats.setdefault("skipped", []).append(report)
|
||||||
items = [x for x in report.result if isinstance(x, pytest.Item)]
|
items = [x for x in report.result if isinstance(x, pytest.Item)]
|
||||||
self._numcollected += len(items)
|
self._numcollected += len(items)
|
||||||
if self.hasmarkup:
|
if self.isatty:
|
||||||
#self.write_fspath_result(report.nodeid, 'E')
|
#self.write_fspath_result(report.nodeid, 'E')
|
||||||
self.report_collect()
|
self.report_collect()
|
||||||
|
|
||||||
|
@ -263,7 +264,7 @@ class TerminalReporter:
|
||||||
line += " / %d errors" % errors
|
line += " / %d errors" % errors
|
||||||
if skipped:
|
if skipped:
|
||||||
line += " / %d skipped" % skipped
|
line += " / %d skipped" % skipped
|
||||||
if self.hasmarkup:
|
if self.isatty:
|
||||||
if final:
|
if final:
|
||||||
line += " \n"
|
line += " \n"
|
||||||
self.rewrite(line, bold=True)
|
self.rewrite(line, bold=True)
|
||||||
|
|
|
@ -561,12 +561,37 @@ def test_color_yes(testdir):
|
||||||
assert 'test session starts' in result.stdout.str()
|
assert 'test session starts' in result.stdout.str()
|
||||||
assert '\x1b[1m' in result.stdout.str()
|
assert '\x1b[1m' in result.stdout.str()
|
||||||
|
|
||||||
|
|
||||||
def test_color_no(testdir):
|
def test_color_no(testdir):
|
||||||
testdir.makepyfile("def test_this(): assert 1")
|
testdir.makepyfile("def test_this(): assert 1")
|
||||||
result = testdir.runpytest('--color=no')
|
result = testdir.runpytest('--color=no')
|
||||||
assert 'test session starts' in result.stdout.str()
|
assert 'test session starts' in result.stdout.str()
|
||||||
assert '\x1b[1m' not in result.stdout.str()
|
assert '\x1b[1m' not in result.stdout.str()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('verbose', [True, False])
|
||||||
|
def test_color_yes_collection_on_non_atty(testdir, verbose):
|
||||||
|
"""skip collect progress report when working on non-terminals.
|
||||||
|
#1397
|
||||||
|
"""
|
||||||
|
testdir.makepyfile("""
|
||||||
|
import pytest
|
||||||
|
@pytest.mark.parametrize('i', range(10))
|
||||||
|
def test_this(i):
|
||||||
|
assert 1
|
||||||
|
""")
|
||||||
|
args = ['--color=yes']
|
||||||
|
if verbose:
|
||||||
|
args.append('-vv')
|
||||||
|
result = testdir.runpytest(*args)
|
||||||
|
assert 'test session starts' in result.stdout.str()
|
||||||
|
assert '\x1b[1m' in result.stdout.str()
|
||||||
|
assert 'collecting 10 items' not in result.stdout.str()
|
||||||
|
if verbose:
|
||||||
|
assert 'collecting ...' in result.stdout.str()
|
||||||
|
assert 'collected 10 items' in result.stdout.str()
|
||||||
|
|
||||||
|
|
||||||
def test_getreportopt():
|
def test_getreportopt():
|
||||||
class config:
|
class config:
|
||||||
class option:
|
class option:
|
||||||
|
|
Loading…
Reference in New Issue