Skip to content

Commit

Permalink
Module docstrings in 3.7 are not part of Module node anymore
Browse files Browse the repository at this point in the history
  • Loading branch information
hroncok committed Jun 4, 2018
1 parent d609b63 commit e49a9ba
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
1 change: 1 addition & 0 deletions changelog/3530.trivial.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix if in tests to support 3.7.0b5, where a docstring handling in AST got reverted.
29 changes: 22 additions & 7 deletions testing/test_assertrewrite.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,30 @@ def getmsg(f, extra_ns=None, must_pass=False):
pytest.fail("function didn't raise at all")


def python_version_has_docstring_in_module_node():
"""Module docstrings in 3.8 are part of Module node.
This was briefly in 3.7 as well but got reverted in beta 5.
TODO:
We have a complicated sys.version_info if in here to ease testing on
various Python 3.7 versions, but we should remove the 3.7 check after
3.7 is released as stable to make this check more straightforward.
"""
return (
sys.version_info < (3, 8) or (3, 7) <= sys.version_info <= (3, 7, 0, "beta", 4)
)


class TestAssertionRewrite(object):

def test_place_initial_imports(self):
s = """'Doc string'\nother = stuff"""
m = rewrite(s)
# Module docstrings in 3.7 are part of Module node, it's not in the body
# so we remove it so the following body items have the same indexes on
# all Python versions
if sys.version_info < (3, 7):
# Module docstrings in some new Python versions are part of Module node
# It's not in the body so we remove it so the following body items have
# the same indexes on all Python versions:
if python_version_has_docstring_in_module_node():
assert isinstance(m.body[0], ast.Expr)
assert isinstance(m.body[0].value, ast.Str)
del m.body[0]
Expand All @@ -92,7 +107,7 @@ def test_place_initial_imports(self):
assert isinstance(m.body[3], ast.Expr)
s = """'doc string'\nfrom __future__ import with_statement"""
m = rewrite(s)
if sys.version_info < (3, 7):
if python_version_has_docstring_in_module_node():
assert isinstance(m.body[0], ast.Expr)
assert isinstance(m.body[0].value, ast.Str)
del m.body[0]
Expand All @@ -103,7 +118,7 @@ def test_place_initial_imports(self):
assert imp.col_offset == 0
s = """'doc string'\nfrom __future__ import with_statement\nother"""
m = rewrite(s)
if sys.version_info < (3, 7):
if python_version_has_docstring_in_module_node():
assert isinstance(m.body[0], ast.Expr)
assert isinstance(m.body[0].value, ast.Str)
del m.body[0]
Expand All @@ -124,7 +139,7 @@ def test_place_initial_imports(self):
def test_dont_rewrite(self):
s = """'PYTEST_DONT_REWRITE'\nassert 14"""
m = rewrite(s)
if sys.version_info < (3, 7):
if python_version_has_docstring_in_module_node():
assert len(m.body) == 2
assert isinstance(m.body[0], ast.Expr)
assert isinstance(m.body[0].value, ast.Str)
Expand Down

0 comments on commit e49a9ba

Please sign in to comment.