This means that running a Python test will cause the Python extension to be built, and that changes in the source will cause the Python tests to rerun.
77 lines
2.9 KiB
Python
77 lines
2.9 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('#data/inputs').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]
|
|
code = subprocess.call([program.abspath], env=env['ENV'])
|
|
if not code:
|
|
open(target[0].path, 'w').write(time.asctime()+'\n')
|
|
return code
|
|
|
|
|
|
def scriptRunner(target, source, env):
|
|
"""Scons Action to run a test script using the specified interpreter"""
|
|
interpreter = env['test_interpreter']
|
|
workDir = Dir('#test/work').abspath
|
|
if not os.path.isdir(workDir):
|
|
os.mkdir(workDir)
|
|
code = subprocess.call([interpreter, source[0].abspath],
|
|
env=env['ENV'],
|
|
cwd=workDir)
|
|
if not code:
|
|
open(target[0].path, 'w').write(time.asctime()+'\n')
|
|
return code
|
|
|
|
|
|
def addTestProgram(subdir, progName):
|
|
"""
|
|
Compile a test program and create a targets for running
|
|
and resetting the test.
|
|
"""
|
|
program = localenv.Program(pjoin(subdir, progName),
|
|
pjoin(subdir, '%s.cpp' % progName))
|
|
passedFile = File(pjoin(str(program[0].dir), '%s.passed' % program[0].name))
|
|
run_program = localenv.Command(passedFile, program, testRunner)
|
|
Alias('newtest', run_program)
|
|
if os.path.exists(passedFile.abspath):
|
|
Alias('newtest-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.
|
|
"""
|
|
testenv = localenv.Clone()
|
|
testenv['test_interpreter'] = interpreter
|
|
passedFile = File(pjoin(subdir, '%s.passed' % (script)))
|
|
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('newtest', run_program)
|
|
if os.path.exists(passedFile.abspath):
|
|
Alias('newtest-reset', testenv.Command('reset-%s%s' % (subdir, script),
|
|
[], [Delete(passedFile.abspath)]))
|
|
|
|
# Instantiate tests
|
|
addTestProgram('thermo', 'nasapoly')
|
|
addTestScript('python', 'runTests.py',
|
|
interpreter=sys.executable,
|
|
dependencies=['testSolution.py', localenv['python_module']])
|