From a478d730f896e89fce83483c8b056b47ae973736 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 11 Jan 2023 15:29:14 +0100 Subject: [PATCH] Add minimal QPermission auto-test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To be extended as neeeded. Pick-to: 6.5 Change-Id: I57d2f55f67de073fe3e4916b7ba655342cf661dc Reviewed-by: Tor Arne Vestbø Reviewed-by: Qt CI Bot --- tests/auto/corelib/kernel/CMakeLists.txt | 3 + .../corelib/kernel/qpermission/.gitignore | 1 + .../corelib/kernel/qpermission/CMakeLists.txt | 13 ++++ .../kernel/qpermission/tst_qpermission.cpp | 65 +++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 tests/auto/corelib/kernel/qpermission/.gitignore create mode 100644 tests/auto/corelib/kernel/qpermission/CMakeLists.txt create mode 100644 tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp diff --git a/tests/auto/corelib/kernel/CMakeLists.txt b/tests/auto/corelib/kernel/CMakeLists.txt index d76c6d4881c..f68a12869c3 100644 --- a/tests/auto/corelib/kernel/CMakeLists.txt +++ b/tests/auto/corelib/kernel/CMakeLists.txt @@ -47,6 +47,9 @@ if(WIN32) add_subdirectory(qwineventnotifier) add_subdirectory(qwinregistrykey) endif() +if(QT_FEATURE_permissions) + add_subdirectory(qpermission) +endif() if(QT_FEATURE_private_tests) add_subdirectory(qproperty) endif() diff --git a/tests/auto/corelib/kernel/qpermission/.gitignore b/tests/auto/corelib/kernel/qpermission/.gitignore new file mode 100644 index 00000000000..56a6bf07959 --- /dev/null +++ b/tests/auto/corelib/kernel/qpermission/.gitignore @@ -0,0 +1 @@ +tst_qpermission diff --git a/tests/auto/corelib/kernel/qpermission/CMakeLists.txt b/tests/auto/corelib/kernel/qpermission/CMakeLists.txt new file mode 100644 index 00000000000..918abc66284 --- /dev/null +++ b/tests/auto/corelib/kernel/qpermission/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if (NOT QT_FEATURE_permissions) + return() +endif() + +qt_internal_add_test(tst_qpermission + SOURCES + tst_qpermission.cpp + LIBRARIES + Qt::Core +) diff --git a/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp new file mode 100644 index 00000000000..d49ba9f4751 --- /dev/null +++ b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp @@ -0,0 +1,65 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include + +#include + +struct DummyPermission // a minimal QPermission-compatible type +{ + using QtPermissionHelper = void; + int state = 0; +}; +Q_DECLARE_METATYPE(DummyPermission) + +class tst_QPermission : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void converting_Dummy() const { return converting_impl(); } + void converting_Location() const { return converting_impl(); } + void converting_Calendar() const { return converting_impl(); } + void converting_Contacts() const { return converting_impl(); } + void converting_Camera() const { return converting_impl(); } + void converting_Microphone() const { return converting_impl(); } + void converting_Bluetooth() const { return converting_impl(); } + +private: + template + void converting_impl() const; +}; + +template +void tst_QPermission::converting_impl() const +{ + T concrete; + const T cconcrete = concrete; + const auto metaType = QMetaType::fromType(); + + // construction is implicit: + // from rvalue: + { + QPermission p = T(); + QCOMPARE_EQ(p.type(), metaType); + } + // from mutable lvalue: + { + QPermission p = concrete; + QCOMPARE_EQ(p.type(), metaType); + } + // from const lvalue: + { + QPermission p = cconcrete; + QCOMPARE_EQ(p.type(), metaType); + } + + // data<>() compiles: + { + const QPermission p = concrete; + [[maybe_unused]] auto r = p.data(); + static_assert(std::is_same_v); + } +} + +QTEST_APPLESS_MAIN(tst_QPermission) +#include "tst_qpermission.moc"