diff --git a/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp index d49ba9f4751..fa3d444e80c 100644 --- a/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp +++ b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp @@ -24,6 +24,7 @@ private Q_SLOTS: void converting_Microphone() const { return converting_impl(); } void converting_Bluetooth() const { return converting_impl(); } + void conversionMaintainsState() const; private: template void converting_impl() const; @@ -61,5 +62,75 @@ void tst_QPermission::converting_impl() const } } +void tst_QPermission::conversionMaintainsState() const +{ + DummyPermission dummy{42}, dummy_default; + QCOMPARE_NE(dummy.state, dummy_default.state); + + QLocationPermission loc, loc_default; + QCOMPARE_EQ(loc_default.accuracy(), QLocationPermission::Accuracy::Approximate); + QCOMPARE_EQ(loc_default.availability(), QLocationPermission::Availability::WhenInUse); + + loc.setAccuracy(QLocationPermission::Accuracy::Precise); + loc.setAvailability(QLocationPermission::Availability::Always); + + QCOMPARE_EQ(loc.accuracy(), QLocationPermission::Accuracy::Precise); + QCOMPARE_EQ(loc.availability(), QLocationPermission::Availability::Always); + + QCalendarPermission cal, cal_default; + QCOMPARE_EQ(cal_default.isReadWrite(), false); + + cal.setReadWrite(true); + + QCOMPARE_EQ(cal.isReadWrite(), true); + + QContactsPermission con, con_default; + QCOMPARE_EQ(con_default.isReadWrite(), false); + + con.setReadWrite(true); + + QCOMPARE_EQ(con.isReadWrite(), true); + + // + // QCameraPermission, QMicrophonePermission, QBluetoothPermission don't have + // state at the time of writing + // + + QPermission p; // maintain state between the blocks below to test reset behavior + + { + p = dummy; + auto r = p.data(); + QCOMPARE_EQ(r.state, dummy.state); + // check mismatched returns default-constructed value: + QCOMPARE_EQ(p.data().isReadWrite(), cal_default.isReadWrite()); + } + + { + p = loc; + auto r = p.data(); + QCOMPARE_EQ(r.accuracy(), loc.accuracy()); + QCOMPARE_EQ(r.availability(), loc.availability()); + // check mismatched returns default-constructed value: + QCOMPARE_EQ(p.data().state, dummy_default.state); + } + + { + p = con; + auto r = p.data(); + QCOMPARE_EQ(r.isReadWrite(), con.isReadWrite()); + // check mismatched returns default-constructed value: + QCOMPARE_EQ(p.data().accuracy(), loc_default.accuracy()); + } + + { + p = cal; + auto r = p.data(); + QCOMPARE_EQ(r.isReadWrite(), cal.isReadWrite()); + // check mismatched returns default-constructed value: + QCOMPARE_EQ(p.data().isReadWrite(), con_default.isReadWrite()); + } +} + QTEST_APPLESS_MAIN(tst_QPermission) #include "tst_qpermission.moc"