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") |             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): | class TestAssertionRewrite(object): | ||||||
| 
 | 
 | ||||||
|     def test_place_initial_imports(self): |     def test_place_initial_imports(self): | ||||||
|         s = """'Doc string'\nother = stuff""" |         s = """'Doc string'\nother = stuff""" | ||||||
|         m = rewrite(s) |         m = rewrite(s) | ||||||
|         # Module docstrings in 3.7 are part of Module node, it's not in the body |         adjust_body_for_new_docstring_in_module_node(m) | ||||||
|         # 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] |  | ||||||
|         for imp in m.body[0:2]: |         for imp in m.body[0:2]: | ||||||
|             assert isinstance(imp, ast.Import) |             assert isinstance(imp, ast.Import) | ||||||
|             assert imp.lineno == 2 |             assert imp.lineno == 2 | ||||||
|  | @ -92,10 +109,7 @@ class TestAssertionRewrite(object): | ||||||
|         assert isinstance(m.body[3], ast.Expr) |         assert isinstance(m.body[3], ast.Expr) | ||||||
|         s = """'doc string'\nfrom __future__ import with_statement""" |         s = """'doc string'\nfrom __future__ import with_statement""" | ||||||
|         m = rewrite(s) |         m = rewrite(s) | ||||||
|         if sys.version_info < (3, 7): |         adjust_body_for_new_docstring_in_module_node(m) | ||||||
|             assert isinstance(m.body[0], ast.Expr) |  | ||||||
|             assert isinstance(m.body[0].value, ast.Str) |  | ||||||
|             del m.body[0] |  | ||||||
|         assert isinstance(m.body[0], ast.ImportFrom) |         assert isinstance(m.body[0], ast.ImportFrom) | ||||||
|         for imp in m.body[1:3]: |         for imp in m.body[1:3]: | ||||||
|             assert isinstance(imp, ast.Import) |             assert isinstance(imp, ast.Import) | ||||||
|  | @ -103,10 +117,7 @@ class TestAssertionRewrite(object): | ||||||
|             assert imp.col_offset == 0 |             assert imp.col_offset == 0 | ||||||
|         s = """'doc string'\nfrom __future__ import with_statement\nother""" |         s = """'doc string'\nfrom __future__ import with_statement\nother""" | ||||||
|         m = rewrite(s) |         m = rewrite(s) | ||||||
|         if sys.version_info < (3, 7): |         adjust_body_for_new_docstring_in_module_node(m) | ||||||
|             assert isinstance(m.body[0], ast.Expr) |  | ||||||
|             assert isinstance(m.body[0].value, ast.Str) |  | ||||||
|             del m.body[0] |  | ||||||
|         assert isinstance(m.body[0], ast.ImportFrom) |         assert isinstance(m.body[0], ast.ImportFrom) | ||||||
|         for imp in m.body[1:3]: |         for imp in m.body[1:3]: | ||||||
|             assert isinstance(imp, ast.Import) |             assert isinstance(imp, ast.Import) | ||||||
|  | @ -124,13 +135,8 @@ class TestAssertionRewrite(object): | ||||||
|     def test_dont_rewrite(self): |     def test_dont_rewrite(self): | ||||||
|         s = """'PYTEST_DONT_REWRITE'\nassert 14""" |         s = """'PYTEST_DONT_REWRITE'\nassert 14""" | ||||||
|         m = rewrite(s) |         m = rewrite(s) | ||||||
|         if sys.version_info < (3, 7): |         adjust_body_for_new_docstring_in_module_node(m) | ||||||
|             assert len(m.body) == 2 |         assert len(m.body) == 1 | ||||||
|             assert isinstance(m.body[0], ast.Expr) |  | ||||||
|             assert isinstance(m.body[0].value, ast.Str) |  | ||||||
|             del m.body[0] |  | ||||||
|         else: |  | ||||||
|             assert len(m.body) == 1 |  | ||||||
|         assert m.body[0].msg is None |         assert m.body[0].msg is None | ||||||
| 
 | 
 | ||||||
|     def test_dont_rewrite_plugin(self, testdir): |     def test_dont_rewrite_plugin(self, testdir): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue