]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-100129: Add tests for pickling all builtin types and functions (GH-100142)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 21 Dec 2022 14:58:20 +0000 (06:58 -0800)
committerGitHub <noreply@github.com>
Wed, 21 Dec 2022 14:58:20 +0000 (06:58 -0800)
(cherry picked from commit b98d2d31bffcaeb0c4c8848a8d1b35419c70b2da)

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

index 499f80a15f342272721568e94d6b7549108310d2..6e87370c2065ba531fb9938b2132a432f9fd7250 100644 (file)
@@ -1,3 +1,4 @@
+import builtins
 import collections
 import copyreg
 import dbm
@@ -11,6 +12,7 @@ import shutil
 import struct
 import sys
 import threading
+import types
 import unittest
 import weakref
 from textwrap import dedent
@@ -1980,6 +1982,33 @@ class AbstractPickleTests:
                 u = self.loads(s)
                 self.assertIs(type(singleton), u)
 
+    def test_builtin_types(self):
+        for t in builtins.__dict__.values():
+            if isinstance(t, type) and not issubclass(t, BaseException):
+                for proto in protocols:
+                    s = self.dumps(t, proto)
+                    self.assertIs(self.loads(s), t)
+
+    def test_builtin_exceptions(self):
+        for t in builtins.__dict__.values():
+            if isinstance(t, type) and issubclass(t, BaseException):
+                for proto in protocols:
+                    s = self.dumps(t, proto)
+                    u = self.loads(s)
+                    if proto <= 2 and issubclass(t, OSError) and t is not BlockingIOError:
+                        self.assertIs(u, OSError)
+                    elif proto <= 2 and issubclass(t, ImportError):
+                        self.assertIs(u, ImportError)
+                    else:
+                        self.assertIs(u, t)
+
+    def test_builtin_functions(self):
+        for t in builtins.__dict__.values():
+            if isinstance(t, types.BuiltinFunctionType):
+                for proto in protocols:
+                    s = self.dumps(t, proto)
+                    self.assertIs(self.loads(s), t)
+
     # Tests for protocol 2
 
     def test_proto(self):