summaryrefslogtreecommitdiffstats
path: root/tests/auto/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/cmake')
-rw-r--r--tests/auto/cmake/test_import_plugins/CMakeLists.txt170
1 files changed, 115 insertions, 55 deletions
diff --git a/tests/auto/cmake/test_import_plugins/CMakeLists.txt b/tests/auto/cmake/test_import_plugins/CMakeLists.txt
index 3db7f012db..bc3580760f 100644
--- a/tests/auto/cmake/test_import_plugins/CMakeLists.txt
+++ b/tests/auto/cmake/test_import_plugins/CMakeLists.txt
@@ -6,21 +6,45 @@ enable_testing()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt6 COMPONENTS REQUIRED MockPlugins1 MockPlugins2)
-# MockPlugins3 is automatically find_dependency'd by QMock5Plugin which depends on MockPlugins3.
-# QMock5Plugin itself is loaded by QtMockPlugins1Plugins.cmake.
+# MockPlugins3 package is automatically found by the find_dependency call in
+# QMock5PluginConfig.cmake which depends on MockPlugins3.
+# QMock5Plugin itself is loaded by QtMockPlugins1Plugins.cmake, so via QtMockPlugins1Config.cmake.
-function(create_test_executable TARGET_NAME)
- set(CHECK_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}_check.cpp)
+function(create_test_executable target)
+ cmake_parse_arguments(arg "FINALIZER_MODE;QT_WRAPPER" "" "ADD_EXECUTABLE_ARGS" ${ARGN})
+
+ set(target_name_adjusted "${target}")
+ if(arg_FINALIZER_MODE)
+ set(target_name_adjusted "${target}_finalizer")
+ endif()
+
+ set(CHECK_FILE ${CMAKE_BINARY_DIR}/${target_name_adjusted}_check.cpp)
set(EXPECTED_PLUGINS)
- foreach(_p ${ARGN})
+ foreach(_p ${arg_UNPARSED_ARGUMENTS})
string(APPEND EXPECTED_PLUGINS " \"${_p}\",\n")
endforeach()
configure_file("${CMAKE_SOURCE_DIR}/check.cpp.in" ${CHECK_FILE})
- add_executable(${TARGET_NAME} main.cpp ${CHECK_FILE})
- target_link_libraries(${TARGET_NAME} PRIVATE Qt6::MockPlugins1)
- add_test(test_${TARGET_NAME} ${TARGET_NAME})
+ set(add_executable_args ${target_name_adjusted} main.cpp ${CHECK_FILE}
+ ${arg_ADD_EXECUTABLE_ARGS})
+
+ if(arg_QT_WRAPPER)
+ qt_add_executable(${add_executable_args})
+ else()
+ add_executable(${add_executable_args})
+ endif()
+ target_link_libraries(${target_name_adjusted} PRIVATE Qt6::MockPlugins1)
+ add_test(test_${target_name_adjusted} ${target_name_adjusted})
+
+ if(arg_FINALIZER_MODE)
+ set(finalizer_mode "TRUE")
+ else()
+ set(finalizer_mode "FALSE")
+ endif()
+ qt_enable_import_plugins_finalizer_mode(${target_name_adjusted} ${finalizer_mode})
+
+ set(target ${target_name_adjusted} PARENT_SCOPE)
endfunction()
# No call to qt_import_plugins() for the default case.
@@ -28,6 +52,7 @@ create_test_executable(default
QMock1Plugin QMock2Plugin
QMock3Plugin # TODO: Should not be linked based on .pro file, see QTBUG-93501
+ ${import_mode}
)
# No call to qt_import_plugins() for the default_link case.
@@ -42,64 +67,99 @@ create_test_executable(default_link QMock1Plugin QMock2Plugin
# suggests that MockPlugins1 OR MockPlugins2 is sufficient to link the plugin, not both.
# See QTBUG-93501
QMock3Plugin
+ ${import_mode}
)
-target_link_libraries(default_link PRIVATE Qt6::MockPlugins2)
+target_link_libraries(${target} PRIVATE Qt6::MockPlugins2)
+
+# Check that both regular and finalizer mode plugin importing pulls in the same set of plugins.
+foreach(import_mode "" "FINALIZER_MODE")
+ create_test_executable(manual QMock1Plugin QMock2Plugin QMock3Plugin QMock4Plugin
+ ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE Qt6::QMock3Plugin Qt6::QMock4Plugin
+ )
-create_test_executable(manual QMock1Plugin QMock2Plugin QMock3Plugin QMock4Plugin)
-qt_import_plugins(manual
- INCLUDE Qt6::QMock3Plugin Qt6::QMock4Plugin
-)
+ create_test_executable(manual_genex QMock1Plugin QMock2Plugin QMock3Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock4Plugin>
+ )
-create_test_executable(manual_genex QMock1Plugin QMock2Plugin QMock3Plugin)
-qt_import_plugins(manual_genex
- INCLUDE $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock4Plugin>
-)
+ create_test_executable(blacklist QMock1Plugin ${import_mode})
+ qt_import_plugins(${target}
+ EXCLUDE Qt6::QMock2Plugin Qt6::QMock3Plugin
+ )
-create_test_executable(blacklist QMock1Plugin)
-qt_import_plugins(blacklist
- EXCLUDE Qt6::QMock2Plugin Qt6::QMock3Plugin
-)
+ create_test_executable(blacklist_genex QMock1Plugin ${import_mode})
+ qt_import_plugins(${target}
+ EXCLUDE $<1:Qt6::QMock2Plugin> $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock1Plugin>
+ )
-create_test_executable(blacklist_genex QMock1Plugin)
-qt_import_plugins(blacklist_genex
- EXCLUDE $<1:Qt6::QMock2Plugin> $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock1Plugin>
-)
+ create_test_executable(override QMock3Plugin QMock4Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE_BY_TYPE mockplugin Qt6::QMock3Plugin Qt6::QMock4Plugin
+ )
-create_test_executable(override QMock3Plugin QMock4Plugin)
-qt_import_plugins(override
- INCLUDE_BY_TYPE mockplugin Qt6::QMock3Plugin Qt6::QMock4Plugin
-)
+ create_test_executable(override_genex QMock3Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE_BY_TYPE mockplugin $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock4Plugin>
+ )
-create_test_executable(override_genex QMock3Plugin)
-qt_import_plugins(override_genex
- INCLUDE_BY_TYPE mockplugin $<1:Qt6::QMock3Plugin> $<0:Qt6::QMock4Plugin>
-)
-get_target_property(prop_plugs override_genex QT_PLUGINS)
-get_target_property(prop_types override_genex QT_PLUGINS_mockplugin)
+ create_test_executable(override_mix QMock2Plugin QMock3Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE Qt6::QMock2Plugin
+ INCLUDE_BY_TYPE mockplugin Qt6::QMock3Plugin
+ )
+
+ if(NOT WIN32)
+ # Compiling an empty static array fails on Windows.
+ create_test_executable(none ${import_mode})
+ qt_import_plugins(${target}
+ EXCLUDE_BY_TYPE mockplugin
+ )
+ endif()
+
+ create_test_executable(none_mix QMock3Plugin QMock4Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE Qt6::QMock3Plugin Qt6::QMock4Plugin
+ EXCLUDE_BY_TYPE mockplugin
+ )
+
+ # QMock5Plugin links against the Qt::MockPlugins3 module, which provides the default plugin
+ # QMock6Plugin which is why it is pulled in.
+ create_test_executable(recursive QMock5Plugin QMock6Plugin ${import_mode})
+ qt_import_plugins(${target}
+ INCLUDE_BY_TYPE mockplugin Qt6::QMock5Plugin
+ )
+endforeach()
-create_test_executable(override_mix QMock2Plugin QMock3Plugin)
-qt_import_plugins(override_mix
- INCLUDE Qt6::QMock2Plugin
- INCLUDE_BY_TYPE mockplugin Qt6::QMock3Plugin
-)
+# No call to qt_import_plugins() in finalizer mode means nothing will be linked.
if(NOT WIN32)
# Compiling an empty static array fails on Windows.
- create_test_executable(none)
- qt_import_plugins(none
- EXCLUDE_BY_TYPE mockplugin
- )
+ create_test_executable(default_finalizer_missing_import_call FINALIZER_MODE)
endif()
-create_test_executable(none_mix QMock3Plugin QMock4Plugin)
-qt_import_plugins(none_mix
- INCLUDE Qt6::QMock3Plugin Qt6::QMock4Plugin
- EXCLUDE_BY_TYPE mockplugin
-)
+# Empty call to qt_import_plugins() in finalizer mode means default plugins are linked.
+create_test_executable(default_finalizer
+ QMock1Plugin QMock2Plugin
+ QMock3Plugin # TODO: Should not be linked based on .pro file, see QTBUG-93501
+ FINALIZER_MODE)
+qt_import_plugins(${target})
-# QMock5Plugin links against the Qt::MockPlugins3 module, which provides the default plugin
-# QMock6Plugin which is why it is pulled in.
-create_test_executable(recursive QMock5Plugin QMock6Plugin)
-qt_import_plugins(recursive
- INCLUDE_BY_TYPE mockplugin Qt6::QMock5Plugin
-)
+# Check that plugin importing with manual finalization works.
+create_test_executable(default_qt_add_executable_manually_finalized
+ QMock1Plugin QMock2Plugin
+ QMock3Plugin # TODO: Should not be linked based on .pro file, see QTBUG-93501
+ FINALIZER_MODE QT_WRAPPER
+ ADD_EXECUTABLE_ARGS MANUAL_FINALIZATION)
+
+qt_finalize_executable(${target})
+
+# Check that plugin importing with automatic finalization works when the CMake version is high
+# enough.
+if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19)
+ create_test_executable(default_qt_add_executable_auto_finalized
+ QMock1Plugin QMock2Plugin
+ QMock3Plugin # TODO: Should not be linked based on .pro file, see QTBUG-93501
+ FINALIZER_MODE QT_WRAPPER)
+endif()