72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# test_all.py - test suit for python-control
|
|
# RMM, 30 Mar 2011
|
|
|
|
from __future__ import print_function
|
|
import unittest # unit test module
|
|
import re # regular expressions
|
|
import os # operating system commands
|
|
|
|
def test_all(verbosity=0):
|
|
""" Runs all tests written for python-control.
|
|
"""
|
|
try: # autodiscovery (python 2.7+)
|
|
start_dir = './'
|
|
pattern = '*_test.py'
|
|
top_level_dir = '../'
|
|
testModules = \
|
|
unittest.defaultTestLoader.discover(start_dir, pattern=pattern, \
|
|
top_level_dir=top_level_dir)
|
|
|
|
for mod in test_mods:
|
|
print('Running tests in', mod)
|
|
tests = unittest.defaultTestLoader.loadTestFromModule(mod)
|
|
t = unittest.TextTestRunner()
|
|
t.run(tests)
|
|
print('Completed tests in', mod)
|
|
|
|
except:
|
|
testModules = findTests('./tests/')
|
|
|
|
# Now go through each module and run all of its tests.
|
|
for mod in testModules:
|
|
print('Running tests in', mod)
|
|
suiteList=[] # list of unittest.TestSuite objects
|
|
exec('import '+mod+' as currentModule')
|
|
|
|
try:
|
|
currentSuite = currentModule.suite()
|
|
if isinstance(currentSuite, unittest.TestSuite):
|
|
suiteList.append(currentModule.suite())
|
|
else:
|
|
print(mod + '.suite() doesn\'t return a TestSuite')
|
|
except:
|
|
print('The test module '+mod+' doesnt have ' + \
|
|
'a proper suite() function')
|
|
|
|
t=unittest.TextTestRunner(verbosity=verbosity)
|
|
t.run(unittest.TestSuite(unittest.TestSuite(suiteList)))
|
|
print('Completed tests in', mod)
|
|
|
|
def findTests(testdir = './', pattern = "[^.#]*_test.py$"):
|
|
"""Since python <2.7 doesn't have test discovery, this finds tests in the
|
|
provided directory. The default is to check the current directory. Any files
|
|
that match test* or Test* are considered unittest modules and checked for
|
|
a module.suite() function (in tests())."""
|
|
|
|
# Get list of files in test directory
|
|
fileList = os.listdir(testdir)
|
|
|
|
# Go through the files and look for anything that matches the pattern
|
|
testModules= []
|
|
for fileName in fileList:
|
|
if (re.match(pattern, fileName)):
|
|
testModules.append(fileName[:-len('.py')])
|
|
|
|
# Return all of the modules that we find
|
|
return testModules
|
|
|
|
if __name__=='__main__':
|
|
test_all()
|