Merge pull request #3531 from hroncok/370b5
Module docstrings in 3.7 are not part of Module node anymore
This commit is contained in:
		
						commit
						7f5cb46835
					
				|  | @ -0,0 +1 @@ | |||
| Fix if in tests to support 3.7.0b5, where a docstring handling in AST got reverted. | ||||
|  | @ -65,18 +65,35 @@ def getmsg(f, extra_ns=None, must_pass=False): | |||
|             pytest.fail("function didn't raise at all") | ||||
| 
 | ||||
| 
 | ||||
| def adjust_body_for_new_docstring_in_module_node(m): | ||||
|     """Module docstrings in 3.8 are part of Module node. | ||||
|     This was briefly in 3.7 as well but got reverted in beta 5. | ||||
| 
 | ||||
|     It's not in the body so we remove it so the following body items have | ||||
|     the same indexes on all Python versions: | ||||
| 
 | ||||
|     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. | ||||
|     """ | ||||
|     if ( | ||||
|         sys.version_info < (3, 8) | ||||
|         and not ((3, 7) <= sys.version_info <= (3, 7, 0, "beta", 4)) | ||||
|     ): | ||||
|         assert len(m.body) > 1 | ||||
|         assert isinstance(m.body[0], ast.Expr) | ||||
|         assert isinstance(m.body[0].value, ast.Str) | ||||
|         del m.body[0] | ||||
| 
 | ||||
| 
 | ||||
| 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): | ||||
|             assert isinstance(m.body[0], ast.Expr) | ||||
|             assert isinstance(m.body[0].value, ast.Str) | ||||
|             del m.body[0] | ||||
|         adjust_body_for_new_docstring_in_module_node(m) | ||||
|         for imp in m.body[0:2]: | ||||
|             assert isinstance(imp, ast.Import) | ||||
|             assert imp.lineno == 2 | ||||
|  | @ -92,10 +109,7 @@ class TestAssertionRewrite(object): | |||
|         assert isinstance(m.body[3], ast.Expr) | ||||
|         s = """'doc string'\nfrom __future__ import with_statement""" | ||||
|         m = rewrite(s) | ||||
|         if sys.version_info < (3, 7): | ||||
|             assert isinstance(m.body[0], ast.Expr) | ||||
|             assert isinstance(m.body[0].value, ast.Str) | ||||
|             del m.body[0] | ||||
|         adjust_body_for_new_docstring_in_module_node(m) | ||||
|         assert isinstance(m.body[0], ast.ImportFrom) | ||||
|         for imp in m.body[1:3]: | ||||
|             assert isinstance(imp, ast.Import) | ||||
|  | @ -103,10 +117,7 @@ class TestAssertionRewrite(object): | |||
|             assert imp.col_offset == 0 | ||||
|         s = """'doc string'\nfrom __future__ import with_statement\nother""" | ||||
|         m = rewrite(s) | ||||
|         if sys.version_info < (3, 7): | ||||
|             assert isinstance(m.body[0], ast.Expr) | ||||
|             assert isinstance(m.body[0].value, ast.Str) | ||||
|             del m.body[0] | ||||
|         adjust_body_for_new_docstring_in_module_node(m) | ||||
|         assert isinstance(m.body[0], ast.ImportFrom) | ||||
|         for imp in m.body[1:3]: | ||||
|             assert isinstance(imp, ast.Import) | ||||
|  | @ -124,12 +135,7 @@ class TestAssertionRewrite(object): | |||
|     def test_dont_rewrite(self): | ||||
|         s = """'PYTEST_DONT_REWRITE'\nassert 14""" | ||||
|         m = rewrite(s) | ||||
|         if sys.version_info < (3, 7): | ||||
|             assert len(m.body) == 2 | ||||
|             assert isinstance(m.body[0], ast.Expr) | ||||
|             assert isinstance(m.body[0].value, ast.Str) | ||||
|             del m.body[0] | ||||
|         else: | ||||
|         adjust_body_for_new_docstring_in_module_node(m) | ||||
|         assert len(m.body) == 1 | ||||
|         assert m.body[0].msg is None | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue