cantera/test/SConscript
Ray Speth bcb79d9cd3 Convert .cti files in data/inputs to .xml as part of the buld process
The full set of .cti and .xml files to be installed is placed in build/data (for
use by the test suite) and copied to the CANTERA_DATA folder on installation.
2012-08-02 15:47:45 +00:00

158 lines
6 KiB
Python

from buildutils import *
import subprocess
Import('env','build','install')
localenv = env.Clone()
localenv.Append(CPPPATH=['#ext/gtest/include', '#include'],
LIBPATH='#build/lib',
LIBS=['gtest'] + localenv['cantera_libs'])
localenv['ENV']['PYTHONPATH'] = Dir('#interfaces/python').abspath
localenv['ENV']['CANTERA_DATA'] = Dir('#build/data').abspath
# Needed for Intel runtime libraries when compiling with ICC
if 'LD_LIBRARY_PATH' in os.environ:
localenv['ENV']['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
def testRunner(target, source, env):
"""SCons Action to run a compiled test program"""
program = source[0]
passedFile = target[0]
workDir = Dir('#test/work').abspath
del testResults.tests[passedFile.name]
if not os.path.isdir(workDir):
os.mkdir(workDir)
code = subprocess.call([program.abspath], env=env['ENV'], cwd=workDir)
if not code:
# Test was successful
open(passedFile.path, 'w').write(time.asctime()+'\n')
testResults.passed[passedFile.name] = program
else:
testResults.failed[passedFile.name] = program
def addTestProgram(subdir, progName):
"""
Compile a test program and create a targets for running
and resetting the test.
"""
program = localenv.Program(pjoin(subdir, progName),
mglob(localenv, subdir, 'cpp'))
passedFile = File(pjoin(str(program[0].dir), '%s.passed' % program[0].name))
testResults.tests[passedFile.name] = program
run_program = localenv.Command(passedFile, program, testRunner)
Alias('test', run_program)
Alias('test-%s' % progName, run_program)
env['testNames'].append(progName)
if os.path.exists(passedFile.abspath):
Alias('test-reset', localenv.Command('reset-%s%s' % (subdir, progName),
[], [Delete(passedFile.abspath)]))
def addTestScript(subdir, script, interpreter, dependencies):
"""
Create targets for running and resetting a test script.
"""
def scriptRunner(target, source, env):
"""Scons Action to run a test script using the specified interpreter"""
workDir = Dir('#test/work').abspath
passedFile = target[0]
del testResults.tests[passedFile.name]
if not os.path.isdir(workDir):
os.mkdir(workDir)
code = subprocess.call([interpreter, source[0].abspath],
env=env['ENV'],
cwd=workDir)
if not code:
# Test was successful
open(target[0].path, 'w').write(time.asctime()+'\n')
testResults.passed[passedFile.name] = True
else:
testResults.failed[passedFile.name] = True
testenv = localenv.Clone()
passedFile = File(pjoin(subdir, '%s.passed' % (script)))
testResults.tests[passedFile.name] = True
run_program = testenv.Command(passedFile, pjoin(subdir, script), scriptRunner)
for dep in dependencies:
if isinstance(dep, str):
dep = File(pjoin(subdir, dep))
testenv.Depends(run_program, dep)
Alias('test', run_program)
if os.path.exists(passedFile.abspath):
Alias('test-reset', testenv.Command('reset-%s%s' % (subdir, script),
[], [Delete(passedFile.abspath)]))
return run_program
def addMatlabTest(script, dependencies=None):
def matlabRunner(target, source, env):
passedFile = target[0]
del testResults.tests[passedFile.name]
workDir = Dir('#test/work').abspath
if not os.path.isdir(workDir):
os.mkdir(workDir)
outfile = pjoin(workDir, 'matlab-results.txt')
runCommand = "%s('%s'); exit" % (source[0].name[:-2], outfile)
if os.name == 'nt':
matlabOptions = ['-nojvm','-nosplash','-wait']
else:
matlabOptions = ['-nojvm','-nodisplay']
if os.path.exists(outfile):
os.remove(outfile)
environ = dict(os.environ)
environ.update(env['ENV'])
code = subprocess.call([pjoin(env['matlab_path'], 'bin', 'matlab')] +
matlabOptions + ['-r', runCommand],
env=environ, cwd=Dir('#test/matlab').abspath)
results = open(outfile).read()
print '-------- Matlab test results --------'
print results
print '------ end Matlab test results ------'
if 'FAILED' in results:
testResults.failed[passedFile.name] = True
else:
testResults.passed[passedFile.name] = True
open(target[0].path, 'w').write(time.asctime()+'\n')
testenv = localenv.Clone()
passedFile = File(pjoin('matlab', '%s.passed' % (script)))
testResults.tests[passedFile.name] = True
run_program = testenv.Command(passedFile, pjoin('matlab', script), matlabRunner)
dependencies = (dependencies or []) + localenv['matlab_extension']
for dep in dependencies:
if isinstance(dep, str):
dep = File(pjoin('matlab', dep))
testenv.Depends(run_program, dep)
Alias('test', run_program)
if os.path.exists(passedFile.abspath):
Alias('test-reset', testenv.Command('reset-%s%s' % ('matlab', script),
[], [Delete(passedFile.abspath)]))
return run_program
# Instantiate tests
addTestProgram('thermo', 'thermo')
addTestProgram('kinetics', 'kinetics')
if localenv['python_package'] == 'full':
pyTest = addTestScript('python', 'runTests.py',
interpreter=sys.executable,
dependencies=(mglob(localenv, 'python', 'py') +
localenv['python_module']))
localenv.Alias('test-python', pyTest)
env['testNames'].append('python')
if localenv['matlab_toolbox'] == 'y':
matlabTest = addMatlabTest('runCanteraTests.m',
dependencies=mglob(localenv, 'matlab', 'm'))
localenv.Alias('test-matlab', matlabTest)
env['testNames'].append('matlab')