From c0f488b88f2a54d76256818e2841d868fecfd396 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 11 Sep 2023 17:50:33 +0300 Subject: [PATCH] gh-109182: Fix and improve tests for gh-108654 (GH-109189) --- Lib/test/test_listcomps.py | 46 +++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/Lib/test/test_listcomps.py b/Lib/test/test_listcomps.py index c1089574d71b02..12f7bbd123b30c 100644 --- a/Lib/test/test_listcomps.py +++ b/Lib/test/test_listcomps.py @@ -125,7 +125,7 @@ def get_output(moddict, name): self.assertIs(type(e), raises) else: for k, v in (outputs or {}).items(): - self.assertEqual(get_output(newns, k), v) + self.assertEqual(get_output(newns, k), v, k) def test_lambdas_with_iteration_var_as_default(self): code = """ @@ -563,28 +563,38 @@ def test_iter_var_available_in_locals(self): def test_comp_in_try_except(self): template = """ - value = ["a"] + value = ["ab"] + result = snapshot = None try: - [{func}(value) for value in value] + result = [{func}(value) for value in value] except: - pass + snapshot = value + raise """ - for func in ["str", "int"]: - code = template.format(func=func) - raises = func != "str" - with self.subTest(raises=raises): - self._check_in_scopes(code, {"value": ["a"]}) + # No exception. + code = template.format(func='len') + self._check_in_scopes(code, {"value": ["ab"], "result": [2], "snapshot": None}) + # Handles exception. + code = template.format(func='int') + self._check_in_scopes(code, {"value": ["ab"], "result": None, "snapshot": ["ab"]}, + raises=ValueError) def test_comp_in_try_finally(self): - code = """ - def f(value): - try: - [{func}(value) for value in value] - finally: - return value - ret = f(["a"]) - """ - self._check_in_scopes(code, {"ret": ["a"]}) + template = """ + value = ["ab"] + result = snapshot = None + try: + result = [{func}(value) for value in value] + finally: + snapshot = value + """ + # No exception. + code = template.format(func='len') + self._check_in_scopes(code, {"value": ["ab"], "result": [2], "snapshot": ["ab"]}) + # Handles exception. + code = template.format(func='int') + self._check_in_scopes(code, {"value": ["ab"], "result": None, "snapshot": ["ab"]}, + raises=ValueError) def test_exception_in_post_comp_call(self): code = """