From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 21 Dec 2022 14:58:20 +0000 (-0800) Subject: gh-100129: Add tests for pickling all builtin types and functions (GH-100142) X-Git-Tag: v3.11.2~156 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0397f040e239c82848f51dedef9af7b9bd99ef55;p=thirdparty%2FPython%2Fcpython.git gh-100129: Add tests for pickling all builtin types and functions (GH-100142) (cherry picked from commit b98d2d31bffcaeb0c4c8848a8d1b35419c70b2da) Co-authored-by: Serhiy Storchaka --- diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index 499f80a15f34..6e87370c2065 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -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):