summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/bttestui/CMakeLists.txt8
-rw-r--r--tests/bttestui/main.cpp23
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/bttestui/CMakeLists.txt b/tests/bttestui/CMakeLists.txt
index 1abe3bef..4daee3df 100644
--- a/tests/bttestui/CMakeLists.txt
+++ b/tests/bttestui/CMakeLists.txt
@@ -57,6 +57,14 @@ else()
FILES
${bttest_resource_files}
)
+
+ if(MACOS)
+ # Explicitly link against the static permission plugin because tests
+ # currently don't have finalizers run for them except for iOS.
+ # TODO: Remove this when qtbase automatically runs finalizers for tests: QTBUG-112212
+ target_link_libraries(bttestui PRIVATE Qt6::QDarwinBluetoothPermissionPlugin)
+ endif()
+
endif()
set_target_properties(bttestui PROPERTIES
diff --git a/tests/bttestui/main.cpp b/tests/bttestui/main.cpp
index a4d8b942..8a087815 100644
--- a/tests/bttestui/main.cpp
+++ b/tests/bttestui/main.cpp
@@ -8,12 +8,35 @@
#include <QtCore/QLoggingCategory>
+#if QT_CONFIG(permissions)
+#include <QtCore/qpermissions.h>
+#endif
+
#include "btlocaldevice.h"
int main(int argc, char *argv[])
{
QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
QGuiApplication app(argc, argv);
+
+#if QT_CONFIG(permissions)
+ // Check Bluetooth permission and request it if the app doesn't have it
+ auto permissionStatus = app.checkPermission(QBluetoothPermission{});
+ if (permissionStatus == Qt::PermissionStatus::Undetermined) {
+ app.requestPermission(QBluetoothPermission{},
+ [&permissionStatus](const QPermission &permission) {
+ qApp->exit(); // Exit the permission request processing started below
+ permissionStatus = permission.status();
+ });
+ // Process permission request
+ app.exec();
+ }
+ if (permissionStatus == Qt::PermissionStatus::Denied) {
+ qWarning("Bluetooth permission denied, exiting");
+ return -1;
+ }
+#endif
+
qmlRegisterType<BtLocalDevice>("Local", 6, 5, "BluetoothDevice");
QQuickView view;