]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Improve test coverage for is_typeddict (#104884)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Wed, 24 May 2023 18:46:00 +0000 (11:46 -0700)
committerGitHub <noreply@github.com>
Wed, 24 May 2023 18:46:00 +0000 (11:46 -0700)
In particular, it's important to test that is_typeddict(TypedDict)
returns False.

Lib/test/test_typing.py

index 098933b7cb434f9e05f0414c391065b2fcd7c63e..76c9e39f1d70e60a38e8a5c2f3d501bf4a26d17e 100644 (file)
@@ -7223,10 +7223,29 @@ class TypedDictTests(BaseTestCase):
                         pass
 
     def test_is_typeddict(self):
-        assert is_typeddict(Point2D) is True
-        assert is_typeddict(Union[str, int]) is False
+        self.assertIs(is_typeddict(Point2D), True)
+        self.assertIs(is_typeddict(Union[str, int]), False)
         # classes, not instances
-        assert is_typeddict(Point2D()) is False
+        self.assertIs(is_typeddict(Point2D()), False)
+        call_based = TypedDict('call_based', {'a': int})
+        self.assertIs(is_typeddict(call_based), True)
+        self.assertIs(is_typeddict(call_based()), False)
+
+        T = TypeVar("T")
+        class BarGeneric(TypedDict, Generic[T]):
+            a: T
+        self.assertIs(is_typeddict(BarGeneric), True)
+        self.assertIs(is_typeddict(BarGeneric[int]), False)
+        self.assertIs(is_typeddict(BarGeneric()), False)
+
+        class NewGeneric[T](TypedDict):
+            a: T
+        self.assertIs(is_typeddict(NewGeneric), True)
+        self.assertIs(is_typeddict(NewGeneric[int]), False)
+        self.assertIs(is_typeddict(NewGeneric()), False)
+
+        # The TypedDict constructor is not itself a TypedDict
+        self.assertIs(is_typeddict(TypedDict), False)
 
     def test_get_type_hints(self):
         self.assertEqual(