Skip to content

Commit

Permalink
gh-100129: Add tests for pickling all builtin types and functions (GH…
Browse files Browse the repository at this point in the history
…-100142)

(cherry picked from commit b98d2d3)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
  • Loading branch information
miss-islington and serhiy-storchaka authored Dec 21, 2022
1 parent 7f24056 commit 2dda668
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions Lib/test/pickletester.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import builtins
import collections
import copyreg
import dbm
Expand All @@ -11,6 +12,7 @@
import struct
import sys
import threading
import types
import unittest
import weakref
from textwrap import dedent
Expand Down Expand Up @@ -1979,6 +1981,33 @@ def test_singleton_types(self):
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):
Expand Down

0 comments on commit 2dda668

Please sign in to comment.