10a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 20a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest 30a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test import test_support 40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport textwrap 50a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ComplexArgsTestCase(unittest.TestCase): 70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 80a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def check(self, func, expected, *args): 90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(func(*args), expected) 100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # These functions are tested below as lambdas too. If you add a 120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # function test, also add a similar lambda test. 130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Functions are wrapped in "exec" statements in order to 150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # silence Py3k warnings. 160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_func_parens_no_unpacking(self): 180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((x))))): return x 200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 1, 1) 210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Inner parens are elided, same as: f(x,) 220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((x)),): return x 230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 2, 2) 240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_func_1(self): 270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((x),)))): return x 290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 3, (3,)) 300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((x)),))): return x 310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 4, (4,)) 320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((x))),)): return x 330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 5, (5,)) 340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((x),)): return x 350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 6, (6,)) 360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_func_2(self): 390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((x)),),)): return x 410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 2, ((2,),)) 420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_func_3(self): 450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f((((((x)),),),)): return x 470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 3, (((3,),),)) 480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_func_complex(self): 510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f((((((x)),),),), a, b, c): return x, a, b, c 530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(((((((x)),)),),), a, b, c): return x, a, b, c 560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def f(a, b, c, ((((((x)),)),),)): return a, b, c, x 590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) 600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Duplicate the tests above, but for lambda. If you add a lambda test, 630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # also add a similar function test above. 640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_lambda_parens_no_unpacking(self): 660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x))))): x 680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 1, 1) 690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Inner parens are elided, same as: f(x,) 700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda ((x)),: x 710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 2, 2) 720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_lambda_1(self): 750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x),)))): x 770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 3, (3,)) 780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x)),))): x 790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 4, (4,)) 800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x))),)): x 810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 5, (5,)) 820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((x),)): x 830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 6, (6,)) 840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_lambda_2(self): 870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x)),),)): x 890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 2, ((2,),)) 900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_lambda_3(self): 930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda ((((((x)),),),)): x 950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, 3, (((3,),),)) 960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_lambda_complex(self): 990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao exec textwrap.dedent(""" 1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda (((((x)),),),), a, b, c: (x, a, b, c) 1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda ((((((x)),)),),), a, b, c: (x, a, b, c) 1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = lambda a, b, c, ((((((x)),)),),): (a, b, c, x) 1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) 1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """) 1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_main(): 1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao with test_support.check_py3k_warnings( 1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao ("tuple parameter unpacking has been removed", SyntaxWarning), 1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao ("parenthesized argument names are invalid", SyntaxWarning)): 1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao test_support.run_unittest(ComplexArgsTestCase) 1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == "__main__": 1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao test_main() 119