mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Store the functions in the _type_equality_funcs as wrapped objects that are deep copyable.
This allows for the deep copying of TestCase instances. Issue 5660
This commit is contained in:
parent
7152f6d915
commit
e2942d073d
2 changed files with 27 additions and 4 deletions
|
@ -160,7 +160,6 @@ def expectedFailure(func):
|
|||
raise _UnexpectedSuccess
|
||||
return wrapper
|
||||
|
||||
|
||||
__unittest = 1
|
||||
|
||||
class TestResult(object):
|
||||
|
@ -289,6 +288,16 @@ class _AssertRaisesContext(object):
|
|||
return True
|
||||
|
||||
|
||||
class _AssertWrapper(object):
|
||||
"""Wrap entries in the _type_equality_funcs registry to make them deep
|
||||
copyable."""
|
||||
|
||||
def __init__(self, function):
|
||||
self.function = function
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
memo[id(self)] = self
|
||||
|
||||
|
||||
class TestCase(object):
|
||||
"""A class whose instances are single test cases.
|
||||
|
@ -361,7 +370,7 @@ class TestCase(object):
|
|||
msg= argument that raises self.failureException with a
|
||||
useful error message when the two arguments are not equal.
|
||||
"""
|
||||
self._type_equality_funcs[typeobj] = function
|
||||
self._type_equality_funcs[typeobj] = _AssertWrapper(function)
|
||||
|
||||
def setUp(self):
|
||||
"Hook method for setting up the test fixture before exercising it."
|
||||
|
@ -542,8 +551,10 @@ class TestCase(object):
|
|||
# See the discussion in http://bugs.python.org/issue2578.
|
||||
#
|
||||
if type(first) is type(second):
|
||||
return self._type_equality_funcs.get(type(first),
|
||||
self._baseAssertEqual)
|
||||
asserter = self._type_equality_funcs.get(type(first))
|
||||
if asserter is not None:
|
||||
return asserter.function
|
||||
|
||||
return self._baseAssertEqual
|
||||
|
||||
def _baseAssertEqual(self, first, second, msg=None):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue