|
1 |
| -"""Tests forthe unparse.py script in the Tools/parser directory.""" |
| 1 | +"""Tests forast.unparse.""" |
2 | 2 |
|
3 | 3 | importunittest
|
4 | 4 | importtest.support
|
@@ -625,6 +625,78 @@ def test_star_expr_assign_target_multiple(self):
|
625 | 625 | self.check_src_roundtrip("a, b = [c, d] = e, f = g")
|
626 | 626 |
|
627 | 627 |
|
| 628 | +classManualASTCreationTestCase(unittest.TestCase): |
| 629 | +"""Test that AST nodes created without a type_params field unparse correctly.""" |
| 630 | + |
| 631 | +deftest_class(self): |
| 632 | +node=ast.ClassDef(name="X",bases=[],keywords=[],body=[ast.Pass()],decorator_list=[]) |
| 633 | +ast.fix_missing_locations(node) |
| 634 | +self.assertEqual(ast.unparse(node),"class X:\n pass") |
| 635 | + |
| 636 | +deftest_class_with_type_params(self): |
| 637 | +node=ast.ClassDef(name="X",bases=[],keywords=[],body=[ast.Pass()],decorator_list=[], |
| 638 | +type_params=[ast.TypeVar("T")]) |
| 639 | +ast.fix_missing_locations(node) |
| 640 | +self.assertEqual(ast.unparse(node),"class X[T]:\n pass") |
| 641 | + |
| 642 | +deftest_function(self): |
| 643 | +node=ast.FunctionDef( |
| 644 | +name="f", |
| 645 | +args=ast.arguments(posonlyargs=[],args=[],vararg=None,kwonlyargs=[],kw_defaults=[],kwarg=None,defaults=[]), |
| 646 | +body=[ast.Pass()], |
| 647 | +decorator_list=[], |
| 648 | +returns=None, |
| 649 | + ) |
| 650 | +ast.fix_missing_locations(node) |
| 651 | +self.assertEqual(ast.unparse(node),"def f():\n pass") |
| 652 | + |
| 653 | +deftest_function_with_type_params(self): |
| 654 | +node=ast.FunctionDef( |
| 655 | +name="f", |
| 656 | +args=ast.arguments(posonlyargs=[],args=[],vararg=None,kwonlyargs=[],kw_defaults=[],kwarg=None,defaults=[]), |
| 657 | +body=[ast.Pass()], |
| 658 | +decorator_list=[], |
| 659 | +returns=None, |
| 660 | +type_params=[ast.TypeVar("T")], |
| 661 | + ) |
| 662 | +ast.fix_missing_locations(node) |
| 663 | +self.assertEqual(ast.unparse(node),"def f[T]():\n pass") |
| 664 | + |
| 665 | +deftest_function_with_type_params_and_bound(self): |
| 666 | +node=ast.FunctionDef( |
| 667 | +name="f", |
| 668 | +args=ast.arguments(posonlyargs=[],args=[],vararg=None,kwonlyargs=[],kw_defaults=[],kwarg=None,defaults=[]), |
| 669 | +body=[ast.Pass()], |
| 670 | +decorator_list=[], |
| 671 | +returns=None, |
| 672 | +type_params=[ast.TypeVar("T",bound=ast.Name("int"))], |
| 673 | + ) |
| 674 | +ast.fix_missing_locations(node) |
| 675 | +self.assertEqual(ast.unparse(node),"def f[T: int]():\n pass") |
| 676 | + |
| 677 | +deftest_async_function(self): |
| 678 | +node=ast.AsyncFunctionDef( |
| 679 | +name="f", |
| 680 | +args=ast.arguments(posonlyargs=[],args=[],vararg=None,kwonlyargs=[],kw_defaults=[],kwarg=None,defaults=[]), |
| 681 | +body=[ast.Pass()], |
| 682 | +decorator_list=[], |
| 683 | +returns=None, |
| 684 | + ) |
| 685 | +ast.fix_missing_locations(node) |
| 686 | +self.assertEqual(ast.unparse(node),"async def f():\n pass") |
| 687 | + |
| 688 | +deftest_async_function_with_type_params(self): |
| 689 | +node=ast.AsyncFunctionDef( |
| 690 | +name="f", |
| 691 | +args=ast.arguments(posonlyargs=[],args=[],vararg=None,kwonlyargs=[],kw_defaults=[],kwarg=None,defaults=[]), |
| 692 | +body=[ast.Pass()], |
| 693 | +decorator_list=[], |
| 694 | +returns=None, |
| 695 | +type_params=[ast.TypeVar("T")], |
| 696 | + ) |
| 697 | +ast.fix_missing_locations(node) |
| 698 | +self.assertEqual(ast.unparse(node),"async def f[T]():\n pass") |
| 699 | + |
628 | 700 |
|
629 | 701 | classDirectoryTestCase(ASTTestCase):
|
630 | 702 | """Test roundtrip behaviour on all files in Lib and Lib/test."""
|
|