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"