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.
diff --git a/Doc/lib/libdoctest.tex b/Doc/lib/libdoctest.tex
index eedb44d..bd9bb3d 100644
--- a/Doc/lib/libdoctest.tex
+++ b/Doc/lib/libdoctest.tex
@@ -365,6 +365,10 @@
     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 @@
   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 @@
 \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}
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 988707b..0a5b2da 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -248,6 +248,7 @@
 #                            +---------+
 
 # Option constants.
+
 OPTIONFLAGS_BY_NAME = {}
 def register_optionflag(name):
     flag = 1 << len(OPTIONFLAGS_BY_NAME)
@@ -258,11 +259,22 @@
 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 @@
 ######################################################################
 
 _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 @@
       >>> 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 @@
         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