Issue #7502: Fix equality comparison for DocTestCase instances.
Patch by Cédric Krier.
This commit is contained in:
parent
41616300b1
commit
7a3d8aee8c
|
@ -451,6 +451,21 @@ class Example:
|
||||||
self.options = options
|
self.options = options
|
||||||
self.exc_msg = exc_msg
|
self.exc_msg = exc_msg
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if type(self) is not type(other):
|
||||||
|
return NotImplemented
|
||||||
|
|
||||||
|
return self.source == other.source and \
|
||||||
|
self.want == other.want and \
|
||||||
|
self.lineno == other.lineno and \
|
||||||
|
self.indent == other.indent and \
|
||||||
|
self.options == other.options and \
|
||||||
|
self.exc_msg == other.exc_msg
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
|
|
||||||
class DocTest:
|
class DocTest:
|
||||||
"""
|
"""
|
||||||
A collection of doctest examples that should be run in a single
|
A collection of doctest examples that should be run in a single
|
||||||
|
@ -499,6 +514,19 @@ class DocTest:
|
||||||
return ('<DocTest %s from %s:%s (%s)>' %
|
return ('<DocTest %s from %s:%s (%s)>' %
|
||||||
(self.name, self.filename, self.lineno, examples))
|
(self.name, self.filename, self.lineno, examples))
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if type(self) is not type(other):
|
||||||
|
return NotImplemented
|
||||||
|
|
||||||
|
return self.examples == other.examples and \
|
||||||
|
self.docstring == other.docstring and \
|
||||||
|
self.globs == other.globs and \
|
||||||
|
self.name == other.name and \
|
||||||
|
self.filename == other.filename and \
|
||||||
|
self.lineno == other.lineno
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
# This lets us sort tests by name:
|
# This lets us sort tests by name:
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
|
@ -2252,6 +2280,19 @@ class DocTestCase(unittest.TestCase):
|
||||||
def id(self):
|
def id(self):
|
||||||
return self._dt_test.name
|
return self._dt_test.name
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if type(self) is not type(other):
|
||||||
|
return NotImplemented
|
||||||
|
|
||||||
|
return self._dt_test == other._dt_test and \
|
||||||
|
self._dt_optionflags == other._dt_optionflags and \
|
||||||
|
self._dt_setUp == other._dt_setUp and \
|
||||||
|
self._dt_tearDown == other._dt_tearDown and \
|
||||||
|
self._dt_checker == other._dt_checker
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
name = self._dt_test.name.split('.')
|
name = self._dt_test.name.split('.')
|
||||||
return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
|
return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
|
||||||
|
|
|
@ -347,6 +347,46 @@ will raise a ValueError:
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
ValueError: line 2 of the docstring for some_test lacks blank after ...: '...print 1'
|
ValueError: line 2 of the docstring for some_test lacks blank after ...: '...print 1'
|
||||||
|
|
||||||
|
Compare `DocTest`:
|
||||||
|
|
||||||
|
>>> docstring = '''
|
||||||
|
... >>> print 12
|
||||||
|
... 12
|
||||||
|
... '''
|
||||||
|
>>> test = parser.get_doctest(docstring, globs, 'some_test',
|
||||||
|
... 'some_test', 20)
|
||||||
|
>>> same_test = parser.get_doctest(docstring, globs, 'some_test',
|
||||||
|
... 'some_test', 20)
|
||||||
|
>>> test == same_test
|
||||||
|
True
|
||||||
|
>>> test != same_test
|
||||||
|
False
|
||||||
|
>>> docstring = '''
|
||||||
|
... >>> print 42
|
||||||
|
... 42
|
||||||
|
... '''
|
||||||
|
>>> other_test = parser.get_doctest(docstring, globs, 'other_test',
|
||||||
|
... 'other_file', 10)
|
||||||
|
>>> test == other_test
|
||||||
|
False
|
||||||
|
>>> test != other_test
|
||||||
|
True
|
||||||
|
|
||||||
|
Compare `DocTestCase`:
|
||||||
|
|
||||||
|
>>> DocTestCase = doctest.DocTestCase
|
||||||
|
>>> test_case = DocTestCase(test)
|
||||||
|
>>> same_test_case = DocTestCase(same_test)
|
||||||
|
>>> other_test_case = DocTestCase(other_test)
|
||||||
|
>>> test_case == same_test_case
|
||||||
|
True
|
||||||
|
>>> test_case != same_test_case
|
||||||
|
False
|
||||||
|
>>> test == other_test_case
|
||||||
|
False
|
||||||
|
>>> test != other_test_case
|
||||||
|
True
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def test_DocTestFinder(): r"""
|
def test_DocTestFinder(): r"""
|
||||||
|
|
|
@ -464,6 +464,7 @@ Bob Kras
|
||||||
Holger Krekel
|
Holger Krekel
|
||||||
Michael Kremer
|
Michael Kremer
|
||||||
Fabian Kreutz
|
Fabian Kreutz
|
||||||
|
Cédric Krier
|
||||||
Hannu Krosing
|
Hannu Krosing
|
||||||
Andrej Krpic
|
Andrej Krpic
|
||||||
Ivan Krstić
|
Ivan Krstić
|
||||||
|
|
|
@ -86,6 +86,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #7502: Fix equality comparison for DocTestCase instances. Patch by
|
||||||
|
Cédric Krier.
|
||||||
|
|
||||||
- Issue #11870: threading: Properly reinitialize threads internal locks and
|
- Issue #11870: threading: Properly reinitialize threads internal locks and
|
||||||
condition variables to avoid deadlocks in child processes.
|
condition variables to avoid deadlocks in child processes.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue