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: testenv.Depends(run_program, File(pjoin(subdir, 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'])