2 # Released to the public domain 16-Jan-2001,
3 # by Tim Peters (tim.one@home.com).
5 # Provided as-is; use at your own risk; no warranty; no promises; enjoy!
7 """Module doctest -- a framework for running examples in docstrings.
11 In normal use, end each module M with:
14 import doctest, M # replace M with your module's name
15 return doctest.testmod(M) # ditto
17 if __name__ == "__main__":
20 Then running the module as a script will cause the examples in the
21 docstrings to get executed and verified:
25 This won't display anything unless an example fails, in which case the
26 failing example(s) and the cause(s) of the failure(s) are printed to stdout
27 (why not stderr? because stderr is a lame hack <0.2 wink>), and the final
28 line of output is "Test failed.".
30 Run it with the -v switch instead:
34 and a detailed report of all examples tried is printed to stdout, along
35 with assorted summaries at the end.
37 You can force verbose mode by passing "verbose=1" to testmod, or prohibit
38 it by passing "verbose=0". In either of those cases, sys.argv is not
41 In any case, testmod returns a 2-tuple of ints (f, t), where f is the
42 number of docstring examples that failed and t is the total number of
43 docstring examples attempted.
46 WHICH DOCSTRINGS ARE EXAMINED?
50 + f.__doc__ for all functions f in M.__dict__.values(), except those
51 with private names and those defined in other modules.
53 + C.__doc__ for all classes C in M.__dict__.values(), except those with
54 private names and those defined in other modules.
56 + If M.__test__ exists and "is true", it must be a dict, and
57 each entry maps a (string) name to a function object, class object, or
58 string. Function and class object docstrings found from M.__test__
59 are searched even if the name is private, and strings are searched
60 directly as if they were docstrings. In output, a key K in M.__test__
62 <name of M>.__test__.K
64 Any classes found are recursively searched similarly, to test docstrings in
65 their contained methods and nested classes. Private names reached from M's
66 globals are skipped, but all names reached from M.__test__ are searched.
68 By default, a name is considered to be private if it begins with an
69 underscore (like "_my_func") but doesn't both begin and end with (at least)
70 two underscores (like "__init__"). You can change the default by passing
71 your own "isprivate" function to testmod.
73 If you want to test docstrings in objects with private names too, stuff
74 them into an M.__test__ dict, or see ADVANCED USAGE below (e.g., pass your
75 own isprivate function to Tester's constructor, or call the rundoc method
76 of a Tester instance).
78 WHAT'S THE EXECUTION CONTEXT?
80 By default, each time testmod finds a docstring to test, it uses a *copy*
81 of M's globals (so that running tests on a module doesn't change the
82 module's real globals, and so that one test in M can't leave behind crumbs
83 that accidentally allow another test to work). This means examples can
84 freely use any names defined at top-level in M. It also means that sloppy
85 imports (see above) can cause examples in external docstrings to use
86 globals inappropriate for them.
88 You can force use of your own dict as the execution context by passing
89 "globs=your_dict" to testmod instead. Presumably this would be a copy of
90 M.__dict__ merged with the globals from other imported modules.
93 WHAT IF I WANT TO TEST A WHOLE PACKAGE?
95 Piece o' cake, provided the modules do their testing from docstrings.
96 Here's the test.py I use for the world's most elaborate Rational/
97 floating-base-conversion pkg (which I'll distribute some day):
99 from Rational import Cvt
100 from Rational import Format
101 from Rational import machprec
102 from Rational import Rat
103 from Rational import Round
104 from Rational import utils
116 verbose = "-v" in sys.argv
118 doctest.testmod(mod, verbose=verbose, report=0)
119 doctest.master.summarize()
121 if __name__ == "__main__":
124 IOW, it just runs testmod on all the pkg modules. testmod remembers the
125 names and outcomes (# of failures, # of tries) for each item it's seen, and
126 passing "report=0" prevents it from printing a summary in verbose mode.
127 Instead, the summary is delayed until all modules have been tested, and
128 then "doctest.master.summarize()" forces the summary at the end.
130 So this is very nice in practice: each module can be tested individually
131 with almost no work beyond writing up docstring examples, and collections
132 of modules can be tested too as a unit with no more work than the above.
135 WHAT ABOUT EXCEPTIONS?
137 No problem, as long as the only output generated by the example is the
138 traceback itself. For example:
140 >>> [1, 2, 3].remove(42)
141 Traceback (most recent call last):
142 File "<stdin>", line 1, in ?
143 ValueError: list.remove(x): x not in list
146 Note that only the exception type and value are compared (specifically,
147 only the last line in the traceback).
152 doctest.testmod() captures the testing policy I find most useful most
153 often. You may want other policies.
155 testmod() actually creates a local instance of class doctest.Tester, runs
156 appropriate methods of that class, and merges the results into global
157 Tester instance doctest.master.
159 You can create your own instances of doctest.Tester, and so build your own
160 policies, or even run methods of doctest.master directly. See
161 doctest.Tester.__doc__ for details.
164 SO WHAT DOES A DOCSTRING EXAMPLE LOOK LIKE ALREADY!?
166 Oh ya. It's easy! In most cases a copy-and-paste of an interactive
167 console session works fine -- just make sure the leading whitespace is
168 rigidly consistent (you can mix tabs and spaces if you're too lazy to do it
169 right, but doctest is not in the business of guessing what you think a tab
172 >>> # comments are ignored
188 Any expected output must immediately follow the final ">>>" or "..." line
189 containing the code, and the expected output (if any) extends to the next
190 ">>>" or all-whitespace line. That's it.
194 + Expected output cannot contain an all-whitespace line, since such a line
195 is taken to signal the end of expected output.
197 + Output to stdout is captured, but not output to stderr (exception
198 tracebacks are captured via a different means).
200 + If you continue a line via backslashing in an interactive session, or for
201 any other reason use a backslash, you need to double the backslash in the
202 docstring version. This is simply because you're in a string, and so the
203 backslash must be escaped for it to survive intact. Like:
207 ... "es": # in the source code you'll see the doubled backslashes
211 The starting column doesn't matter:
218 and as many leading whitespace characters are stripped from the expected
219 output as appeared in the initial ">>>" line that triggered it.
221 If you execute this very file, the examples above will be found and
222 executed, leading to this output in verbose mode:
224 Running doctest.__doc__
225 Trying: [1, 2, 3].remove(42)
227 Traceback (most recent call last):
228 File "<stdin>", line 1, in ?
229 ValueError: list.remove(x): x not in list
249 ... and a bunch more like that, with this summary at the end:
251 5 items had no tests:
252 doctest.Tester.__init__
253 doctest.Tester.run__test__
254 doctest.Tester.summarize
255 doctest.run_docstring_examples
257 12 items passed all tests:
259 6 tests in doctest.Tester
260 10 tests in doctest.Tester.merge
261 14 tests in doctest.Tester.rundict
262 3 tests in doctest.Tester.rundoc
263 3 tests in doctest.Tester.runstring
264 2 tests in doctest.__test__._TestClass
265 2 tests in doctest.__test__._TestClass.__init__
266 2 tests in doctest.__test__._TestClass.get
267 1 tests in doctest.__test__._TestClass.square
268 2 tests in doctest.__test__.string
269 7 tests in doctest.is_private
270 60 tests in 17 items.
271 60 passed and 0 failed.
277 'run_docstring_examples',
287 _isPS1
= re
.compile(r
"(\s*)" + re
.escape(PS1
)).match
288 _isPS2
= re
.compile(r
"(\s*)" + re
.escape(PS2
)).match
289 _isEmpty
= re
.compile(r
"\s*$").match
290 _isComment
= re
.compile(r
"\s*#").match
293 from types
import StringTypes
as _StringTypes
295 from inspect
import isclass
as _isclass
296 from inspect
import isfunction
as _isfunction
297 from inspect
import ismodule
as _ismodule
298 from inspect
import classify_class_attrs
as _classify_class_attrs
300 # Extract interactive examples from a string. Return a list of triples,
301 # (source, outcome, lineno). "source" is the source code, and ends
302 # with a newline iff the source spans more than one line. "outcome" is
303 # the expected output if any, else an empty string. When not empty,
304 # outcome always ends with a newline. "lineno" is the line number,
305 # 0-based wrt the start of the string, of the first source line.
307 def _extract_examples(s
):
308 isPS1
, isPS2
= _isPS1
, _isPS2
309 isEmpty
, isComment
= _isEmpty
, _isComment
311 lines
= s
.split("\n")
319 j
= m
.end(0) # beyond the prompt
320 if isEmpty(line
, j
) or isComment(line
, j
):
321 # a bare prompt or comment -- not interesting
325 raise ValueError("line " + `lineno`
+ " of docstring lacks "
326 "blank after " + PS1
+ ": " + line
)
329 nblanks
= len(blanks
)
330 # suck up this and following PS2 lines
333 source
.append(line
[j
:])
337 if m
.group(1) != blanks
:
338 raise ValueError("inconsistent leading whitespace "
339 "in line " + `i`
+ " of docstring: " + line
)
346 # get rid of useless null line from trailing empty "..."
349 source
= "\n".join(source
) + "\n"
351 if isPS1(line
) or isEmpty(line
):
356 if line
[:nblanks
] != blanks
:
357 raise ValueError("inconsistent leading whitespace "
358 "in line " + `i`
+ " of docstring: " + line
)
359 expect
.append(line
[nblanks
:])
362 if isPS1(line
) or isEmpty(line
):
364 expect
= "\n".join(expect
) + "\n"
365 examples
.append( (source
, expect
, lineno
) )
368 # Capture stdout when running examples.
376 guts
= "".join(self
.buf
)
377 # If anything at all was written, make sure there's a trailing
378 # newline. There's no way for the expected output to indicate
379 # that a trailing newline is missing.
380 if guts
and not guts
.endswith("\n"):
382 # Prevent softspace from screwing up the next test case, in
383 # case they used print with a trailing comma in an example.
384 if hasattr(self
, "softspace"):
389 if hasattr(self
, "softspace"):
392 # JPython calls flush
395 # Display some tag-and-msg pairs nicely, keeping the tag and its msg
396 # on the same line when that makes sense.
398 def _tag_out(printer
, *tag_msg_pairs
):
399 for tag
, msg
in tag_msg_pairs
:
401 msg_has_nl
= msg
[-1:] == "\n"
402 msg_has_two_nl
= msg_has_nl
and \
403 msg
.find("\n") < len(msg
) - 1
404 if len(tag
) + len(msg
) < 76 and not msg_has_two_nl
:
412 # Run list of examples, in context globs. "out" can be used to display
413 # stuff to "the real" stdout, and fakeout is an instance of _SpoofOut
414 # that captures the examples' std output. Return (#failures, #tries).
416 def _run_examples_inner(out
, fakeout
, examples
, globs
, verbose
, name
,
418 import sys
, traceback
419 OK
, BOOM
, FAIL
= range(3)
423 for source
, want
, lineno
in examples
:
425 _tag_out(out
, ("Trying", source
),
426 ("Expecting", want
or NADA
))
429 exec compile(source
, "<string>", "single",
430 compileflags
, 1) in globs
433 except KeyboardInterrupt:
436 # See whether the exception was expected.
437 if want
.find("Traceback (innermost last):\n") == 0 or \
438 want
.find("Traceback (most recent call last):\n") == 0:
439 # Only compare exception type and value - the rest of
440 # the traceback isn't necessary.
441 want
= want
.split('\n')[-2] + '\n'
442 exc_type
, exc_val
= sys
.exc_info()[:2]
443 got
= traceback
.format_exception_only(exc_type
, exc_val
)[-1]
446 # unexpected exception
448 traceback
.print_exc(file=stderr
)
458 assert state
in (FAIL
, BOOM
)
459 failures
= failures
+ 1
461 _tag_out(out
, ("Failure in example", source
))
462 out("from line #" + `lineno`
+ " of " + name
+ "\n")
464 _tag_out(out
, ("Expected", want
or NADA
), ("Got", got
))
467 _tag_out(out
, ("Exception raised", stderr
.get()))
469 return failures
, len(examples
)
471 # Get the future-flags associated with the future features that have been
472 # imported into globs.
474 def _extract_future_flags(globs
):
476 for fname
in __future__
.all_feature_names
:
477 feature
= globs
.get(fname
, None)
478 if feature
is getattr(__future__
, fname
):
479 flags |
= feature
.compiler_flag
482 # Run list of examples, in a shallow copy of context (dict) globs.
483 # Return (#failures, #tries).
485 def _run_examples(examples
, globs
, verbose
, name
, compileflags
):
490 sys
.stdout
= fakeout
= _SpoofOut()
491 x
= _run_examples_inner(saveout
.write
, fakeout
, examples
,
492 globs
, verbose
, name
, compileflags
)
495 # While Python gc can clean up most cycles on its own, it doesn't
496 # chase frame objects. This is especially irksome when running
497 # generator tests that raise exceptions, because a named generator-
498 # iterator gets an entry in globs, and the generator-iterator
499 # object's frame's traceback info points back to globs. This is
500 # easy to break just by clearing the namespace. This can also
501 # help to break other kinds of cycles, and even for cycles that
502 # gc can break itself it's better to break them ASAP.
506 def run_docstring_examples(f
, globs
, verbose
=0, name
="NoName",
508 """f, globs, verbose=0, name="NoName" -> run examples from f.__doc__.
510 Use (a shallow copy of) dict globs as the globals for execution.
511 Return (#failures, #tries).
513 If optional arg verbose is true, print stuff even if there are no
515 Use string name in failure msgs.
521 # docstring empty or None
523 # just in case CT invents a doc object that has to be forced
524 # to look like a string <0.9 wink>
526 except KeyboardInterrupt:
531 e
= _extract_examples(doc
)
534 if compileflags
is None:
535 compileflags
= _extract_future_flags(globs
)
536 return _run_examples(e
, globs
, verbose
, name
, compileflags
)
538 def is_private(prefix
, base
):
539 """prefix, base -> true iff name prefix + "." + base is "private".
541 Prefix may be an empty string, and base does not contain a period.
542 Prefix is ignored (although functions you write conforming to this
543 protocol may make use of it).
544 Return true iff base begins with an (at least one) underscore, but
545 does not both begin and end with (at least) two underscores.
547 >>> is_private("a.b", "my_func")
549 >>> is_private("____", "_my_func")
551 >>> is_private("someclass", "__init__")
553 >>> is_private("sometypo", "__init_")
555 >>> is_private("x.y.z", "_")
557 >>> is_private("_x.y.z", "__")
559 >>> is_private("", "") # senseless but consistent
563 return base
[:1] == "_" and not base
[:2] == "__" == base
[-2:]
565 # Determine if a class of function was defined in the given module.
567 def _from_module(module
, object):
568 if _isfunction(object):
569 return module
.__dict
__ is object.func_globals
571 return module
.__name
__ == object.__module
__
572 raise ValueError("object must be a class or function")
575 """Class Tester -- runs docstring examples and accumulates stats.
577 In normal use, function doctest.testmod() hides all this from you,
578 so use that if you can. Create your own instances of Tester to do
583 Search string s for examples to run; use name for logging.
584 Return (#failures, #tries).
586 rundoc(object, name=None)
587 Search object.__doc__ for examples to run; use name (or
588 object.__name__) for logging. Return (#failures, #tries).
590 rundict(d, name, module=None)
591 Search for examples in docstrings in all of d.values(); use name
592 for logging. Exclude functions and classes not defined in module
593 if specified. Return (#failures, #tries).
596 Treat dict d like module.__test__. Return (#failures, #tries).
598 summarize(verbose=None)
599 Display summary of testing results, to stdout. Return
603 Merge in the test results from Tester instance "other".
605 >>> from doctest import Tester
606 >>> t = Tester(globs={'x': 42}, verbose=0)
612 *****************************************************************
613 Failure in example: print x
618 >>> t.runstring(">>> x = x * 2\\n>>> print x\\n84\\n", 'example2')
621 *****************************************************************
622 1 items had failures:
624 ***Test Failed*** 1 failures.
626 >>> t.summarize(verbose=1)
627 1 items passed all tests:
629 *****************************************************************
630 1 items had failures:
633 3 passed and 1 failed.
634 ***Test Failed*** 1 failures.
639 def __init__(self
, mod
=None, globs
=None, verbose
=None,
641 """mod=None, globs=None, verbose=None, isprivate=None
643 See doctest.__doc__ for an overview.
645 Optional keyword arg "mod" is a module, whose globals are used for
646 executing examples. If not specified, globs must be specified.
648 Optional keyword arg "globs" gives a dict to be used as the globals
649 when executing examples; if not specified, use the globals from
652 In either case, a copy of the dict is used for each docstring
655 Optional keyword arg "verbose" prints lots of stuff if true, only
656 failures if false; by default, it's true iff "-v" is in sys.argv.
658 Optional keyword arg "isprivate" specifies a function used to determine
659 whether a name is private. The default function is doctest.is_private;
660 see its docs for details.
663 if mod
is None and globs
is None:
664 raise TypeError("Tester.__init__: must specify mod or globs")
665 if mod
is not None and not _ismodule(mod
):
666 raise TypeError("Tester.__init__: mod must be a module; " +
674 verbose
= "-v" in sys
.argv
675 self
.verbose
= verbose
677 if isprivate
is None:
678 isprivate
= is_private
679 self
.isprivate
= isprivate
681 self
.name2ft
= {} # map name to (#failures, #trials) pair
683 self
.compileflags
= _extract_future_flags(globs
)
685 def runstring(self
, s
, name
):
687 s, name -> search string s for examples to run, logging as name.
689 Use string name as the key for logging the outcome.
690 Return (#failures, #examples).
692 >>> t = Tester(globs={}, verbose=1)
694 ... # just an example
699 >>> t.runstring(test, "Example")
700 Running string Example
707 0 of 2 examples failed in string Example
712 print "Running string", name
714 e
= _extract_examples(s
)
716 f
, t
= _run_examples(e
, self
.globs
, self
.verbose
, name
,
719 print f
, "of", t
, "examples failed in string", name
720 self
.__record
_outcome
(name
, f
, t
)
723 def rundoc(self
, object, name
=None):
725 object, name=None -> search object.__doc__ for examples to run.
727 Use optional string name as the key for logging the outcome;
728 by default use object.__name__.
729 Return (#failures, #examples).
730 If object is a class object, search recursively for method
732 object.__doc__ is examined regardless of name, but if object is
733 a class, whether private names reached from object are searched
734 depends on the constructor's "isprivate" argument.
736 >>> t = Tester(globs={}, verbose=0)
738 ... '''Trivial docstring example.
739 ... >>> assert 2 == 2
743 >>> t.rundoc(_f) # expect 0 failures in 1 example
749 name
= object.__name
__
750 except AttributeError:
751 raise ValueError("Tester.rundoc: name must be given "
752 "when object.__name__ doesn't exist; " + `
object`
)
754 print "Running", name
+ ".__doc__"
755 f
, t
= run_docstring_examples(object, self
.globs
, self
.verbose
, name
,
758 print f
, "of", t
, "examples failed in", name
+ ".__doc__"
759 self
.__record
_outcome
(name
, f
, t
)
761 # In 2.2, class and static methods complicate life. Build
762 # a dict "that works", by hook or by crook.
764 for tag
, kind
, homecls
, value
in _classify_class_attrs(object):
766 if homecls
is not object:
767 # Only look at names defined immediately by the class.
770 elif self
.isprivate(name
, tag
):
773 elif kind
== "method":
774 # value is already a function
777 elif kind
== "static method":
778 # value isn't a function, but getattr reveals one
779 d
[tag
] = getattr(object, tag
)
781 elif kind
== "class method":
782 # Hmm. A classmethod object doesn't seem to reveal
783 # enough. But getattr turns it into a bound method,
784 # and from there .im_func retrieves the underlying
786 d
[tag
] = getattr(object, tag
).im_func
788 elif kind
== "property":
789 # The methods implementing the property have their
790 # own docstrings -- but the property may have one too.
791 if value
.__doc
__ is not None:
792 d
[tag
] = str(value
.__doc
__)
795 # Grab nested classes.
800 raise ValueError("teach doctest about %r" % kind
)
802 f2
, t2
= self
.run__test__(d
, name
)
808 def rundict(self
, d
, name
, module
=None):
810 d, name, module=None -> search for docstring examples in d.values().
812 For k, v in d.items() such that v is a function or class,
813 do self.rundoc(v, name + "." + k). Whether this includes
814 objects with private names depends on the constructor's
815 "isprivate" argument. If module is specified, functions and
816 classes that are not defined in module are excluded.
817 Return aggregate (#failures, #examples).
819 Build and populate two modules with sample functions to test that
820 exclusion of external functions and classes works.
823 >>> m1 = new.module('_m1')
824 >>> m2 = new.module('_m2')
827 ... '''>>> assert 1 == 1
830 ... '''>>> assert 2 != 1
833 ... '''>>> assert 2 > 1
836 ... '''>>> assert 1 < 2
839 >>> exec test_data in m1.__dict__
840 >>> exec test_data in m2.__dict__
841 >>> m1.__dict__.update({"f2": m2._f, "g2": m2.g, "h2": m2.H})
843 Tests that objects outside m1 are excluded:
845 >>> t = Tester(globs={}, verbose=0)
846 >>> t.rundict(m1.__dict__, "rundict_test", m1) # _f, f2 and g2 and h2 skipped
849 Again, but with a custom isprivate function allowing _f:
851 >>> t = Tester(globs={}, verbose=0, isprivate=lambda x,y: 0)
852 >>> t.rundict(m1.__dict__, "rundict_test_pvt", m1) # Only f2, g2 and h2 skipped
855 And once more, not excluding stuff outside m1:
857 >>> t = Tester(globs={}, verbose=0, isprivate=lambda x,y: 0)
858 >>> t.rundict(m1.__dict__, "rundict_test_pvt") # None are skipped.
861 The exclusion of objects from outside the designated module is
862 meant to be invoked automagically by testmod.
869 if not hasattr(d
, "items"):
870 raise TypeError("Tester.rundict: d must support .items(); " +
873 # Run the tests by alpha order of names, for consistency in
874 # verbose-mode output.
877 for thisname
in names
:
879 if _isfunction(value
) or _isclass(value
):
880 if module
and not _from_module(module
, value
):
882 f2
, t2
= self
.__runone
(value
, name
+ "." + thisname
)
887 def run__test__(self
, d
, name
):
888 """d, name -> Treat dict d like module.__test__.
890 Return (#failures, #tries).
891 See testmod.__doc__ for details.
896 savepvt
= self
.isprivate
898 self
.isprivate
= lambda *args
: 0
899 # Run the tests by alpha order of names, for consistency in
900 # verbose-mode output.
905 thisname
= prefix
+ k
906 if type(v
) in _StringTypes
:
907 f
, t
= self
.runstring(v
, thisname
)
908 elif _isfunction(v
) or _isclass(v
):
909 f
, t
= self
.rundoc(v
, thisname
)
911 raise TypeError("Tester.run__test__: values in "
912 "dict must be strings, functions "
913 "or classes; " + `v`
)
914 failures
= failures
+ f
917 self
.isprivate
= savepvt
918 return failures
, tries
920 def summarize(self
, verbose
=None):
922 verbose=None -> summarize results, return (#failures, #tests).
924 Print summary of test results to stdout.
925 Optional arg 'verbose' controls how wordy this is. By
926 default, use the verbose setting established by the
931 verbose
= self
.verbose
936 for x
in self
.name2ft
.items():
944 passed
.append( (name
, t
) )
949 print len(notests
), "items had no tests:"
951 for thing
in notests
:
954 print len(passed
), "items passed all tests:"
956 for thing
, count
in passed
:
957 print " %3d tests in %s" % (count
, thing
)
960 print len(failed
), "items had failures:"
962 for thing
, (f
, t
) in failed
:
963 print " %3d of %3d in %s" % (f
, t
, thing
)
965 print totalt
, "tests in", len(self
.name2ft
), "items."
966 print totalt
- totalf
, "passed and", totalf
, "failed."
968 print "***Test Failed***", totalf
, "failures."
971 return totalf
, totalt
973 def merge(self
, other
):
975 other -> merge in test results from the other Tester instance.
977 If self and other both have a test result for something
978 with the same name, the (#failures, #tests) results are
979 summed, and a warning is printed to stdout.
981 >>> from doctest import Tester
982 >>> t1 = Tester(globs={}, verbose=0)
987 ... ''', "t1example")
990 >>> t2 = Tester(globs={}, verbose=0)
995 ... ''', "t2example")
997 >>> common = ">>> assert 1 + 2 == 3\\n"
998 >>> t1.runstring(common, "common")
1000 >>> t2.runstring(common, "common")
1003 *** Tester.merge: 'common' in both testers; summing outcomes.
1005 3 items passed all tests:
1007 2 tests in t1example
1008 2 tests in t2example
1010 6 passed and 0 failed.
1017 for name
, (f
, t
) in other
.name2ft
.items():
1019 print "*** Tester.merge: '" + name
+ "' in both" \
1020 " testers; summing outcomes."
1026 def __record_outcome(self
, name
, f
, t
):
1027 if name
in self
.name2ft
:
1028 print "*** Warning: '" + name
+ "' was tested before;", \
1030 f2
, t2
= self
.name2ft
[name
]
1033 self
.name2ft
[name
] = f
, t
1035 def __runone(self
, target
, name
):
1037 i
= name
.rindex(".")
1038 prefix
, base
= name
[:i
], name
[i
+1:]
1040 prefix
, base
= "", base
1041 if self
.isprivate(prefix
, base
):
1043 return self
.rundoc(target
, name
)
1047 def testmod(m
=None, name
=None, globs
=None, verbose
=None, isprivate
=None,
1049 """m=None, name=None, globs=None, verbose=None, isprivate=None, report=1
1051 Test examples in docstrings in functions and classes reachable
1052 from module m (or the current module if m is not supplied), starting
1053 with m.__doc__. Private names are skipped.
1055 Also test examples reachable from dict m.__test__ if it exists and is
1056 not None. m.__dict__ maps names to functions, classes and strings;
1057 function and class docstrings are tested even if the name is private;
1058 strings are tested directly, as if they were docstrings.
1060 Return (#failures, #tests).
1062 See doctest.__doc__ for an overview.
1064 Optional keyword arg "name" gives the name of the module; by default
1067 Optional keyword arg "globs" gives a dict to be used as the globals
1068 when executing examples; by default, use m.__dict__. A copy of this
1069 dict is actually used for each docstring, so that each docstring's
1070 examples start with a clean slate.
1072 Optional keyword arg "verbose" prints lots of stuff if true, prints
1073 only failures if false; by default, it's true iff "-v" is in sys.argv.
1075 Optional keyword arg "isprivate" specifies a function used to
1076 determine whether a name is private. The default function is
1077 doctest.is_private; see its docs for details.
1079 Optional keyword arg "report" prints a summary at the end when true,
1080 else prints nothing at the end. In verbose mode, the summary is
1081 detailed, else very brief (in fact, empty if all tests passed).
1083 Advanced tomfoolery: testmod runs methods of a local instance of
1084 class doctest.Tester, then merges the results into (or creates)
1085 global Tester instance doctest.master. Methods of doctest.master
1086 can be called directly too, if you want to do something unusual.
1087 Passing report=0 to testmod is especially useful then, to delay
1088 displaying a summary. Invoke doctest.master.summarize(verbose)
1089 when you're done fiddling.
1096 # DWA - m will still be None if this wasn't invoked from the command
1097 # line, in which case the following TypeError is about as good an error
1098 # as we should expect
1099 m
= sys
.modules
.get('__main__')
1101 if not _ismodule(m
):
1102 raise TypeError("testmod: module required; " + `m`
)
1105 tester
= Tester(m
, globs
=globs
, verbose
=verbose
, isprivate
=isprivate
)
1106 failures
, tries
= tester
.rundoc(m
, name
)
1107 f
, t
= tester
.rundict(m
.__dict
__, name
, m
)
1108 failures
= failures
+ f
1110 if hasattr(m
, "__test__"):
1111 testdict
= m
.__test
__
1113 if not hasattr(testdict
, "items"):
1114 raise TypeError("testmod: module.__test__ must support "
1115 ".items(); " + `testdict`
)
1116 f
, t
= tester
.run__test__(testdict
, name
+ ".__test__")
1117 failures
= failures
+ f
1124 master
.merge(tester
)
1125 return failures
, tries
1129 A pointless class, for sanity-checking of docstring testing.
1135 >>> _TestClass(13).get() + _TestClass(-12).get()
1137 >>> hex(_TestClass(13).square().get())
1141 def __init__(self
, val
):
1142 """val -> _TestClass object with associated value val.
1144 >>> t = _TestClass(123)
1152 """square() -> square TestClass's associated value
1154 >>> _TestClass(13).square().get()
1158 self
.val
= self
.val
** 2
1162 """get() -> return TestClass's associated value.
1164 >>> x = _TestClass(-42)
1171 __test__
= {"_TestClass": _TestClass
,
1173 Example of a string object, searched as-is.
1182 return doctest
.testmod(doctest
)
1184 if __name__
== "__main__":