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
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(
voltu_sdk
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/public"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/sdk"
BINARY_DIR ${SDK_BINARY_DIR}
INSTALL_COMMAND ""
BUILD_ALWAYS true
CMAKE_ARGS -DOpenCV_DIR=${OpenCV_DIR}
)
if (BUILD_TESTS)
add_subdirectory(tests)
endif()
......@@ -5,18 +5,13 @@ project (voltu_sdk VERSION 0.0.1)
include(GNUInstallDirs)
option(WITH_OPENCV "Build with OpenCV wrapper" ON)
option(WITH_PYTHON "Build Python module" OFF)
option(WITH_TESTS "Enable unit tests" ON)
option(WITH_PYTHON "Build Python module" ON)
find_package( Eigen3 REQUIRED NO_MODULE )
find_package( Threads REQUIRED )
if (WITH_TESTS)
enable_testing()
endif()
find_package(Eigen3 REQUIRED NO_MODULE)
find_package(Threads REQUIRED)
if (WITH_OPENCV)
find_package( OpenCV REQUIRED )
find_package(OpenCV REQUIRED)
endif()
if(WIN32)
......@@ -72,7 +67,30 @@ add_executable(voltu_fusion_evaluator
)
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)
add_subdirectory(ext/pybind11)
add_subdirectory(python)
find_python_module(ply)
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()
......@@ -20,7 +20,7 @@ namespace voltu
/**
* @brief Voltu semantic versioning information.
*/
struct Version
PY_NO_SHARED_PTR struct Version
{
int major; ///< API Incompatible change
int minor; ///< Possible binary incompatible, extensions
......
set(SDK_AUTO_HEADERS
voltu/types/channel.hpp
voltu/types/frame.hpp
voltu/types/image.hpp
voltu/types/intrinsics.hpp
voltu/observer.hpp
voltu/feed.hpp
voltu/initialise.hpp
voltu/room.hpp
voltu/source.hpp
voltu/system.hpp
voltu/types/channel.hpp
voltu/types/frame.hpp
voltu/types/image.hpp
voltu/types/intrinsics.hpp
voltu/observer.hpp
voltu/feed.hpp
voltu/initialise.hpp
voltu/room.hpp
voltu/source.hpp
voltu/system.hpp
)
add_custom_command(
OUTPUT automatic_bindings.cpp
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.py
automatic_bindings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../include
${SDK_AUTO_HEADERS}
OUTPUT automatic_bindings.cpp
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.py
automatic_bindings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../include
${SDK_AUTO_HEADERS}
DEPENDS voltu_sdk gen.py
DEPENDS voltu_sdk gen.py
)
pybind11_add_module(voltu_sdk_py MODULE
automatic_bindings.cpp
module.cpp
automatic_bindings.cpp
module.cpp
)
target_include_directories(voltu_sdk_py PUBLIC include)
......@@ -31,7 +31,3 @@ target_include_directories(voltu_sdk_py PRIVATE .)
target_link_libraries(voltu_sdk_py PUBLIC voltu_sdk)
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):
import voltu
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
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