Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
doctest.py
Go to the documentation of this file.
1 # Module doctest.
2 # Released to the public domain 16-Jan-2001,
3 # by Tim Peters (tim.one@home.com).
4 
5 # Provided as-is; use at your own risk; no warranty; no promises; enjoy!
6 
7 """Module doctest -- a framework for running examples in docstrings.
8 
9 NORMAL USAGE
10 
11 In normal use, end each module M with:
12 
13 def _test():
14  import doctest, M # replace M with your module's name
15  return doctest.testmod(M) # ditto
16 
17 if __name__ == "__main__":
18  _test()
19 
20 Then running the module as a script will cause the examples in the
21 docstrings to get executed and verified:
22 
23 python M.py
24 
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.".
29 
30 Run it with the -v switch instead:
31 
32 python M.py -v
33 
34 and a detailed report of all examples tried is printed to stdout, along
35 with assorted summaries at the end.
36 
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
39 examined by testmod.
40 
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.
44 
45 
46 WHICH DOCSTRINGS ARE EXAMINED?
47 
48 + M.__doc__.
49 
50 + f.__doc__ for all functions f in M.__dict__.values(), except those
51  with private names and those defined in other modules.
52 
53 + C.__doc__ for all classes C in M.__dict__.values(), except those with
54  private names and those defined in other modules.
55 
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__
61  appears with name
62  <name of M>.__test__.K
63 
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.
67 
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.
72 
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).
77 
78 WHAT'S THE EXECUTION CONTEXT?
79 
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.
87 
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.
91 
92 
93 WHAT IF I WANT TO TEST A WHOLE PACKAGE?
94 
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):
98 
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
105 
106 modules = (Cvt,
107  Format,
108  machprec,
109  Rat,
110  Round,
111  utils)
112 
113 def _test():
114  import doctest
115  import sys
116  verbose = "-v" in sys.argv
117  for mod in modules:
118  doctest.testmod(mod, verbose=verbose, report=0)
119  doctest.master.summarize()
120 
121 if __name__ == "__main__":
122  _test()
123 
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.
129 
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.
133 
134 
135 WHAT ABOUT EXCEPTIONS?
136 
137 No problem, as long as the only output generated by the example is the
138 traceback itself. For example:
139 
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
144  >>>
145 
146 Note that only the exception type and value are compared (specifically,
147 only the last line in the traceback).
148 
149 
150 ADVANCED USAGE
151 
152 doctest.testmod() captures the testing policy I find most useful most
153 often. You may want other policies.
154 
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.
158 
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.
162 
163 
164 SO WHAT DOES A DOCSTRING EXAMPLE LOOK LIKE ALREADY!?
165 
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
170 means).
171 
172  >>> # comments are ignored
173  >>> x = 12
174  >>> x
175  12
176  >>> if x == 13:
177  ... print "yes"
178  ... else:
179  ... print "no"
180  ... print "NO"
181  ... print "NO!!!"
182  ...
183  no
184  NO
185  NO!!!
186  >>>
187 
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.
191 
192 Bummers:
193 
194 + Expected output cannot contain an all-whitespace line, since such a line
195  is taken to signal the end of expected output.
196 
197 + Output to stdout is captured, but not output to stderr (exception
198  tracebacks are captured via a different means).
199 
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:
204 
205 >>> if "yes" == \\
206 ... "y" + \\
207 ... "es": # in the source code you'll see the doubled backslashes
208 ... print 'yes'
209 yes
210 
211 The starting column doesn't matter:
212 
213 >>> assert "Easy!"
214  >>> import math
215  >>> math.floor(1.9)
216  1.0
217 
218 and as many leading whitespace characters are stripped from the expected
219 output as appeared in the initial ">>>" line that triggered it.
220 
221 If you execute this very file, the examples above will be found and
222 executed, leading to this output in verbose mode:
223 
224 Running doctest.__doc__
225 Trying: [1, 2, 3].remove(42)
226 Expecting:
227 Traceback (most recent call last):
228  File "<stdin>", line 1, in ?
229 ValueError: list.remove(x): x not in list
230 ok
231 Trying: x = 12
232 Expecting: nothing
233 ok
234 Trying: x
235 Expecting: 12
236 ok
237 Trying:
238 if x == 13:
239  print "yes"
240 else:
241  print "no"
242  print "NO"
243  print "NO!!!"
244 Expecting:
245 no
246 NO
247 NO!!!
248 ok
249 ... and a bunch more like that, with this summary at the end:
250 
251 5 items had no tests:
252  doctest.Tester.__init__
253  doctest.Tester.run__test__
254  doctest.Tester.summarize
255  doctest.run_docstring_examples
256  doctest.testmod
257 12 items passed all tests:
258  8 tests in doctest
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.
272 Test passed.
273 """
274 
275 __all__ = [
276  'testmod',
277  'run_docstring_examples',
278  'is_private',
279  'Tester',
280 ]
281 
282 import __future__
283 
284 import re
285 PS1 = ">>>"
286 PS2 = "..."
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
291 del re
292 
293 from types import StringTypes as _StringTypes
294 
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
299 
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.
306 
307 def _extract_examples(s):
308  isPS1, isPS2 = _isPS1, _isPS2
309  isEmpty, isComment = _isEmpty, _isComment
310  examples = []
311  lines = s.split("\n")
312  i, n = 0, len(lines)
313  while i < n:
314  line = lines[i]
315  i = i + 1
316  m = isPS1(line)
317  if m is None:
318  continue
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
322  continue
323  lineno = i - 1
324  if line[j] != " ":
325  raise ValueError("line " + `lineno` + " of docstring lacks "
326  "blank after " + PS1 + ": " + line)
327  j = j + 1
328  blanks = m.group(1)
329  nblanks = len(blanks)
330  # suck up this and following PS2 lines
331  source = []
332  while 1:
333  source.append(line[j:])
334  line = lines[i]
335  m = isPS2(line)
336  if m:
337  if m.group(1) != blanks:
338  raise ValueError("inconsistent leading whitespace "
339  "in line " + `i` + " of docstring: " + line)
340  i = i + 1
341  else:
342  break
343  if len(source) == 1:
344  source = source[0]
345  else:
346  # get rid of useless null line from trailing empty "..."
347  if source[-1] == "":
348  del source[-1]
349  source = "\n".join(source) + "\n"
350  # suck up response
351  if isPS1(line) or isEmpty(line):
352  expect = ""
353  else:
354  expect = []
355  while 1:
356  if line[:nblanks] != blanks:
357  raise ValueError("inconsistent leading whitespace "
358  "in line " + `i` + " of docstring: " + line)
359  expect.append(line[nblanks:])
360  i = i + 1
361  line = lines[i]
362  if isPS1(line) or isEmpty(line):
363  break
364  expect = "\n".join(expect) + "\n"
365  examples.append( (source, expect, lineno) )
366  return examples
367 
368 # Capture stdout when running examples.
369 
370 class _SpoofOut:
371  def __init__(self):
372  self.clear()
373  def write(self, s):
374  self.buf.append(s)
375  def get(self):
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"):
381  guts = guts + "\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"):
385  del self.softspace
386  return guts
387  def clear(self):
388  self.buf = []
389  if hasattr(self, "softspace"):
390  del self.softspace
391  def flush(self):
392  # JPython calls flush
393  pass
394 
395 # Display some tag-and-msg pairs nicely, keeping the tag and its msg
396 # on the same line when that makes sense.
397 
398 def _tag_out(printer, *tag_msg_pairs):
399  for tag, msg in tag_msg_pairs:
400  printer(tag + ":")
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:
405  printer(" ")
406  else:
407  printer("\n")
408  printer(msg)
409  if not msg_has_nl:
410  printer("\n")
411 
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).
415 
416 def _run_examples_inner(out, fakeout, examples, globs, verbose, name,
417  compileflags):
418  import sys, traceback
419  OK, BOOM, FAIL = range(3)
420  NADA = "nothing"
421  stderr = _SpoofOut()
422  failures = 0
423  for source, want, lineno in examples:
424  if verbose:
425  _tag_out(out, ("Trying", source),
426  ("Expecting", want or NADA))
427  fakeout.clear()
428  try:
429  exec compile(source, "<string>", "single",
430  compileflags, 1) in globs
431  got = fakeout.get()
432  state = OK
433  except:
434  # See whether the exception was expected.
435  if want.find("Traceback (innermost last):\n") == 0 or \
436  want.find("Traceback (most recent call last):\n") == 0:
437  # Only compare exception type and value - the rest of
438  # the traceback isn't necessary.
439  want = want.split('\n')[-2] + '\n'
440  exc_type, exc_val = sys.exc_info()[:2]
441  got = traceback.format_exception_only(exc_type, exc_val)[-1]
442  state = OK
443  else:
444  # unexpected exception
445  stderr.clear()
446  traceback.print_exc(file=stderr)
447  state = BOOM
448 
449  if state == OK:
450  if got == want:
451  if verbose:
452  out("ok\n")
453  continue
454  state = FAIL
455 
456  assert state in (FAIL, BOOM)
457  failures = failures + 1
458  out("*" * 65 + "\n")
459  _tag_out(out, ("Failure in example", source))
460  out("from line #" + `lineno` + " of " + name + "\n")
461  if state == FAIL:
462  _tag_out(out, ("Expected", want or NADA), ("Got", got))
463  else:
464  assert state == BOOM
465  _tag_out(out, ("Exception raised", stderr.get()))
466 
467  return failures, len(examples)
468 
469 # Get the future-flags associated with the future features that have been
470 # imported into globs.
471 
472 def _extract_future_flags(globs):
473  flags = 0
474  for fname in __future__.all_feature_names:
475  feature = globs.get(fname, None)
476  if feature is getattr(__future__, fname):
477  flags |= feature.compiler_flag
478  return flags
479 
480 # Run list of examples, in a shallow copy of context (dict) globs.
481 # Return (#failures, #tries).
482 
483 def _run_examples(examples, globs, verbose, name, compileflags):
484  import sys
485  saveout = sys.stdout
486  globs = globs.copy()
487  try:
488  sys.stdout = fakeout = _SpoofOut()
489  x = _run_examples_inner(saveout.write, fakeout, examples,
490  globs, verbose, name, compileflags)
491  finally:
492  sys.stdout = saveout
493  # While Python gc can clean up most cycles on its own, it doesn't
494  # chase frame objects. This is especially irksome when running
495  # generator tests that raise exceptions, because a named generator-
496  # iterator gets an entry in globs, and the generator-iterator
497  # object's frame's traceback info points back to globs. This is
498  # easy to break just by clearing the namespace. This can also
499  # help to break other kinds of cycles, and even for cycles that
500  # gc can break itself it's better to break them ASAP.
501  globs.clear()
502  return x
503 
504 def run_docstring_examples(f, globs, verbose=0, name="NoName",
505  compileflags=None):
506  """f, globs, verbose=0, name="NoName" -> run examples from f.__doc__.
507 
508  Use (a shallow copy of) dict globs as the globals for execution.
509  Return (#failures, #tries).
510 
511  If optional arg verbose is true, print stuff even if there are no
512  failures.
513  Use string name in failure msgs.
514  """
515 
516  try:
517  doc = f.__doc__
518  if not doc:
519  # docstring empty or None
520  return 0, 0
521  # just in case CT invents a doc object that has to be forced
522  # to look like a string <0.9 wink>
523  doc = str(doc)
524  except:
525  return 0, 0
526 
527  e = _extract_examples(doc)
528  if not e:
529  return 0, 0
530  if compileflags is None:
531  compileflags = _extract_future_flags(globs)
532  return _run_examples(e, globs, verbose, name, compileflags)
533 
534 def is_private(prefix, base):
535  """prefix, base -> true iff name prefix + "." + base is "private".
536 
537  Prefix may be an empty string, and base does not contain a period.
538  Prefix is ignored (although functions you write conforming to this
539  protocol may make use of it).
540  Return true iff base begins with an (at least one) underscore, but
541  does not both begin and end with (at least) two underscores.
542 
543  >>> is_private("a.b", "my_func")
544  0
545  >>> is_private("____", "_my_func")
546  1
547  >>> is_private("someclass", "__init__")
548  0
549  >>> is_private("sometypo", "__init_")
550  1
551  >>> is_private("x.y.z", "_")
552  1
553  >>> is_private("_x.y.z", "__")
554  0
555  >>> is_private("", "") # senseless but consistent
556  0
557  """
558 
559  return base[:1] == "_" and not base[:2] == "__" == base[-2:]
560 
561 # Determine if a class of function was defined in the given module.
562 
563 def _from_module(module, object):
564  if _isfunction(object):
565  return module.__dict__ is object.func_globals
566  if _isclass(object):
567  return module.__name__ == object.__module__
568  raise ValueError("object must be a class or function")
569 
570 class Tester:
571  """Class Tester -- runs docstring examples and accumulates stats.
572 
573 In normal use, function doctest.testmod() hides all this from you,
574 so use that if you can. Create your own instances of Tester to do
575 fancier things.
576 
577 Methods:
578  runstring(s, name)
579  Search string s for examples to run; use name for logging.
580  Return (#failures, #tries).
581 
582  rundoc(object, name=None)
583  Search object.__doc__ for examples to run; use name (or
584  object.__name__) for logging. Return (#failures, #tries).
585 
586  rundict(d, name, module=None)
587  Search for examples in docstrings in all of d.values(); use name
588  for logging. Exclude functions and classes not defined in module
589  if specified. Return (#failures, #tries).
590 
591  run__test__(d, name)
592  Treat dict d like module.__test__. Return (#failures, #tries).
593 
594  summarize(verbose=None)
595  Display summary of testing results, to stdout. Return
596  (#failures, #tries).
597 
598  merge(other)
599  Merge in the test results from Tester instance "other".
600 
601 >>> from doctest import Tester
602 >>> t = Tester(globs={'x': 42}, verbose=0)
603 >>> t.runstring(r'''
604 ... >>> x = x * 2
605 ... >>> print x
606 ... 42
607 ... ''', 'XYZ')
608 *****************************************************************
609 Failure in example: print x
610 from line #2 of XYZ
611 Expected: 42
612 Got: 84
613 (1, 2)
614 >>> t.runstring(">>> x = x * 2\\n>>> print x\\n84\\n", 'example2')
615 (0, 2)
616 >>> t.summarize()
617 *****************************************************************
618 1 items had failures:
619  1 of 2 in XYZ
620 ***Test Failed*** 1 failures.
621 (1, 4)
622 >>> t.summarize(verbose=1)
623 1 items passed all tests:
624  2 tests in example2
625 *****************************************************************
626 1 items had failures:
627  1 of 2 in XYZ
628 4 tests in 2 items.
629 3 passed and 1 failed.
630 ***Test Failed*** 1 failures.
631 (1, 4)
632 >>>
633 """
634 
635  def __init__(self, mod=None, globs=None, verbose=None,
636  isprivate=None):
637  """mod=None, globs=None, verbose=None, isprivate=None
638 
639 See doctest.__doc__ for an overview.
640 
641 Optional keyword arg "mod" is a module, whose globals are used for
642 executing examples. If not specified, globs must be specified.
643 
644 Optional keyword arg "globs" gives a dict to be used as the globals
645 when executing examples; if not specified, use the globals from
646 module mod.
647 
648 In either case, a copy of the dict is used for each docstring
649 examined.
650 
651 Optional keyword arg "verbose" prints lots of stuff if true, only
652 failures if false; by default, it's true iff "-v" is in sys.argv.
653 
654 Optional keyword arg "isprivate" specifies a function used to determine
655 whether a name is private. The default function is doctest.is_private;
656 see its docs for details.
657 """
658 
659  if mod is None and globs is None:
660  raise TypeError("Tester.__init__: must specify mod or globs")
661  if mod is not None and not _ismodule(mod):
662  raise TypeError("Tester.__init__: mod must be a module; " +
663  `mod`)
664  if globs is None:
665  globs = mod.__dict__
666  self.globs = globs
667 
668  if verbose is None:
669  import sys
670  verbose = "-v" in sys.argv
671  self.verbose = verbose
672 
673  if isprivate is None:
674  isprivate = is_private
675  self.isprivate = isprivate
676 
677  self.name2ft = {} # map name to (#failures, #trials) pair
678 
679  self.compileflags = _extract_future_flags(globs)
680 
681  def runstring(self, s, name):
682  """
683  s, name -> search string s for examples to run, logging as name.
684 
685  Use string name as the key for logging the outcome.
686  Return (#failures, #examples).
687 
688  >>> t = Tester(globs={}, verbose=1)
689  >>> test = r'''
690  ... # just an example
691  ... >>> x = 1 + 2
692  ... >>> x
693  ... 3
694  ... '''
695  >>> t.runstring(test, "Example")
696  Running string Example
697  Trying: x = 1 + 2
698  Expecting: nothing
699  ok
700  Trying: x
701  Expecting: 3
702  ok
703  0 of 2 examples failed in string Example
704  (0, 2)
705  """
706 
707  if self.verbose:
708  print "Running string", name
709  f = t = 0
710  e = _extract_examples(s)
711  if e:
712  f, t = _run_examples(e, self.globs, self.verbose, name,
713  self.compileflags)
714  if self.verbose:
715  print f, "of", t, "examples failed in string", name
716  self.__record_outcome(name, f, t)
717  return f, t
718 
719  def rundoc(self, object, name=None):
720  """
721  object, name=None -> search object.__doc__ for examples to run.
722 
723  Use optional string name as the key for logging the outcome;
724  by default use object.__name__.
725  Return (#failures, #examples).
726  If object is a class object, search recursively for method
727  docstrings too.
728  object.__doc__ is examined regardless of name, but if object is
729  a class, whether private names reached from object are searched
730  depends on the constructor's "isprivate" argument.
731 
732  >>> t = Tester(globs={}, verbose=0)
733  >>> def _f():
734  ... '''Trivial docstring example.
735  ... >>> assert 2 == 2
736  ... '''
737  ... return 32
738  ...
739  >>> t.rundoc(_f) # expect 0 failures in 1 example
740  (0, 1)
741  """
742 
743  if name is None:
744  try:
745  name = object.__name__
746  except AttributeError:
747  raise ValueError("Tester.rundoc: name must be given "
748  "when object.__name__ doesn't exist; " + `object`)
749  if self.verbose:
750  print "Running", name + ".__doc__"
751  f, t = run_docstring_examples(object, self.globs, self.verbose, name,
752  self.compileflags)
753  if self.verbose:
754  print f, "of", t, "examples failed in", name + ".__doc__"
755  self.__record_outcome(name, f, t)
756  if _isclass(object):
757  # In 2.2, class and static methods complicate life. Build
758  # a dict "that works", by hook or by crook.
759  d = {}
760  for tag, kind, homecls, value in _classify_class_attrs(object):
761 
762  if homecls is not object:
763  # Only look at names defined immediately by the class.
764  continue
765 
766  elif self.isprivate(name, tag):
767  continue
768 
769  elif kind == "method":
770  # value is already a function
771  d[tag] = value
772 
773  elif kind == "static method":
774  # value isn't a function, but getattr reveals one
775  d[tag] = getattr(object, tag)
776 
777  elif kind == "class method":
778  # Hmm. A classmethod object doesn't seem to reveal
779  # enough. But getattr turns it into a bound method,
780  # and from there .im_func retrieves the underlying
781  # function.
782  d[tag] = getattr(object, tag).im_func
783 
784  elif kind == "property":
785  # The methods implementing the property have their
786  # own docstrings -- but the property may have one too.
787  if value.__doc__ is not None:
788  d[tag] = str(value.__doc__)
789 
790  elif kind == "data":
791  # Grab nested classes.
792  if _isclass(value):
793  d[tag] = value
794 
795  else:
796  raise ValueError("teach doctest about %r" % kind)
797 
798  f2, t2 = self.run__test__(d, name)
799  f += f2
800  t += t2
801 
802  return f, t
803 
804  def rundict(self, d, name, module=None):
805  """
806  d, name, module=None -> search for docstring examples in d.values().
807 
808  For k, v in d.items() such that v is a function or class,
809  do self.rundoc(v, name + "." + k). Whether this includes
810  objects with private names depends on the constructor's
811  "isprivate" argument. If module is specified, functions and
812  classes that are not defined in module are excluded.
813  Return aggregate (#failures, #examples).
814 
815  Build and populate two modules with sample functions to test that
816  exclusion of external functions and classes works.
817 
818  >>> import new
819  >>> m1 = new.module('_m1')
820  >>> m2 = new.module('_m2')
821  >>> test_data = \"""
822  ... def _f():
823  ... '''>>> assert 1 == 1
824  ... '''
825  ... def g():
826  ... '''>>> assert 2 != 1
827  ... '''
828  ... class H:
829  ... '''>>> assert 2 > 1
830  ... '''
831  ... def bar(self):
832  ... '''>>> assert 1 < 2
833  ... '''
834  ... \"""
835  >>> exec test_data in m1.__dict__
836  >>> exec test_data in m2.__dict__
837  >>> m1.__dict__.update({"f2": m2._f, "g2": m2.g, "h2": m2.H})
838 
839  Tests that objects outside m1 are excluded:
840 
841  >>> t = Tester(globs={}, verbose=0)
842  >>> t.rundict(m1.__dict__, "rundict_test", m1) # _f, f2 and g2 and h2 skipped
843  (0, 3)
844 
845  Again, but with a custom isprivate function allowing _f:
846 
847  >>> t = Tester(globs={}, verbose=0, isprivate=lambda x,y: 0)
848  >>> t.rundict(m1.__dict__, "rundict_test_pvt", m1) # Only f2, g2 and h2 skipped
849  (0, 4)
850 
851  And once more, not excluding stuff outside m1:
852 
853  >>> t = Tester(globs={}, verbose=0, isprivate=lambda x,y: 0)
854  >>> t.rundict(m1.__dict__, "rundict_test_pvt") # None are skipped.
855  (0, 8)
856 
857  The exclusion of objects from outside the designated module is
858  meant to be invoked automagically by testmod.
859 
860  >>> testmod(m1)
861  (0, 3)
862 
863  """
864 
865  if not hasattr(d, "items"):
866  raise TypeError("Tester.rundict: d must support .items(); " +
867  `d`)
868  f = t = 0
869  # Run the tests by alpha order of names, for consistency in
870  # verbose-mode output.
871  names = d.keys()
872  names.sort()
873  for thisname in names:
874  value = d[thisname]
875  if _isfunction(value) or _isclass(value):
876  if module and not _from_module(module, value):
877  continue
878  f2, t2 = self.__runone(value, name + "." + thisname)
879  f = f + f2
880  t = t + t2
881  return f, t
882 
883  def run__test__(self, d, name):
884  """d, name -> Treat dict d like module.__test__.
885 
886  Return (#failures, #tries).
887  See testmod.__doc__ for details.
888  """
889 
890  failures = tries = 0
891  prefix = name + "."
892  savepvt = self.isprivate
893  try:
894  self.isprivate = lambda *args: 0
895  # Run the tests by alpha order of names, for consistency in
896  # verbose-mode output.
897  keys = d.keys()
898  keys.sort()
899  for k in keys:
900  v = d[k]
901  thisname = prefix + k
902  if type(v) in _StringTypes:
903  f, t = self.runstring(v, thisname)
904  elif _isfunction(v) or _isclass(v):
905  f, t = self.rundoc(v, thisname)
906  else:
907  raise TypeError("Tester.run__test__: values in "
908  "dict must be strings, functions "
909  "or classes; " + `v`)
910  failures = failures + f
911  tries = tries + t
912  finally:
913  self.isprivate = savepvt
914  return failures, tries
915 
916  def summarize(self, verbose=None):
917  """
918  verbose=None -> summarize results, return (#failures, #tests).
919 
920  Print summary of test results to stdout.
921  Optional arg 'verbose' controls how wordy this is. By
922  default, use the verbose setting established by the
923  constructor.
924  """
925 
926  if verbose is None:
927  verbose = self.verbose
928  notests = []
929  passed = []
930  failed = []
931  totalt = totalf = 0
932  for x in self.name2ft.items():
933  name, (f, t) = x
934  assert f <= t
935  totalt = totalt + t
936  totalf = totalf + f
937  if t == 0:
938  notests.append(name)
939  elif f == 0:
940  passed.append( (name, t) )
941  else:
942  failed.append(x)
943  if verbose:
944  if notests:
945  print len(notests), "items had no tests:"
946  notests.sort()
947  for thing in notests:
948  print " ", thing
949  if passed:
950  print len(passed), "items passed all tests:"
951  passed.sort()
952  for thing, count in passed:
953  print " %3d tests in %s" % (count, thing)
954  if failed:
955  print "*" * 65
956  print len(failed), "items had failures:"
957  failed.sort()
958  for thing, (f, t) in failed:
959  print " %3d of %3d in %s" % (f, t, thing)
960  if verbose:
961  print totalt, "tests in", len(self.name2ft), "items."
962  print totalt - totalf, "passed and", totalf, "failed."
963  if totalf:
964  print "***Test Failed***", totalf, "failures."
965  elif verbose:
966  print "Test passed."
967  return totalf, totalt
968 
969  def merge(self, other):
970  """
971  other -> merge in test results from the other Tester instance.
972 
973  If self and other both have a test result for something
974  with the same name, the (#failures, #tests) results are
975  summed, and a warning is printed to stdout.
976 
977  >>> from doctest import Tester
978  >>> t1 = Tester(globs={}, verbose=0)
979  >>> t1.runstring('''
980  ... >>> x = 12
981  ... >>> print x
982  ... 12
983  ... ''', "t1example")
984  (0, 2)
985  >>>
986  >>> t2 = Tester(globs={}, verbose=0)
987  >>> t2.runstring('''
988  ... >>> x = 13
989  ... >>> print x
990  ... 13
991  ... ''', "t2example")
992  (0, 2)
993  >>> common = ">>> assert 1 + 2 == 3\\n"
994  >>> t1.runstring(common, "common")
995  (0, 1)
996  >>> t2.runstring(common, "common")
997  (0, 1)
998  >>> t1.merge(t2)
999  *** Tester.merge: 'common' in both testers; summing outcomes.
1000  >>> t1.summarize(1)
1001  3 items passed all tests:
1002  2 tests in common
1003  2 tests in t1example
1004  2 tests in t2example
1005  6 tests in 3 items.
1006  6 passed and 0 failed.
1007  Test passed.
1008  (0, 6)
1009  >>>
1010  """
1011 
1012  d = self.name2ft
1013  for name, (f, t) in other.name2ft.items():
1014  if d.has_key(name):
1015  print "*** Tester.merge: '" + name + "' in both" \
1016  " testers; summing outcomes."
1017  f2, t2 = d[name]
1018  f = f + f2
1019  t = t + t2
1020  d[name] = f, t
1021 
1022  def __record_outcome(self, name, f, t):
1023  if self.name2ft.has_key(name):
1024  print "*** Warning: '" + name + "' was tested before;", \
1025  "summing outcomes."
1026  f2, t2 = self.name2ft[name]
1027  f = f + f2
1028  t = t + t2
1029  self.name2ft[name] = f, t
1030 
1031  def __runone(self, target, name):
1032  if "." in name:
1033  i = name.rindex(".")
1034  prefix, base = name[:i], name[i+1:]
1035  else:
1036  prefix, base = "", base
1037  if self.isprivate(prefix, base):
1038  return 0, 0
1039  return self.rundoc(target, name)
1040 
1041 master = None
1042 
1043 def testmod(m, name=None, globs=None, verbose=None, isprivate=None,
1044  report=1):
1045  """m, name=None, globs=None, verbose=None, isprivate=None, report=1
1046 
1047  Test examples in docstrings in functions and classes reachable from
1048  module m, starting with m.__doc__. Private names are skipped.
1049 
1050  Also test examples reachable from dict m.__test__ if it exists and is
1051  not None. m.__dict__ maps names to functions, classes and strings;
1052  function and class docstrings are tested even if the name is private;
1053  strings are tested directly, as if they were docstrings.
1054 
1055  Return (#failures, #tests).
1056 
1057  See doctest.__doc__ for an overview.
1058 
1059  Optional keyword arg "name" gives the name of the module; by default
1060  use m.__name__.
1061 
1062  Optional keyword arg "globs" gives a dict to be used as the globals
1063  when executing examples; by default, use m.__dict__. A copy of this
1064  dict is actually used for each docstring, so that each docstring's
1065  examples start with a clean slate.
1066 
1067  Optional keyword arg "verbose" prints lots of stuff if true, prints
1068  only failures if false; by default, it's true iff "-v" is in sys.argv.
1069 
1070  Optional keyword arg "isprivate" specifies a function used to
1071  determine whether a name is private. The default function is
1072  doctest.is_private; see its docs for details.
1073 
1074  Optional keyword arg "report" prints a summary at the end when true,
1075  else prints nothing at the end. In verbose mode, the summary is
1076  detailed, else very brief (in fact, empty if all tests passed).
1077 
1078  Advanced tomfoolery: testmod runs methods of a local instance of
1079  class doctest.Tester, then merges the results into (or creates)
1080  global Tester instance doctest.master. Methods of doctest.master
1081  can be called directly too, if you want to do something unusual.
1082  Passing report=0 to testmod is especially useful then, to delay
1083  displaying a summary. Invoke doctest.master.summarize(verbose)
1084  when you're done fiddling.
1085  """
1086 
1087  global master
1088 
1089  if not _ismodule(m):
1090  raise TypeError("testmod: module required; " + `m`)
1091  if name is None:
1092  name = m.__name__
1093  tester = Tester(m, globs=globs, verbose=verbose, isprivate=isprivate)
1094  failures, tries = tester.rundoc(m, name)
1095  f, t = tester.rundict(m.__dict__, name, m)
1096  failures = failures + f
1097  tries = tries + t
1098  if hasattr(m, "__test__"):
1099  testdict = m.__test__
1100  if testdict:
1101  if not hasattr(testdict, "items"):
1102  raise TypeError("testmod: module.__test__ must support "
1103  ".items(); " + `testdict`)
1104  f, t = tester.run__test__(testdict, name + ".__test__")
1105  failures = failures + f
1106  tries = tries + t
1107  if report:
1108  tester.summarize()
1109  if master is None:
1110  master = tester
1111  else:
1112  master.merge(tester)
1113  return failures, tries
1114 
1116  """
1117  A pointless class, for sanity-checking of docstring testing.
1118 
1119  Methods:
1120  square()
1121  get()
1122 
1123  >>> _TestClass(13).get() + _TestClass(-12).get()
1124  1
1125  >>> hex(_TestClass(13).square().get())
1126  '0xa9'
1127  """
1128 
1129  def __init__(self, val):
1130  """val -> _TestClass object with associated value val.
1131 
1132  >>> t = _TestClass(123)
1133  >>> print t.get()
1134  123
1135  """
1136 
1137  self.val = val
1138 
1139  def square(self):
1140  """square() -> square TestClass's associated value
1141 
1142  >>> _TestClass(13).square().get()
1143  169
1144  """
1145 
1146  self.val = self.val ** 2
1147  return self
1148 
1149  def get(self):
1150  """get() -> return TestClass's associated value.
1151 
1152  >>> x = _TestClass(-42)
1153  >>> print x.get()
1154  -42
1155  """
1156 
1157  return self.val
1158 
1159 __test__ = {"_TestClass": _TestClass,
1160  "string": r"""
1161  Example of a string object, searched as-is.
1162  >>> x = 1; y = 2
1163  >>> x + y, x * y
1164  (3, 2)
1165  """
1166  }
1167 
1168 def _test():
1169  import doctest
1170  return doctest.testmod(doctest)
1171 
1172 if __name__ == "__main__":
1173  _test()