mirror of
https://github.com/python/cpython
synced 2024-09-05 16:38:56 +00:00
The distinction between comparison flags and reporting flags isn't unique
to unittest, so make it official: new module constants COMPARISON_FLAGS and REPORTING_FLAGS, which are bitmasks or'ing together the relevant individual option flags. set_unittest_reportflags(): Reworked to use REPORTING_FLAGS, and simplified overly complicated flag logic. class FakeModule: Removed this; neither documented nor used.
This commit is contained in:
parent
ed047486f5
commit
38330fe5ef
|
@ -365,6 +365,10 @@ example's expected output:
|
|||
is prone to in regular expressions.
|
||||
\end{datadesc}
|
||||
|
||||
\begin{datadesc}{COMPARISON_FLAGS}
|
||||
A bitmask or'ing together all the comparison flags above.
|
||||
\end{datadesc}
|
||||
|
||||
The second group of options controls how test failures are reported:
|
||||
|
||||
\begin{datadesc}{REPORT_UDIFF}
|
||||
|
@ -398,6 +402,10 @@ The second group of options controls how test failures are reported:
|
|||
failures reported; only the output is suppressed.
|
||||
\end{datadesc}
|
||||
|
||||
\begin{datadesc}{REPORTING_FLAGS}
|
||||
A bitmask or'ing together all the reporting flags above.
|
||||
\end{datadesc}
|
||||
|
||||
A "doctest directive" is a trailing Python comment on a line of a doctest
|
||||
example:
|
||||
|
||||
|
@ -456,7 +464,8 @@ can be useful.
|
|||
\versionchanged[Constants \constant{DONT_ACCEPT_BLANKLINE},
|
||||
\constant{NORMALIZE_WHITESPACE}, \constant{ELLIPSIS},
|
||||
\constant{REPORT_UDIFF}, \constant{REPORT_CDIFF},
|
||||
\constant{REPORT_NDIFF}, and \constant{REPORT_ONLY_FIRST_FAILURE}
|
||||
\constant{REPORT_NDIFF}, \constant{REPORT_ONLY_FIRST_FAILURE},
|
||||
\constant{COMPARISON_FLAGS} and \constant{REPORTING_FLAGS}
|
||||
were added; by default \code{<BLANKLINE>} in expected output
|
||||
matches an empty line in actual output; and doctest directives
|
||||
were added]{2.4}
|
||||
|
|
|
@ -248,6 +248,7 @@ def _test():
|
|||
# +---------+
|
||||
|
||||
# Option constants.
|
||||
|
||||
OPTIONFLAGS_BY_NAME = {}
|
||||
def register_optionflag(name):
|
||||
flag = 1 << len(OPTIONFLAGS_BY_NAME)
|
||||
|
@ -258,11 +259,22 @@ def register_optionflag(name):
|
|||
DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
|
||||
NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
|
||||
ELLIPSIS = register_optionflag('ELLIPSIS')
|
||||
|
||||
COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 |
|
||||
DONT_ACCEPT_BLANKLINE |
|
||||
NORMALIZE_WHITESPACE |
|
||||
ELLIPSIS)
|
||||
|
||||
REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
|
||||
REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
|
||||
REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
|
||||
REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
|
||||
|
||||
REPORTING_FLAGS = (REPORT_UDIFF |
|
||||
REPORT_CDIFF |
|
||||
REPORT_NDIFF |
|
||||
REPORT_ONLY_FIRST_FAILURE)
|
||||
|
||||
# Special string markers for use in `want` strings:
|
||||
BLANKLINE_MARKER = '<BLANKLINE>'
|
||||
ELLIPSIS_MARKER = '...'
|
||||
|
@ -1993,14 +2005,9 @@ def merge(self, other):
|
|||
######################################################################
|
||||
|
||||
_unittest_reportflags = 0
|
||||
valid_unittest_reportflags = (
|
||||
REPORT_CDIFF |
|
||||
REPORT_UDIFF |
|
||||
REPORT_NDIFF |
|
||||
REPORT_ONLY_FIRST_FAILURE
|
||||
)
|
||||
|
||||
def set_unittest_reportflags(flags):
|
||||
"""Sets the unit test option flags
|
||||
"""Sets the unittest option flags.
|
||||
|
||||
The old flag is returned so that a runner could restore the old
|
||||
value if it wished to:
|
||||
|
@ -2020,37 +2027,21 @@ def set_unittest_reportflags(flags):
|
|||
>>> set_unittest_reportflags(ELLIPSIS)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: ('Invalid flags passed', 8)
|
||||
ValueError: ('Only reporting flags allowed', 8)
|
||||
|
||||
>>> set_unittest_reportflags(old) == (REPORT_NDIFF |
|
||||
... REPORT_ONLY_FIRST_FAILURE)
|
||||
True
|
||||
|
||||
"""
|
||||
|
||||
# extract the valid reporting flags:
|
||||
rflags = flags & valid_unittest_reportflags
|
||||
|
||||
# Now remove these flags from the given flags
|
||||
nrflags = flags ^ rflags
|
||||
|
||||
if nrflags:
|
||||
raise ValueError("Invalid flags passed", flags)
|
||||
|
||||
global _unittest_reportflags
|
||||
|
||||
if (flags & REPORTING_FLAGS) != flags:
|
||||
raise ValueError("Only reporting flags allowed", flags)
|
||||
old = _unittest_reportflags
|
||||
_unittest_reportflags = flags
|
||||
return old
|
||||
|
||||
|
||||
class FakeModule:
|
||||
"""Fake module created by tests
|
||||
"""
|
||||
|
||||
def __init__(self, dict, name):
|
||||
self.__dict__ = dict
|
||||
self.__name__ = name
|
||||
|
||||
class DocTestCase(unittest.TestCase):
|
||||
|
||||
def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
|
||||
|
@ -2083,7 +2074,7 @@ def runTest(self):
|
|||
new = StringIO()
|
||||
optionflags = self._dt_optionflags
|
||||
|
||||
if not (optionflags & valid_unittest_reportflags):
|
||||
if not (optionflags & REPORTING_FLAGS):
|
||||
# The option flags don't include any reporting flags,
|
||||
# so add the default reporting flags
|
||||
optionflags |= _unittest_reportflags
|
||||
|
|
Loading…
Reference in a new issue