]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
cmake: add missing environment variables for running tests
authorRalf Habacker <ralf.habacker@freenet.de>
Wed, 11 Dec 2024 14:33:44 +0000 (15:33 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Thu, 12 Dec 2024 15:34:08 +0000 (16:34 +0100)
To achieve comparable results with Meson, the test environment should
provide the same set of environment variables when used in the source
code or the test environment.

Resolves: dbus/dbus#541

Signed-off-by: Ralf Habacker <ralf.habacker@freenet.de>
cmake/modules/Macros.cmake
test/CMakeLists.txt

index d952b5f3c0ba1aa2de5af732759e348e41511793..14d06c2474fdafde60e77afdd1f054a6cdd4972b 100644 (file)
@@ -38,6 +38,34 @@ if((DBUS_ENABLE_MODULAR_TESTS OR DBUS_ENABLE_INTRUSIVE_TESTS) AND CMAKE_CROSSCOM
     endif()
 endif()
 
+#
+# unit test setup
+#
+macro(setup_unit_tests)
+    if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+        set(DBUS_PATH_DELIMITER ";")
+    else()
+        set(DBUS_PATH_DELIMITER ":")
+    endif()
+
+    # Tests in bus/config-parser.c rely on these specific values for XDG_*
+    set(DBUS_TEST_XDG_DATA_DIRS "${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test/XDG_DATA_DIRS" "${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test/XDG_DATA_DIRS2")
+    set(DBUS_TEST_XDG_DATA_HOME "${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test/XDG_DATA_HOME")
+    set(DBUS_TEST_XDG_RUNTIME_DIR "${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test/XDG_RUNTIME_DIR")
+    list(JOIN DBUS_TEST_XDG_DATA_DIRS "${DBUS_PATH_DELIMITER}" DBUS_TEST_XDG_DATA_DIRS_JOINED)
+
+    # the test environment expects these directories to be present
+    foreach(_dir ${DBUS_TEST_XDG_RUNTIME_DIR})
+        if(NOT EXISTS ${_dir})
+            message(STATUS "creating directory '${_dir}' for test environment")
+            file(MAKE_DIRECTORY ${_dir})
+            if(NOT WIN32)
+                file(CHMOD ${_dir} DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
+            endif()
+        endif()
+    endforeach()
+endmacro()
+
 #
 # add dbus specific test
 #
@@ -56,17 +84,28 @@ macro(add_unit_test _name _target)
         COMMAND ${TEST_WRAPPER} ${__ARGS} ${Z_DRIVE_IF_WINE}$<TARGET_FILE:${_target}> --tap
         WORKING_DIRECTORY ${DBUS_TEST_WORKING_DIR}
     )
+
+    if(NOT setup_unit_tests_called)
+        setup_unit_tests()
+        set(setup_unit_test_called 1)
+    endif()
+
     set(_env)
     list(APPEND _env "DBUS_SESSION_BUS_ADDRESS=")
     list(APPEND _env "DBUS_FATAL_WARNINGS=1")
+    list(APPEND _env "DBUS_TEST_BUILDDIR=${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test")
     list(APPEND _env "DBUS_TEST_DAEMON=${DBUS_TEST_DAEMON}")
     list(APPEND _env "DBUS_TEST_DATA=${DBUS_TEST_DATA}")
     list(APPEND _env "DBUS_TEST_DBUS_LAUNCH=${DBUS_TEST_DBUS_LAUNCH}")
     list(APPEND _env "DBUS_TEST_EXEC=${DBUS_TEST_EXEC}")
     list(APPEND _env "DBUS_TEST_HOMEDIR=${DBUS_TEST_HOMEDIR}")
     list(APPEND _env "DBUS_TEST_UNINSTALLED=1")
+    # used by GLib-based tests to implement g_test_build_filename(), etc.
     list(APPEND _env "G_TEST_BUILDDIR=${Z_DRIVE_IF_WINE}${PROJECT_BINARY_DIR}/test")
     list(APPEND _env "G_TEST_SRCDIR=${Z_DRIVE_IF_WINE}${PROJECT_SOURCE_DIR}/test")
+    list(APPEND _env "XDG_DATA_DIRS=${DBUS_TEST_XDG_DATA_DIRS_JOINED}")
+    list(APPEND _env "XDG_DATA_HOME=${DBUS_TEST_XDG_DATA_HOME}")
+    list(APPEND _env "XDG_RUNTIME_DIR=${DBUS_TEST_XDG_RUNTIME_DIR}")
     list(APPEND _env ${__ENV})
     set_tests_properties(${_name} PROPERTIES ENVIRONMENT "${_env}")
 endmacro()
index ea22263c51d2121c611b47012f884c843ba52913..032ba1f7eb7c9b5f8c00e559de1dc05514ee1a18 100644 (file)
@@ -149,8 +149,6 @@ if(DBUS_ENABLE_INTRUSIVE_TESTS)
 
     set(SOURCES bus/main.c bus/common.c bus/common.h)
     add_test_executable(test-bus "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
-    # TODO: For full coverage this should be run with some specific
-    # environment variable values: see dbus#541
     set_target_properties(test-bus PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
 
     if(ENABLE_TRADITIONAL_ACTIVATION)