summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp')
-rw-r--r--tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp169
1 files changed, 121 insertions, 48 deletions
diff --git a/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp b/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
index b109666be5..4c4ff72722 100644
--- a/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
+++ b/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qoperatingsystemversion.h>
@@ -35,11 +10,17 @@ class tst_QOperatingSystemVersion : public QObject
private slots:
void construction_data();
void construction();
+ void globals_data();
+ void globals();
void anyOf();
void comparison_data();
void comparison();
+ void comparison2_data();
+ void comparison2();
+
+ void mixedComparison();
};
void tst_QOperatingSystemVersion::construction_data()
@@ -75,6 +56,34 @@ void tst_QOperatingSystemVersion::construction()
QVERIFY(!systemVersion.name().isEmpty());
}
+void tst_QOperatingSystemVersion::globals_data()
+{
+ QTest::addColumn<QOperatingSystemVersion>("osver");
+ QTest::addColumn<QOperatingSystemVersion::OSType>("osType");
+
+#define ADDROW(os) QTest::newRow(#os) << QOperatingSystemVersion(QOperatingSystemVersion::os)
+ // legacy ones (global variables)
+ ADDROW(Windows7) << QOperatingSystemVersion::Windows;
+ ADDROW(Windows10) << QOperatingSystemVersion::Windows;
+ ADDROW(OSXMavericks) << QOperatingSystemVersion::MacOS;
+ ADDROW(MacOSMonterey) << QOperatingSystemVersion::MacOS;
+ ADDROW(AndroidJellyBean) << QOperatingSystemVersion::Android;
+ ADDROW(Android11) << QOperatingSystemVersion::Android;
+
+ // new ones (static constexpr)
+ ADDROW(Windows11) << QOperatingSystemVersion::Windows;
+ ADDROW(Android12) << QOperatingSystemVersion::Android;
+#undef ADDROW
+}
+
+void tst_QOperatingSystemVersion::globals()
+{
+ QFETCH(QOperatingSystemVersion, osver);
+ QFETCH(QOperatingSystemVersion::OSType, osType);
+ QCOMPARE(osver.type(), osType);
+ QCOMPARE_NE(osver.majorVersion(), 0);
+}
+
void tst_QOperatingSystemVersion::anyOf()
{
std::initializer_list<QOperatingSystemVersion::OSType> typesToCheck = {
@@ -105,47 +114,44 @@ void tst_QOperatingSystemVersion::comparison_data()
QTest::addColumn<int>("rhsMinor");
QTest::addColumn<int>("rhsMicro");
- QTest::addColumn<bool>("lessResult");
- QTest::addColumn<bool>("lessEqualResult");
- QTest::addColumn<bool>("moreResult");
- QTest::addColumn<bool>("moreEqualResult");
+ QTest::addColumn<Qt::partial_ordering>("expectedResult");
QTest::addRow("mismatching types") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::MacOS << 1 << 2 << 3
- << false << false << false << false;
+ << Qt::partial_ordering::unordered;
QTest::addRow("equal versions") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << false << true << false << true;
+ << Qt::partial_ordering::equivalent;
QTest::addRow("lhs micro less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs micro less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 1
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("lhs minor less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 3 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs minor less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 1 << 3
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("lhs major less") << QOperatingSystemVersion::OSType::Windows << 0 << 5 << 6
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs major less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 0 << 2 << 3
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("different segmentCount")
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << -1
- << false << true << false << true;
+ << Qt::partial_ordering::equivalent;
}
void tst_QOperatingSystemVersion::comparison()
@@ -164,17 +170,84 @@ void tst_QOperatingSystemVersion::comparison()
const QOperatingSystemVersion rhsSystemInfo(rhsType, rhsMajor, rhsMinor, rhsMicro);
- QFETCH(bool, lessResult);
- QCOMPARE(lhsSystemInfo < rhsSystemInfo, lessResult);
+ QFETCH(const Qt::partial_ordering, expectedResult);
+
+ QCOMPARE_EQ(lhsSystemInfo < rhsSystemInfo, is_lt(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo <= rhsSystemInfo, is_lteq(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo > rhsSystemInfo, is_gt(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo >= rhsSystemInfo, is_gteq(expectedResult));
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(lhsSystemInfo <=> rhsSystemInfo, expectedResult);
+#endif
+}
- QFETCH(bool, lessEqualResult);
- QCOMPARE(lhsSystemInfo <= rhsSystemInfo, lessEqualResult);
+void tst_QOperatingSystemVersion::comparison2_data()
+{
+ QTest::addColumn<QOperatingSystemVersion>("lhs");
+ QTest::addColumn<QOperatingSystemVersion>("rhs");
+ QTest::addColumn<Qt::partial_ordering>("result");
+
+#define ADDROW(os1, os2) \
+ QTest::newRow(#os1 "-vs-" #os2) << QOperatingSystemVersion(QOperatingSystemVersion::os1) \
+ << QOperatingSystemVersion(QOperatingSystemVersion::os2)
+
+ // Cross-OS testing: not comparables.
+ ADDROW(Windows10, MacOSMonterey) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, MacOSMonterey) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSMonterey, Windows10) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSMonterey, Windows11) << Qt::partial_ordering::unordered;
+ ADDROW(Windows10, MacOSVentura) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, MacOSVentura) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSVentura, Windows10) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSVentura, Windows11) << Qt::partial_ordering::unordered;
+ ADDROW(Windows10, Android10) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, Android11) << Qt::partial_ordering::unordered;
+
+ // Same-OS tests. This list does not have to be exhaustive.
+ ADDROW(Windows7, Windows7) << Qt::partial_ordering::equivalent;
+ ADDROW(Windows7, Windows8) << Qt::partial_ordering::less;
+ ADDROW(Windows8, Windows7) << Qt::partial_ordering::greater;
+ ADDROW(Windows8, Windows10) << Qt::partial_ordering::less;
+ ADDROW(Windows10, Windows8) << Qt::partial_ordering::greater;
+ ADDROW(Windows10, Windows10_21H1) << Qt::partial_ordering::less;
+ ADDROW(Windows10_21H1, Windows10) << Qt::partial_ordering::greater;
+ ADDROW(Windows10, Windows11) << Qt::partial_ordering::less;
+ ADDROW(MacOSCatalina, MacOSCatalina) << Qt::partial_ordering::equivalent;
+ ADDROW(MacOSCatalina, MacOSBigSur) << Qt::partial_ordering::less;
+ ADDROW(MacOSBigSur, MacOSCatalina) << Qt::partial_ordering::greater;
+ ADDROW(MacOSMonterey, MacOSVentura) << Qt::partial_ordering::less;
+ ADDROW(MacOSVentura, MacOSVentura) << Qt::partial_ordering::equivalent;
+ ADDROW(MacOSVentura, MacOSMonterey) << Qt::partial_ordering::greater;
+#undef ADDROW
+}
- QFETCH(bool, moreResult);
- QCOMPARE(lhsSystemInfo > rhsSystemInfo, moreResult);
+void tst_QOperatingSystemVersion::comparison2()
+{
+ QFETCH(QOperatingSystemVersion, lhs);
+ QFETCH(QOperatingSystemVersion, rhs);
+ QFETCH(const Qt::partial_ordering, result);
+
+ QEXPECT_FAIL("Windows10-vs-Windows10_21H1", "QTBUG-107907: Unexpected behavior", Abort);
+ QEXPECT_FAIL("Windows10-vs-Windows11", "QTBUG-107907: Unexpected behavior", Abort);
+
+ const bool comparable = (result != Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(lhs < rhs, is_lt(result) && comparable);
+ QEXPECT_FAIL("Windows10_21H1-vs-Windows10", "QTBUG-107907: Unexpected behavior", Abort);
+ QCOMPARE_EQ(lhs <= rhs, is_lteq(result) && comparable);
+ QCOMPARE_EQ(lhs > rhs, is_gt(result) && comparable);
+ QCOMPARE_EQ(lhs >= rhs, is_gteq(result) && comparable);
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(lhs <=> rhs, result);
+#endif
+}
- QFETCH(bool, moreEqualResult);
- QCOMPARE(lhsSystemInfo >= rhsSystemInfo, moreEqualResult);
+void tst_QOperatingSystemVersion::mixedComparison()
+{
+ // ==
+ QVERIFY(QOperatingSystemVersion::Windows10
+ >= QOperatingSystemVersionBase(QOperatingSystemVersionBase::Windows, 10, 0));
+ QVERIFY(QOperatingSystemVersion::Windows10
+ <= QOperatingSystemVersionBase(QOperatingSystemVersionBase::Windows, 10, 0));
}
QTEST_MAIN(tst_QOperatingSystemVersion)