1
2
3
4
5
6
7
8
9 """
10 Regression testing.
11 """
12 __docformat__ = 'epytext en'
13
14 import unittest, doctest, epydoc, os, os.path, re, sys
15
17 try:
18 doctest.register_optionflag
19 except:
20 print ("\n"
21 "The regression test suite requires a more recent version of\n"
22 "doctest (e.g., the version that ships with Python 2.4 or 2.5).\n"
23 "Please place a new version of doctest on your path before \n"
24 "running the test suite.\n")
25 return
26
27
28 PY24 = doctest.register_optionflag('PYTHON2.4')
29 """Flag indicating that a doctest example requires Python 2.4+"""
30
31 PY25 = doctest.register_optionflag('PYTHON2.5')
32 """Flag indicating that a doctest example requires Python 2.5+"""
33
34 class DocTestParser(doctest.DocTestParser):
35 """
36 Custom doctest parser that adds support for two new flags
37 +PYTHON2.4 and +PYTHON2.5.
38 """
39 def parse(self, string, name='<string>'):
40 pieces = doctest.DocTestParser.parse(self, string, name)
41 for i, val in enumerate(pieces):
42 if (isinstance(val, doctest.Example) and
43 ((val.options.get(PY24, False) and
44 sys.version[:2] < (2,4)) or
45 (val.options.get(PY25, False) and
46 sys.version[:2] < (2,5)))):
47 pieces[i] = doctest.Example('1', '1')
48 return pieces
49
50
51 epydoc.DEBUG = True
52
53
54 options = doctest.ELLIPSIS
55 doctest.set_unittest_reportflags(doctest.REPORT_UDIFF)
56
57
58 parser = DocTestParser()
59
60
61 tests = []
62 testdir = os.path.join(os.path.split(__file__)[0])
63 if testdir == '': testdir = '.'
64 for filename in os.listdir(testdir):
65 if (filename.endswith('.doctest') and
66 check_requirements(os.path.join(testdir, filename))):
67 tests.append(doctest.DocFileSuite(filename, optionflags=options,
68 parser=parser))
69
70
71 unittest.TextTestRunner(verbosity=2).run(unittest.TestSuite(tests))
72
74 """
75 Search for strings of the form::
76
77 [Require: <module>]
78
79 If any are found, then try importing the module named <module>.
80 If the import fails, then return False. If all required modules
81 are found, return True. (This includes the case where no
82 requirements are listed.)
83 """
84 s = open(filename).read()
85 for m in re.finditer('(?mi)^[ ]*\:RequireModule:(.*)$', s):
86 module = m.group(1).strip()
87 try:
88 __import__(module)
89 except ImportError:
90 print ('Skipping %r (required module %r not found)' %
91 (os.path.split(filename)[-1], module))
92 return False
93 return True
94
95
96 if __name__=='__main__':
97 main()
98