Skip to content
Snippets Groups Projects
Commit 1770209b authored by Sebastian Hahta's avatar Sebastian Hahta
Browse files

Merge branch 'pythontests' into 'master'

Python tests (SDK)

See merge request nicolas.pope/ftl!357
parents ba219c6c c136dac6
No related branches found
No related tags found
1 merge request!357Python tests (SDK)
Pipeline #33800 passed
...@@ -35,11 +35,17 @@ target_include_directories(voltu ...@@ -35,11 +35,17 @@ target_include_directories(voltu
target_link_libraries(voltu ftlcommon ftldata ftlctrl ftlrgbd ftlstreams ftlrender Threads::Threads ${OpenCV_LIBS} openvr ftlnet nanogui ${NANOGUI_EXTRA_LIBS} ceres nvidia-ml) target_link_libraries(voltu ftlcommon ftldata ftlctrl ftlrgbd ftlstreams ftlrender Threads::Threads ${OpenCV_LIBS} openvr ftlnet nanogui ${NANOGUI_EXTRA_LIBS} ceres nvidia-ml)
set(SDK_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/sdk")
ExternalProject_Add( ExternalProject_Add(
voltu_sdk voltu_sdk
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/public" SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/public"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/sdk" BINARY_DIR ${SDK_BINARY_DIR}
INSTALL_COMMAND "" INSTALL_COMMAND ""
BUILD_ALWAYS true BUILD_ALWAYS true
CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR} CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR}
) )
if (BUILD_TESTS)
add_subdirectory(tests)
endif()
...@@ -5,18 +5,13 @@ project (voltu_sdk VERSION 0.0.1) ...@@ -5,18 +5,13 @@ project (voltu_sdk VERSION 0.0.1)
include(GNUInstallDirs) include(GNUInstallDirs)
option(WITH_OPENCV "Build with OpenCV wrapper" ON) option(WITH_OPENCV "Build with OpenCV wrapper" ON)
option(WITH_PYTHON "Build Python module" OFF) option(WITH_PYTHON "Build Python module" ON)
option(WITH_TESTS "Enable unit tests" ON)
find_package( Eigen3 REQUIRED NO_MODULE ) find_package(Eigen3 REQUIRED NO_MODULE)
find_package( Threads REQUIRED ) find_package(Threads REQUIRED)
if (WITH_TESTS)
enable_testing()
endif()
if (WITH_OPENCV) if (WITH_OPENCV)
find_package( OpenCV REQUIRED ) find_package(OpenCV REQUIRED)
endif() endif()
if(WIN32) if(WIN32)
...@@ -72,7 +67,30 @@ add_executable(voltu_fusion_evaluator ...@@ -72,7 +67,30 @@ add_executable(voltu_fusion_evaluator
) )
target_link_libraries(voltu_fusion_evaluator voltu_sdk) target_link_libraries(voltu_fusion_evaluator voltu_sdk)
find_package (Python COMPONENTS Development.Module Interpreter)
function(find_python_module module)
string(TOUPPER ${module} module_upper)
if(NOT PY_${module_upper})
execute_process(COMMAND "${Python_EXECUTABLE}" "-c"
"import ${module}; print(${module}.__file__.rstrip('__init__.py'))"
RESULT_VARIABLE _${module}_status
OUTPUT_VARIABLE _${module}_location
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT _${module}_status)
set(PY_${module_upper} ${_${module}_location} CACHE STRING
"Location of Python module ${module}")
endif(NOT _${module}_status)
endif(NOT PY_${module_upper})
find_package_handle_standard_args(PY_${module} DEFAULT_MSG PY_${module_upper})
endfunction(find_python_module)
if (WITH_PYTHON) if (WITH_PYTHON)
add_subdirectory(ext/pybind11) find_python_module(ply)
add_subdirectory(python) if (Python_FOUND AND PY_PLY)
add_subdirectory(ext/pybind11)
add_subdirectory(python)
else()
message(WARNING "Python dependencies not found, Python module is not built")
endif()
endif() endif()
...@@ -20,7 +20,7 @@ namespace voltu ...@@ -20,7 +20,7 @@ namespace voltu
/** /**
* @brief Voltu semantic versioning information. * @brief Voltu semantic versioning information.
*/ */
struct Version PY_NO_SHARED_PTR struct Version
{ {
int major; ///< API Incompatible change int major; ///< API Incompatible change
int minor; ///< Possible binary incompatible, extensions int minor; ///< Possible binary incompatible, extensions
......
set(SDK_AUTO_HEADERS set(SDK_AUTO_HEADERS
voltu/types/channel.hpp voltu/types/channel.hpp
voltu/types/frame.hpp voltu/types/frame.hpp
voltu/types/image.hpp voltu/types/image.hpp
voltu/types/intrinsics.hpp voltu/types/intrinsics.hpp
voltu/observer.hpp voltu/observer.hpp
voltu/feed.hpp voltu/feed.hpp
voltu/initialise.hpp voltu/initialise.hpp
voltu/room.hpp voltu/room.hpp
voltu/source.hpp voltu/source.hpp
voltu/system.hpp voltu/system.hpp
) )
add_custom_command( add_custom_command(
OUTPUT automatic_bindings.cpp OUTPUT automatic_bindings.cpp
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.py COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.py
automatic_bindings.cpp automatic_bindings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../include ${CMAKE_CURRENT_SOURCE_DIR}/../include
${SDK_AUTO_HEADERS} ${SDK_AUTO_HEADERS}
DEPENDS voltu_sdk gen.py DEPENDS voltu_sdk gen.py
) )
pybind11_add_module(voltu_sdk_py MODULE pybind11_add_module(voltu_sdk_py MODULE
automatic_bindings.cpp automatic_bindings.cpp
module.cpp module.cpp
) )
target_include_directories(voltu_sdk_py PUBLIC include) target_include_directories(voltu_sdk_py PUBLIC include)
...@@ -31,7 +31,3 @@ target_include_directories(voltu_sdk_py PRIVATE .) ...@@ -31,7 +31,3 @@ target_include_directories(voltu_sdk_py PRIVATE .)
target_link_libraries(voltu_sdk_py PUBLIC voltu_sdk) target_link_libraries(voltu_sdk_py PUBLIC voltu_sdk)
set_target_properties(voltu_sdk_py PROPERTIES OUTPUT_NAME voltu) set_target_properties(voltu_sdk_py PROPERTIES OUTPUT_NAME voltu)
if (WITH_TESTS)
add_subdirectory(tests)
endif()
find_package(Python3 COMPONENTS Interpreter)
function(add_python_test TEST_NAME TEST_SCRIPT)
add_test(NAME ${TEST_NAME}
COMMAND Python3::Interpreter -B -m unittest ${TEST_SCRIPT}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# binary module directory to PYTHONPATH
set_tests_properties(${TEST_NAME} PROPERTIES
ENVIRONMENT PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/..)
endfunction()
add_python_test(TestLoad test_load.py)
find_package(Python3 COMPONENTS Interpreter)
function(add_python_test TEST_NAME TEST_SCRIPT)
add_test(NAME ${TEST_NAME}
COMMAND Python3::Interpreter -B -m unittest ${TEST_SCRIPT}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# binary module directory to PYTHONPATH, additional variables have to be
# separated by semicolon
set_tests_properties(${TEST_NAME} PROPERTIES ENVIRONMENT
"PYTHONPATH=${SDK_BINARY_DIR}/python;LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/..")
set_property(TEST ${TEST_NAME} APPEND PROPERTY DEPENDS voltu_sdk)
endfunction()
add_python_test(Py_TestLoad test_load.py)
File moved
...@@ -7,7 +7,8 @@ class LoadLibrary(unittest.TestCase): ...@@ -7,7 +7,8 @@ class LoadLibrary(unittest.TestCase):
import voltu import voltu
def test_import_twice(self): def test_import_twice(self):
# verify that System instance is created just once # verify that System instance is created just once, even if module
# imported multiple times
import voltu import voltu
import voltu import voltu
self.assertIsNotNone(voltu.System) self.assertIsNotNone(voltu.System)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment