From 7be91fc92cf9d2cfa562fd474807175d82faded5 Mon Sep 17 00:00:00 2001 From: tdub0 <43589631+tdub0@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:26:13 -0700 Subject: [PATCH 1/4] Update test_types.py from CPython v3.11.2 --- Lib/test/test_types.py | 44 +++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 2212d2323d..8c506784d4 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -527,18 +527,16 @@ def test(f, format_spec, result): self.assertRaises(TypeError, 3.0.__format__, None) self.assertRaises(TypeError, 3.0.__format__, 0) - # other format specifiers shouldn't work on floats, - # in particular int specifiers - for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + - [chr(x) for x in range(ord('A'), ord('Z')+1)]): - if not format_spec in 'eEfFgGn%': - self.assertRaises(ValueError, format, 0.0, format_spec) - self.assertRaises(ValueError, format, 1.0, format_spec) - self.assertRaises(ValueError, format, -1.0, format_spec) - self.assertRaises(ValueError, format, 1e100, format_spec) - self.assertRaises(ValueError, format, -1e100, format_spec) - self.assertRaises(ValueError, format, 1e-100, format_spec) - self.assertRaises(ValueError, format, -1e-100, format_spec) + # confirm format options expected to fail on floats, such as integer + # presentation types + for format_spec in 'sbcdoxX': + self.assertRaises(ValueError, format, 0.0, format_spec) + self.assertRaises(ValueError, format, 1.0, format_spec) + self.assertRaises(ValueError, format, -1.0, format_spec) + self.assertRaises(ValueError, format, 1e100, format_spec) + self.assertRaises(ValueError, format, -1e100, format_spec) + self.assertRaises(ValueError, format, 1e-100, format_spec) + self.assertRaises(ValueError, format, -1e-100, format_spec) # Alternate float formatting test(1.0, '.0e', '1e+00') @@ -604,6 +602,12 @@ def test_slot_wrapper_types(self): self.assertIsInstance(object.__lt__, types.WrapperDescriptorType) self.assertIsInstance(int.__lt__, types.WrapperDescriptorType) + def test_dunder_get_signature(self): + sig = inspect.signature(object.__init__.__get__) + self.assertEqual(list(sig.parameters), ["instance", "owner"]) + # gh-93021: Second parameter is optional + self.assertIs(sig.parameters["owner"].default, None) + def test_method_wrapper_types(self): self.assertIsInstance(object().__init__, types.MethodWrapperType) self.assertIsInstance(object().__str__, types.MethodWrapperType) @@ -629,6 +633,14 @@ def test_notimplemented_type(self): def test_none_type(self): self.assertIsInstance(None, types.NoneType) + def test_traceback_and_frame_types(self): + try: + raise OSError + except OSError as e: + exc = e + self.assertIsInstance(exc.__traceback__, types.TracebackType) + self.assertIsInstance(exc.__traceback__.tb_frame, types.FrameType) + class UnionTests(unittest.TestCase): @@ -878,7 +890,7 @@ def test_union_parameter_substitution_errors(self): T = typing.TypeVar("T") x = int | T with self.assertRaises(TypeError): - x[42] + x[int, str] def test_or_type_operator_with_forward(self): T = typing.TypeVar('T') @@ -958,9 +970,9 @@ def __eq__(self, other): with self.assertRaises(ZeroDivisionError): list[int] | list[bt] - union_ga = (int | list[str], int | collections.abc.Callable[..., str], - int | d) - # Raise error when isinstance(type, type | genericalias) + union_ga = (list[str] | int, collections.abc.Callable[..., str] | int, + d | int) + # Raise error when isinstance(type, genericalias | type) for type_ in union_ga: with self.subTest(f"check isinstance/issubclass is invalid for {type_}"): with self.assertRaises(TypeError): From 0da079c98c263cbe93c1a58d72fa0dfb35f3d4d3 Mon Sep 17 00:00:00 2001 From: tdub0 <43589631+tdub0@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:32:27 -0700 Subject: [PATCH 2/4] exp failure on new dunder sig test --- Lib/test/test_types.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 8c506784d4..af8694a48b 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -602,6 +602,8 @@ def test_slot_wrapper_types(self): self.assertIsInstance(object.__lt__, types.WrapperDescriptorType) self.assertIsInstance(int.__lt__, types.WrapperDescriptorType) + # TODO: RUSTPYTHON + @unittest.expectedFailure def test_dunder_get_signature(self): sig = inspect.signature(object.__init__.__get__) self.assertEqual(list(sig.parameters), ["instance", "owner"]) From 754b1df51de2370166a260e3aa7c3152e8b73f1c Mon Sep 17 00:00:00 2001 From: tdub0 <43589631+tdub0@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:40:03 -0700 Subject: [PATCH 3/4] specify failure reason --- Lib/test/test_types.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index af8694a48b..6a0973d08d 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -602,7 +602,8 @@ def test_slot_wrapper_types(self): self.assertIsInstance(object.__lt__, types.WrapperDescriptorType) self.assertIsInstance(int.__lt__, types.WrapperDescriptorType) - # TODO: RUSTPYTHON + # TODO: No signature found in builtin method __get__ of 'method_descriptor' + # objects so ValueError is raised @unittest.expectedFailure def test_dunder_get_signature(self): sig = inspect.signature(object.__init__.__get__) From b4587979795e8bf556e55c998388e048f032c53b Mon Sep 17 00:00:00 2001 From: tdub0 <43589631+tdub0@users.noreply.github.com> Date: Sun, 12 Mar 2023 09:58:25 -0700 Subject: [PATCH 4/4] fix todo for RustPython --- Lib/test/test_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 6a0973d08d..41ab27f37b 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -602,8 +602,7 @@ def test_slot_wrapper_types(self): self.assertIsInstance(object.__lt__, types.WrapperDescriptorType) self.assertIsInstance(int.__lt__, types.WrapperDescriptorType) - # TODO: No signature found in builtin method __get__ of 'method_descriptor' - # objects so ValueError is raised + # TODO: RUSTPYTHON No signature found in builtin method __get__ of 'method_descriptor' objects. @unittest.expectedFailure def test_dunder_get_signature(self): sig = inspect.signature(object.__init__.__get__)