import os
import unittest
import tempfile
from cis_interface.tests import scripts, assert_raises
import cis_interface.drivers.tests.test_ModelDriver as parent
from cis_interface.drivers.CMakeModelDriver import (
CMakeModelDriver, create_include)
_driver_installed = CMakeModelDriver.is_installed()
[docs]def test_create_include():
r"""Test create_include."""
target = 'target'
tempdir = tempfile.gettempdir()
fname_dll = os.path.join(tempdir, 'test.dll')
fname_lib = os.path.join(tempdir, 'test.lib')
for fname in [fname_dll, fname_lib]:
with open(fname, 'w') as fd:
fd.write('')
assert(os.path.isfile(fname))
testlist = [(['-DCIS'], [], ['ADD_DEFINITIONS(-DCIS)']),
(['-Wall'], [], ['ADD_DEFINITIONS(-Wall)']),
(['/nologo'], [], ['ADD_DEFINITIONS(/nologo)']),
(['-Iinclude_dir'], [], ['INCLUDE_DIRECTORIES(include_dir)']),
([], ['-lm'], ['TARGET_LINK_LIBRARIES(%s -lm)' % target]),
([], ['-Llib_dir'], ['LINK_DIRECTORIES(lib_dir)']),
([], ['/LIBPATH:"lib_dir"'], ['LINK_DIRECTORIES(lib_dir)']),
([], ['m'], ['TARGET_LINK_LIBRARIES(%s m)' % target]),
([], [fname_dll], ['ADD_LIBRARY(test SHARED IMPORTED)']),
([], [fname_lib], ['ADD_LIBRARY(test STATIC IMPORTED)'])]
for c, l, lines in testlist:
out = create_include(None, target, compile_flags=c,
linker_flags=l)
for x in lines:
assert(x in out)
for fname in [fname_dll, fname_lib]:
os.remove(fname)
assert_raises(ValueError, create_include,
None, target, compile_flags=['invalid'])
assert_raises(ValueError, create_include,
None, target, linker_flags=['-invalid'])
assert_raises(ValueError, create_include,
None, target, linker_flags=['/invalid'])
[docs]@unittest.skipIf(_driver_installed, "C Library installed")
def test_CMakeModelDriver_no_C_library(): # pragma: windows
r"""Test CMakeModelDriver error when C library not installed."""
assert_raises(RuntimeError, CMakeModelDriver, 'test', scripts['cmake'])
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
def test_CMakeModelDriver_error_cmake():
r"""Test CMakeModelDriver error for invalid cmake args."""
makedir, target = os.path.split(scripts['cmake'])
assert_raises(RuntimeError, CMakeModelDriver, 'test', target,
sourcedir=makedir, cmakeargs='-P')
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
def test_CMakeModelDriver_error_notarget():
r"""Test CMakeModelDriver error for invalid target."""
makedir, target = os.path.split(scripts['cmake'])
assert_raises(RuntimeError, CMakeModelDriver, 'test', 'invalid',
sourcedir=makedir)
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
def test_CMakeModelDriver_error_nofile():
r"""Test CMakeModelDriver error for missing CMakeLists.txt."""
assert_raises(IOError, CMakeModelDriver, 'test', 'invalid')
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
class TestCMakeModelParam(parent.TestModelParam):
r"""Test parameters for CMakeModelDriver."""
driver = 'CMakeModelDriver'
def __init__(self, *args, **kwargs):
super(TestCMakeModelParam, self).__init__(*args, **kwargs)
self.attr_list += ['compiled', 'target', 'sourcedir',
'builddir', 'target_file', 'include_file',
'cmakeargs']
self.sourcedir, self.target = os.path.split(scripts['cmake'])
self.builddir = os.path.join(self.sourcedir, 'build')
self.args = [self.target]
# self._inst_kwargs['yml']['working_dir']
self._inst_kwargs['yml']['working_dir'] = self.sourcedir
[docs] def test_sbdir(self):
r"""Test that source/build directories set correctly."""
self.assert_equal(self.instance.sourcedir, self.sourcedir)
self.assert_equal(self.instance.builddir, self.builddir)
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
class TestCMakeModelDriverNoStart(TestCMakeModelParam,
parent.TestModelDriverNoStart):
r"""Test runner for CMakeModelDriver without start."""
def __init__(self, *args, **kwargs):
super(TestCMakeModelDriverNoStart, self).__init__(*args, **kwargs)
# Version specifying sourcedir via working_dir
self._inst_kwargs['yml']['working_dir'] = self.sourcedir
# Relative paths
self._inst_kwargs['sourcedir'] = '.'
self._inst_kwargs['builddir'] = 'build'
self._inst_kwargs['cmakeargs'] = '-Wdev'
# Done in driver, but driver not started
[docs] def teardown(self):
r"""Remove the instance, stoppping it."""
self.instance.cleanup()
super(TestCMakeModelDriverNoStart, self).teardown()
[docs]@unittest.skipIf(not _driver_installed, "C Library not installed")
class TestCMakeModelDriver(TestCMakeModelParam, parent.TestModelDriver):
r"""Test runner for CMakeModelDriver."""
pass