]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-109182: Fix and improve tests for gh-108654 (GH-109189) (#109271)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 12 Sep 2023 14:15:40 +0000 (07:15 -0700)
committerGitHub <noreply@github.com>
Tue, 12 Sep 2023 14:15:40 +0000 (16:15 +0200)
gh-109182: Fix and improve tests for gh-108654 (GH-109189)
(cherry picked from commit c0f488b88f2a54d76256818e2841d868fecfd396)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/test/test_listcomps.py

index c1089574d71b025130ed09c6f011a78b170fa9bf..12f7bbd123b30cf0ccb7c65ad9a1e8ebebf9b36b 100644 (file)
@@ -125,7 +125,7 @@ class ListComprehensionTest(unittest.TestCase):
                     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 @@ class ListComprehensionTest(unittest.TestCase):
 
     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 = """