Added a script to simplify running coverage tests

This commit is contained in:
Ray Speth 2012-01-19 03:53:08 +00:00
parent 4ab232da44
commit 79c0f4afdc
3 changed files with 96 additions and 0 deletions

2
.gitignore vendored
View file

@ -27,3 +27,5 @@ config.log
Cantera/matlab/build_cantera.m
*.gcda
*.gcno
coverage
coverage.info

View file

@ -39,6 +39,9 @@ class Test(object):
localenv.Alias('test-%s' % self.testName, run)
testNames.append(self.testName)
# reset: just delete the ".passed" file so that this test will be re-run
localenv.Alias('test-reset', self.reset(localenv))
def run(self, env, *args):
source = list(args)
if not source:
@ -56,6 +59,13 @@ class Test(object):
test_ignoreLines=self.ignoreLines)
return test
def reset(self, env, **kwargs):
f = pjoin(os.getcwd(), self.subdir, self.passedFile)
if os.path.exists(f):
uniqueName = 'reset-%s' % self.testName
target = env.Command(uniqueName, [], [Delete(f)])
return target
def clean(self, env, **kwargs):
# Name used for the output file
if self.blessedName is not None and 'blessed' in self.blessedName:

84
tools/coverage.py Executable file
View file

@ -0,0 +1,84 @@
#!/usr/bin/python
"""
Collect test coverage data and generate an html report.
"""
import os
import subprocess
import shutil
def getDirectories():
"""
Return a list of all directories containing coverage data.
"""
sourcedirs = set()
rootdir = os.getcwd()
for dirpath, dirnames, filenames in os.walk(rootdir):
for fname in filenames:
if fname.endswith('.gcda'):
dirpath.replace(rootdir, '', 1)
sourcedirs.add(dirpath)
return sourcedirs
def clean():
"""
Remove all coverage data.
"""
sourcedirs = getDirectories()
if not sourcedirs:
return
command = ['lcov', '--zerocounters']
for d in sourcedirs:
command.append('-d')
command.append(d)
subprocess.call(command)
def test():
"""
Run the full test suite.
"""
subprocess.call(['scons', 'test-reset'])
subprocess.call(['scons', 'test'])
def collect():
"""
Collect the generated coverage data into 'coverage.info'
"""
sourcedirs = getDirectories()
if not sourcedirs:
print "Warning! Didn't find any coverage data."
return
command = ['lcov', '-c',
'-b', '.',
'-o', 'coverage.info']
for d in sourcedirs:
command.append('-d')
command.append(d)
subprocess.call(command)
def genhtml():
"""
Produce an html report from the collected data.
"""
if os.path.exists('coverage'):
shutil.rmtree('coverage')
os.mkdir('coverage')
subprocess.call(['genhtml', 'coverage.info',
'-o', 'coverage',
'-p', os.getcwd()])
if __name__ == '__main__':
clean()
test()
collect()
genhtml()