Merge pull request #1405 from nicoddemus/collection-atty

Display collect progress only when in a terminal
This commit is contained in:
holger krekel 2016-02-21 08:17:35 +01:00
commit 5507a4d239
3 changed files with 33 additions and 4 deletions

View File

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

View File

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

View File

@ -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: