bpo-44524: Fix cryptic TypeError message when trying to subclass spec… · python/cpython@81fa08c (original) (raw)

Original file line number Diff line number Diff line change
@@ -2418,6 +2418,22 @@ def __new__(cls, arg):
2418 2418 self.assertEqual(c.from_b, 'b')
2419 2419 self.assertEqual(c.from_c, 'c')
2420 2420
2421 +def test_subclass_special_form(self):
2422 +for obj in (
2423 +ClassVar[int],
2424 +Final[int],
2425 +Union[int, float],
2426 +Optional[int],
2427 +Literal[1, 2],
2428 +Concatenate[int, ParamSpec("P")],
2429 +TypeGuard[int],
2430 + ):
2431 +with self.subTest(msg=obj):
2432 +with self.assertRaisesRegex(
2433 +TypeError, f'^{re.escape(f"Cannot subclass {obj!r}")}$'
2434 + ):
2435 +class Foo(obj):
2436 +pass
2421 2437
2422 2438 class ClassVarTests(BaseTestCase):
2423 2439