Skip to content

Commit

Permalink
#2574: --fixtures, --fixtures-per-test keep indentation of docstring
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinAltmayer committed Jul 15, 2017
1 parent 3578f4e commit e5169a0
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 10 deletions.
26 changes: 20 additions & 6 deletions _pytest/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import os
import collections
import math
from textwrap import dedent
from itertools import count

import py
Expand Down Expand Up @@ -1003,14 +1004,12 @@ def write_fixture(fixture_def):
funcargspec = argname
tw.line(funcargspec, green=True)

INDENT = ' {0}'
fixture_doc = fixture_def.func.__doc__

if fixture_doc:
for line in fixture_doc.strip().split('\n'):
tw.line(INDENT.format(line.strip()))
write_docstring(tw, fixture_doc)
else:
tw.line(INDENT.format('no docstring available'), red=True)
tw.line(' no docstring available', red=True)

def write_item(item):
name2fixturedefs = item._fixtureinfo.name2fixturedefs
Expand Down Expand Up @@ -1084,13 +1083,28 @@ def _showfixtures_main(config, session):
loc = getlocation(fixturedef.func, curdir)
doc = fixturedef.func.__doc__ or ""
if doc:
for line in doc.strip().split("\n"):
tw.line(" " + line.strip())
write_docstring(tw, doc)
else:
tw.line(" %s: no docstring available" %(loc,),
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

def raises(expected_exception, *args, **kwargs):
Expand Down
65 changes: 61 additions & 4 deletions testing/python/fixture.py
Original file line number Diff line number Diff line change
Expand Up @@ -2713,7 +2713,7 @@ def test_hello():
""")

def test_show_fixtures_trimmed_doc(self, testdir):
p = testdir.makepyfile('''
p = testdir.makepyfile(dedent('''
import pytest
@pytest.fixture
def arg1():
Expand All @@ -2729,9 +2729,9 @@ def arg2():
line2
"""
''')
'''))
result = testdir.runpytest("--fixtures", p)
result.stdout.fnmatch_lines("""
result.stdout.fnmatch_lines(dedent("""
* fixtures defined from test_show_fixtures_trimmed_doc *
arg2
line1
Expand All @@ -2740,7 +2740,64 @@ def arg2():
line1
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):
Expand Down

0 comments on commit e5169a0

Please sign in to comment.