[Zope-Checkins] CVS: Zope/utilities - testrunner.py:1.10.4.4
Jeffrey P Shell
jeffrey@zope.com
Tue, 14 Aug 2001 12:10:04 -0400
Update of /cvs-repository/Zope/utilities
In directory cvs.zope.org:/tmp/cvs-serv18344
Modified Files:
Tag: Zope-2_4-branch
testrunner.py
Log Message:
Folding in parts of the patch in Collector #2470 from Chris Withers,
as well as other small fixes. From Chris' notes:
- allows verbosity control when using newer unittest.pys'
- cleans up the runPath method by factoring more of it into the
smellsLikeATest method.
- fixes two bugs in runFile() that caused problems with the -d
option.
=== Zope/utilities/testrunner.py 1.10.4.3 => 1.10.4.4 ===
"""Test suite runner"""
- def __init__(self, basepath):
+ def __init__(self, basepath, verbosity=VERBOSE):
# initialize python path
self.basepath=path=basepath
+ self.verbosity = verbosity
pjoin=os.path.join
if sys.platform == 'win32':
sys.path.insert(0, pjoin(path, 'lib/python'))
@@ -61,14 +62,22 @@
return function()
def smellsLikeATest(self, filepath, find=string.find):
- file = open(filepath, 'r')
- text = file.read()
- file.close()
- return ((find(text, 'unittest') > -1) or
- (find(text, 'framework.py') > -1))
+ path, name = os.path.split(filepath)
+ fname, ext = os.path.splitext(name)
+
+ if name[:4]=='test' and name[-3:]=='.py' and \
+ name != 'testrunner.py':
+
+ file=open(filepath, 'r')
+ lines=file.readlines()
+ file.close()
+ for line in lines:
+ if find(line, 'def test_suite(') > -1:
+ return 1
+ return 0
def runSuite(self, suite):
- runner=unittest.TextTestRunner(verbosity=VERBOSE)
+ runner=unittest.TextTestRunner(verbosity=self.verbosity)
runner.run(suite)
def report(self, message):
@@ -87,16 +96,11 @@
pathname = os.path.join(self.basepath, pathname)
names=os.listdir(pathname)
for name in names:
- fname, ext=os.path.splitext(name)
- if name[:4]=='test' and name[-3:]=='.py' and \
- name != 'testrunner.py':
- filepath=os.path.join(pathname, name)
- if self.smellsLikeATest(filepath):
- self.runFile(filepath)
- for name in names:
fullpath=os.path.join(pathname, name)
if os.path.isdir(fullpath):
self.runPath(fullpath)
+ elif self.smellsLikeATest(fullpath):
+ self.runFile(fullpath)
def runFile(self, filename):
"""Run the test suite defined by filename."""
@@ -105,21 +109,17 @@
if dirname:
os.chdir(dirname)
self.report('Running: %s' % filename)
- try: suite=self.getSuiteFromFile(filename)
+ try: suite=self.getSuiteFromFile(name)
except:
traceback.print_exc()
- suite=None
- if suite is None:
- self.report('No test suite found in file:\n%s' % filename)
- return
- self.runSuite(suite)
+ suite=None
+ if suite is not None:
+ self.runSuite(suite)
+ else:
+ self.report('No test suite found in file:\n%s\n' % filename)
os.chdir(working_dir)
-
-
-
-
def main(args):
usage_msg="""Usage: python testrunner.py options
@@ -148,13 +148,23 @@
Run the test suite found in the file specified. The filepath
should be a fully qualified path to the file to be run.
+ -v level
+
+ Set the Verbosity level to level. Newer versions of
+ unittest.py allow more options than older ones. Allowed
+ values are:
+
+ 0 - Silent
+ 1 - Quiet (produces a dot for each succesful test)
+ 2 - Verbose (default - produces a line of output for each test)
+
-q
Run tests without producing verbose output. The tests are
normally run in verbose mode, which produces a line of
output for each test that includes the name of the test and
- whether it succeeded. Quiet mode prints a period as
- each test runs.
+ whether it succeeded. Running with -q is the same as
+ running with -v1.
-h
@@ -164,8 +174,9 @@
pathname=None
filename=None
test_all=None
+ verbosity = VERBOSE
- options, arg=getopt.getopt(args, 'ahd:f:q')
+ options, arg=getopt.getopt(args, 'ahd:f:v:q')
if not options:
err_exit(usage_msg)
for name, value in options:
@@ -178,13 +189,14 @@
filename=string.strip(value)
elif name == 'h':
err_exit(usage_msg, 0)
+ elif name == 'v':
+ verbosity = int(value)
elif name == 'q':
- global VERBOSE
- VERBOSE = 1
+ verbosity = 1
else:
err_exit(usage_msg)
- testrunner=TestRunner(os.getcwd())
+ testrunner = TestRunner(os.getcwd(), verbosity=verbosity)
if test_all:
testrunner.runAllTests()
elif pathname: