get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp test_bambu_filament_ids.cpp test_config_value_formatter.cpp test_creality_cfs_match.cpp test_dev_mapping.cpp test_filament_bitmap_utils.cpp test_device_progress.cpp test_device_manager_integration.cpp test_web_media_controller.cpp test_scene_raycaster.cpp test_scene_benchmark.cpp test_lazy.cpp test_prebuild_queue.cpp test_staged_build.cpp test_network_versions.cpp test_orca_cloud_agent.cpp test_action_source.cpp test_plugin_host_api.cpp # Exercise seam enums and predicates through the embedded Python host API. test_precise_seam_plugin.cpp test_plugin_capability_config.cpp test_plugin_config.cpp test_plugin_capabilities_in_use.cpp test_plugin_status.cpp test_printer_agent.cpp test_plugin_install.cpp test_plugin_lifecycle.cpp test_plugin_printer_agent.cpp test_printhost.cpp test_slicing_pipeline_bindings.cpp test_slicing_pipeline_config.cpp test_plugin_sort.cpp test_plugin_cloud_metadata.cpp test_plugin_audit.cpp test_shortcuts.cpp test_file_url.cpp test_user_manager.cpp ../fff_print/test_helpers.cpp ) if (SLIC3R_CAD) target_sources(${_TEST_NAME}_tests PRIVATE test_design_sketch_tool.cpp) endif () if (MSVC) target_link_libraries(${_TEST_NAME}_tests Setupapi.lib) endif () target_link_libraries(${_TEST_NAME}_tests test_common libslic3r_gui libslic3r pybind11::embed Catch2::Catch2WithMain) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") orcaslicer_copy_test_dlls(${_TEST_NAME}_tests) if (WIN32) add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$/python" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_PREFIX_PATH}/libpython" "$/python" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_PREFIX_PATH}/libpython/python${_bundled_python_abi}.dll" "${CMAKE_PREFIX_PATH}/libpython/vcruntime140.dll" "${CMAKE_PREFIX_PATH}/libpython/vcruntime140_1.dll" "$" COMMENT "Copying Python runtime for slic3rutils plugin host API tests" VERBATIM ) elseif (NOT FLATPAK) # The CI unit-test runner only receives the build/tests tree, so both the # interpreter and the libpython the test binary links have to travel next to # the executable; find_bundled_python_home() picks the copy up from there. if (APPLE) target_link_options(${_TEST_NAME}_tests PRIVATE "LINKER:-rpath,@executable_path/python/lib") else () set_property(TARGET ${_TEST_NAME}_tests APPEND PROPERTY BUILD_RPATH "$ORIGIN/python/lib") endif () add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E rm -rf "$/python" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_PREFIX_PATH}/libpython" "$/python" COMMENT "Copying Python runtime for the plugin host API tests" VERBATIM ) elseif (FLATPAK) # Same /python home as WIN32/APPLE; symlink since /app/libpython # already ships in the flatpak (the test exe links libpython3.12.so from it). add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E rm -rf "$/python" COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_PREFIX_PATH}/libpython" "$/python" COMMENT "Linking Python runtime for flatpak plugin host API tests" VERBATIM ) endif() # scripts/run_unit_tests.sh installs the tests' numpy into that runtime with this uv, # staged where the app build tree keeps it (/tools/uv, see src/CMakeLists.txt). if (ORCA_BUNDLED_UV_EXECUTABLE) add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$/tools/uv" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ORCA_BUNDLED_UV_EXECUTABLE}" "$/tools/uv/${ORCA_BUNDLED_UV_FILENAME}" COMMENT "Copying uv for the plugin host API tests" VERBATIM ) endif() orcaslicer_discover_tests(${_TEST_NAME}_tests)