root/trunk/doc/testdocs.py

Revision 312, 2.5 kB (checked in by apdavison, 2 months ago)

Bug-fixes to srblib module. Unit tests and doctests now pass.

Line 
1 #!/usr/bin/env python
2 """
3 Script to run doctests.
4
5 Usage: testdocs.py [options] FILE
6
7 Options:
8   -h, --help  show this help message and exit
9   --strict    Use the original doctest output checker, not the more lax local
10               version.
11 """
12
13 import doctest
14 import sys
15 import os.path
16 from optparse import OptionParser
17
18 optionflags = doctest.IGNORE_EXCEPTION_DETAIL+doctest.NORMALIZE_WHITESPACE
19
20 class MyOutputChecker(doctest.OutputChecker):
21     """
22     Modification of doctest.OutputChecker to work better with the
23     users' manual:
24       * Often, we don't want to have the output that is printed
25     by Python in the manual, as it just takes up space without adding any
26     useful information.
27     """
28    
29     def __init__(self,strict):
30         self.strict = strict
31    
32     def check_output(self, want, got, optionflags):
33         if self.strict:
34             return doctest.OutputChecker.check_output(self, want, got, optionflags)
35         else:
36             if want == '':
37                 return True
38             else:
39                 try:
40                     int(want) and int(got)
41                     return True
42                 except ValueError:
43                     return doctest.OutputChecker.check_output(self, want, got, optionflags)
44
45 def mytestfile(filename,globs,optionflags,strict=False):
46     parser = doctest.DocTestParser()
47     if globs is None:
48         globs = {}
49     else:
50         globs = globs.copy()
51     name = os.path.basename(filename)
52    
53     runner = doctest.DocTestRunner(checker=MyOutputChecker(strict=strict), optionflags=optionflags)
54     # Read the file, convert it to a test, and run it.
55     s = open(filename).read()
56     test = parser.get_doctest(s, globs, name, filename, 0)
57     runner.run(test)
58     runner.summarize()
59     return runner.failures, runner.tries
60
61 # ==============================================================================
62 if __name__ == "__main__":
63    
64     # Process command line
65     parser = OptionParser(usage="usage: %prog [options] FILE")
66     parser.add_option("--strict", action="store_true", dest="strict", default=False,
67                   help="Use the original doctest output checker, not the more lax local version.")
68
69     (options, args) = parser.parse_args()
70     if len(args) == 1:
71         docfile = args[0]
72     else:
73         parser.print_help()
74         sys.exit(1)
75    
76     # Run test
77     exec("from NeuroTools.%s import *" % docfile.replace('.txt',''))
78     mytestfile(docfile, globs=globals(), optionflags=optionflags, strict=options.strict)
79
80     sys.exit(0)
Note: See TracBrowser for help on using the browser.