Merge pull request #2575 from MartinAltmayer/master
#2574 Options --fixtures and --fixtures-per-test keep indentation of docstrings
This commit is contained in:
commit
ac3f2207bb
1
AUTHORS
1
AUTHORS
|
@ -104,6 +104,7 @@ Marcin Bachry
|
||||||
Mark Abramowitz
|
Mark Abramowitz
|
||||||
Markus Unterwaditzer
|
Markus Unterwaditzer
|
||||||
Martijn Faassen
|
Martijn Faassen
|
||||||
|
Martin Altmayer
|
||||||
Martin K. Scherer
|
Martin K. Scherer
|
||||||
Martin Prusse
|
Martin Prusse
|
||||||
Mathieu Clabaut
|
Mathieu Clabaut
|
||||||
|
|
|
@ -7,6 +7,7 @@ import sys
|
||||||
import os
|
import os
|
||||||
import collections
|
import collections
|
||||||
import math
|
import math
|
||||||
|
from textwrap import dedent
|
||||||
from itertools import count
|
from itertools import count
|
||||||
|
|
||||||
import py
|
import py
|
||||||
|
@ -1003,14 +1004,12 @@ def _show_fixtures_per_test(config, session):
|
||||||
funcargspec = argname
|
funcargspec = argname
|
||||||
tw.line(funcargspec, green=True)
|
tw.line(funcargspec, green=True)
|
||||||
|
|
||||||
INDENT = ' {0}'
|
|
||||||
fixture_doc = fixture_def.func.__doc__
|
fixture_doc = fixture_def.func.__doc__
|
||||||
|
|
||||||
if fixture_doc:
|
if fixture_doc:
|
||||||
for line in fixture_doc.strip().split('\n'):
|
write_docstring(tw, fixture_doc)
|
||||||
tw.line(INDENT.format(line.strip()))
|
|
||||||
else:
|
else:
|
||||||
tw.line(INDENT.format('no docstring available'), red=True)
|
tw.line(' no docstring available', red=True)
|
||||||
|
|
||||||
def write_item(item):
|
def write_item(item):
|
||||||
name2fixturedefs = item._fixtureinfo.name2fixturedefs
|
name2fixturedefs = item._fixtureinfo.name2fixturedefs
|
||||||
|
@ -1084,13 +1083,28 @@ def _showfixtures_main(config, session):
|
||||||
loc = getlocation(fixturedef.func, curdir)
|
loc = getlocation(fixturedef.func, curdir)
|
||||||
doc = fixturedef.func.__doc__ or ""
|
doc = fixturedef.func.__doc__ or ""
|
||||||
if doc:
|
if doc:
|
||||||
for line in doc.strip().split("\n"):
|
write_docstring(tw, doc)
|
||||||
tw.line(" " + line.strip())
|
|
||||||
else:
|
else:
|
||||||
tw.line(" %s: no docstring available" %(loc,),
|
tw.line(" %s: no docstring available" %(loc,),
|
||||||
red=True)
|
red=True)
|
||||||
|
|
||||||
|
|
||||||
|
def write_docstring(tw, doc):
|
||||||
|
INDENT = " "
|
||||||
|
doc = doc.rstrip()
|
||||||
|
if "\n" in doc:
|
||||||
|
firstline, rest = doc.split("\n", 1)
|
||||||
|
else:
|
||||||
|
firstline, rest = doc, ""
|
||||||
|
|
||||||
|
if firstline.strip():
|
||||||
|
tw.line(INDENT + firstline.strip())
|
||||||
|
|
||||||
|
if rest:
|
||||||
|
for line in dedent(rest).split("\n"):
|
||||||
|
tw.write(INDENT + line + "\n")
|
||||||
|
|
||||||
|
|
||||||
# builtin pytest.raises helper
|
# builtin pytest.raises helper
|
||||||
|
|
||||||
def raises(expected_exception, *args, **kwargs):
|
def raises(expected_exception, *args, **kwargs):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
The options --fixtures and --fixtures-per-test will now keep indentation within docstrings.
|
|
@ -2713,7 +2713,7 @@ class TestShowFixtures(object):
|
||||||
""")
|
""")
|
||||||
|
|
||||||
def test_show_fixtures_trimmed_doc(self, testdir):
|
def test_show_fixtures_trimmed_doc(self, testdir):
|
||||||
p = testdir.makepyfile('''
|
p = testdir.makepyfile(dedent('''
|
||||||
import pytest
|
import pytest
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def arg1():
|
def arg1():
|
||||||
|
@ -2729,9 +2729,9 @@ class TestShowFixtures(object):
|
||||||
line2
|
line2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
''')
|
'''))
|
||||||
result = testdir.runpytest("--fixtures", p)
|
result = testdir.runpytest("--fixtures", p)
|
||||||
result.stdout.fnmatch_lines("""
|
result.stdout.fnmatch_lines(dedent("""
|
||||||
* fixtures defined from test_show_fixtures_trimmed_doc *
|
* fixtures defined from test_show_fixtures_trimmed_doc *
|
||||||
arg2
|
arg2
|
||||||
line1
|
line1
|
||||||
|
@ -2740,7 +2740,64 @@ class TestShowFixtures(object):
|
||||||
line1
|
line1
|
||||||
line2
|
line2
|
||||||
|
|
||||||
""")
|
"""))
|
||||||
|
|
||||||
|
def test_show_fixtures_indented_doc(self, testdir):
|
||||||
|
p = testdir.makepyfile(dedent('''
|
||||||
|
import pytest
|
||||||
|
@pytest.fixture
|
||||||
|
def fixture1():
|
||||||
|
"""
|
||||||
|
line1
|
||||||
|
indented line
|
||||||
|
"""
|
||||||
|
'''))
|
||||||
|
result = testdir.runpytest("--fixtures", p)
|
||||||
|
result.stdout.fnmatch_lines(dedent("""
|
||||||
|
* fixtures defined from test_show_fixtures_indented_doc *
|
||||||
|
fixture1
|
||||||
|
line1
|
||||||
|
indented line
|
||||||
|
"""))
|
||||||
|
|
||||||
|
def test_show_fixtures_indented_doc_first_line_unindented(self, testdir):
|
||||||
|
p = testdir.makepyfile(dedent('''
|
||||||
|
import pytest
|
||||||
|
@pytest.fixture
|
||||||
|
def fixture1():
|
||||||
|
"""line1
|
||||||
|
line2
|
||||||
|
indented line
|
||||||
|
"""
|
||||||
|
'''))
|
||||||
|
result = testdir.runpytest("--fixtures", p)
|
||||||
|
result.stdout.fnmatch_lines(dedent("""
|
||||||
|
* fixtures defined from test_show_fixtures_indented_doc_first_line_unindented *
|
||||||
|
fixture1
|
||||||
|
line1
|
||||||
|
line2
|
||||||
|
indented line
|
||||||
|
"""))
|
||||||
|
|
||||||
|
def test_show_fixtures_indented_in_class(self, testdir):
|
||||||
|
p = testdir.makepyfile(dedent('''
|
||||||
|
import pytest
|
||||||
|
class TestClass:
|
||||||
|
@pytest.fixture
|
||||||
|
def fixture1():
|
||||||
|
"""line1
|
||||||
|
line2
|
||||||
|
indented line
|
||||||
|
"""
|
||||||
|
'''))
|
||||||
|
result = testdir.runpytest("--fixtures", p)
|
||||||
|
result.stdout.fnmatch_lines(dedent("""
|
||||||
|
* fixtures defined from test_show_fixtures_indented_in_class *
|
||||||
|
fixture1
|
||||||
|
line1
|
||||||
|
line2
|
||||||
|
indented line
|
||||||
|
"""))
|
||||||
|
|
||||||
|
|
||||||
def test_show_fixtures_different_files(self, testdir):
|
def test_show_fixtures_different_files(self, testdir):
|
||||||
|
|
Loading…
Reference in New Issue