summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp')
-rw-r--r--tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp273
1 files changed, 93 insertions, 180 deletions
diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
index b0dbcb042d..da9dcc9366 100644
--- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
+++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
-** 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) 2016 The Qt Company Ltd.
+// Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/qversionnumber.h>
@@ -73,18 +48,19 @@ private slots:
void assignment();
void fromString_data();
void fromString();
+ void fromString_extra();
void toString_data();
void toString();
void isNull_data();
void isNull();
+ void iterators_data();
+ void iterators();
+ void iteratorsAreDefaultConstructible();
+ void valueInitializedIteratorsCompareEqual();
void serialize_data();
void serialize();
void moveSemantics();
void qtVersion();
- void qTypeRevision_data();
- void qTypeRevision();
- void qTypeRevisionTypes();
- void qTypeRevisionComparison();
};
void tst_QVersionNumber::singleInstanceData()
@@ -268,6 +244,11 @@ void tst_QVersionNumber::constructorExplicit()
QVersionNumber v8 = {4, 5, 6};
QCOMPARE(v7.segments(), v8.segments());
+
+ QVersionNumber v9(4, 5, 6);
+ QVersionNumber vA({4, 5, 6});
+
+ QCOMPARE(v9.segments(), vA.segments());
}
void tst_QVersionNumber::constructorCopy_data()
@@ -511,7 +492,7 @@ void tst_QVersionNumber::fromString()
QFETCH(QVersionNumber, expectedVersion);
QFETCH(int, suffixIndex);
- int index;
+ qsizetype index;
QCOMPARE(QVersionNumber::fromString(constructionString), expectedVersion);
QCOMPARE(QVersionNumber::fromString(constructionString, &index), expectedVersion);
QCOMPARE(index, suffixIndex);
@@ -523,6 +504,46 @@ void tst_QVersionNumber::fromString()
QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1())), expectedVersion);
QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1()), &index), expectedVersion);
QCOMPARE(index, suffixIndex);
+
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_DEPRECATED
+ // check deprecated `int *suffixIndex` overload, too
+ {
+ int i;
+ QCOMPARE(QVersionNumber::fromString(constructionString, &i), expectedVersion);
+ QCOMPARE(i, suffixIndex);
+
+ QCOMPARE(QVersionNumber::fromString(QStringView(constructionString), &i), expectedVersion);
+ QCOMPARE(i, suffixIndex);
+
+ QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1()), &i), expectedVersion);
+ QCOMPARE(i, suffixIndex);
+ }
+ QT_WARNING_POP
+#endif
+}
+
+void tst_QVersionNumber::fromString_extra()
+{
+ // check the overloaded fromString() functions aren't ambiguous
+ // when passing explicit nullptr:
+ {
+ auto v = QVersionNumber::fromString("1.2.3-rc1", nullptr);
+ QCOMPARE(v, QVersionNumber({1, 2, 3}));
+ }
+ {
+ auto v = QVersionNumber::fromString("1.2.3-rc1", 0);
+ QCOMPARE(v, QVersionNumber({1, 2, 3}));
+ }
+
+ // check the UTF16->L1 conversion isn't doing something weird
+ {
+ qsizetype i = -1;
+ auto v = QVersionNumber::fromString(u"1.0ı", &i); // LATIN SMALL LETTER DOTLESS I
+ QCOMPARE(v, QVersionNumber(1, 0));
+ QCOMPARE(i, 3);
+ }
}
void tst_QVersionNumber::toString_data()
@@ -558,6 +579,45 @@ void tst_QVersionNumber::isNull()
QCOMPARE(version.isNull(), isNull);
}
+void tst_QVersionNumber::iterators_data()
+{
+ singleInstanceData();
+}
+
+void tst_QVersionNumber::iterators()
+{
+ QFETCH(const QList<int>, segments);
+ QFETCH(QVersionNumber, expectedVersion);
+
+ QVERIFY(std::equal(expectedVersion.begin(), expectedVersion.end(),
+ segments.begin(), segments.end()));
+ QVERIFY(std::equal(std::as_const(expectedVersion).begin(), std::as_const(expectedVersion).end(),
+ segments.begin(), segments.end()));
+ QVERIFY(std::equal(expectedVersion.cbegin(), expectedVersion.cend(),
+ segments.cbegin(), segments.cend()));
+ QVERIFY(std::equal(expectedVersion.rbegin(), expectedVersion.rend(),
+ segments.rbegin(), segments.rend()));
+ QVERIFY(std::equal(std::as_const(expectedVersion).rbegin(), std::as_const(expectedVersion).rend(),
+ segments.rbegin(), segments.rend()));
+ QVERIFY(std::equal(expectedVersion.crbegin(), expectedVersion.crend(),
+ segments.crbegin(), segments.crend()));
+}
+
+void tst_QVersionNumber::iteratorsAreDefaultConstructible()
+{
+ static_assert(std::is_default_constructible_v<QVersionNumber::const_iterator>);
+ [[maybe_unused]] QVersionNumber::const_iterator ci;
+ [[maybe_unused]] QVersionNumber::const_reverse_iterator cri;
+}
+
+void tst_QVersionNumber::valueInitializedIteratorsCompareEqual()
+{
+ QVersionNumber::const_iterator it = {}, jt = {};
+ QCOMPARE_EQ(it, jt);
+ QVersionNumber::const_reverse_iterator rit = {}, rjt = {};
+ QCOMPARE_EQ(rit, rjt);
+}
+
void tst_QVersionNumber::serialize_data()
{
singleInstanceData();
@@ -649,153 +709,6 @@ void tst_QVersionNumber::qtVersion()
QCOMPARE(v.toString(), QString(qVersion()));
}
-template<typename Integer>
-void compileTestRevisionMajorMinor()
-{
- const Integer major = 8;
- const Integer minor = 4;
-
- const QTypeRevision r2 = QTypeRevision::fromVersion(major, minor);
- QCOMPARE(r2.majorVersion(), 8);
- QCOMPARE(r2.minorVersion(), 4);
-
- const QTypeRevision r3 = QTypeRevision::fromMajorVersion(major);
- QCOMPARE(r3.majorVersion(), 8);
- QVERIFY(!r3.hasMinorVersion());
-
- const QTypeRevision r4 = QTypeRevision::fromMinorVersion(minor);
- QVERIFY(!r4.hasMajorVersion());
- QCOMPARE(r4.minorVersion(), 4);
-}
-
-
-template<typename Integer>
-void compileTestRevision()
-{
- if (std::is_signed<Integer>::value)
- compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Signed>();
- else
- compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Unsigned>();
-
- const Integer value = 0x0510;
- const QTypeRevision r = QTypeRevision::fromEncodedVersion(value);
-
- QCOMPARE(r.majorVersion(), 5);
- QCOMPARE(r.minorVersion(), 16);
- QCOMPARE(r.toEncodedVersion<Integer>(), value);
-
- compileTestRevisionMajorMinor<Integer>();
-}
-
-template<>
-void compileTestRevision<qint16>()
-{
- compileTestRevisionMajorMinor<quint8>();
-}
-
-template<>
-void compileTestRevision<quint8>()
-{
- compileTestRevisionMajorMinor<quint8>();
-}
-
-template<>
-void compileTestRevision<qint8>()
-{
- compileTestRevisionMajorMinor<qint8>();
-}
-
-void tst_QVersionNumber::qTypeRevision_data()
-{
- QTest::addColumn<QTypeRevision>("revision");
- QTest::addColumn<bool>("valid");
- QTest::addColumn<int>("major");
- QTest::addColumn<int>("minor");
-
- QTest::addRow("Qt revision") << QTypeRevision::fromVersion(QT_VERSION_MAJOR, QT_VERSION_MINOR)
- << true << QT_VERSION_MAJOR << QT_VERSION_MINOR;
- QTest::addRow("invalid") << QTypeRevision() << false << 0xff << 0xff;
- QTest::addRow("major") << QTypeRevision::fromMajorVersion(6) << true << 6 << 0xff;
- QTest::addRow("minor") << QTypeRevision::fromMinorVersion(15) << true << 0xff << 15;
- QTest::addRow("zero") << QTypeRevision::fromVersion(0, 0) << true << 0 << 0;
-
- // We're intentionally not testing negative numbers.
- // There are asserts against negative numbers in QTypeRevision.
- // You must not pass them as major or minor versions, or values.
-}
-
-void tst_QVersionNumber::qTypeRevision()
-{
- const QTypeRevision other = QTypeRevision::fromVersion(127, 128);
-
- QFETCH(QTypeRevision, revision);
-
- QFETCH(bool, valid);
- QFETCH(int, major);
- QFETCH(int, minor);
-
- QCOMPARE(revision.isValid(), valid);
- QCOMPARE(revision.majorVersion(), major);
- QCOMPARE(revision.minorVersion(), minor);
-
- QCOMPARE(revision.hasMajorVersion(), QTypeRevision::isValidSegment(major));
- QCOMPARE(revision.hasMinorVersion(), QTypeRevision::isValidSegment(minor));
-
- const QTypeRevision copy = QTypeRevision::fromEncodedVersion(revision.toEncodedVersion<int>());
- QCOMPARE(copy, revision);
-
- QVERIFY(revision != other);
- QVERIFY(copy != other);
-}
-
-void tst_QVersionNumber::qTypeRevisionTypes()
-{
- compileTestRevision<quint64>();
- compileTestRevision<qint64>();
-
- QVERIFY(!QTypeRevision::isValidSegment(0xff));
- QVERIFY(!QTypeRevision::isValidSegment(-1));
-
- const QTypeRevision maxRevision = QTypeRevision::fromVersion(254, 254);
- QVERIFY(maxRevision.hasMajorVersion());
- QVERIFY(maxRevision.hasMinorVersion());
-}
-
-void tst_QVersionNumber::qTypeRevisionComparison()
-{
- const QTypeRevision revisions[] = {
- QTypeRevision::zero(),
- QTypeRevision::fromMajorVersion(0),
- QTypeRevision::fromVersion(0, 1),
- QTypeRevision::fromVersion(0, 20),
- QTypeRevision::fromMinorVersion(0),
- QTypeRevision(),
- QTypeRevision::fromMinorVersion(1),
- QTypeRevision::fromMinorVersion(20),
- QTypeRevision::fromVersion(1, 0),
- QTypeRevision::fromMajorVersion(1),
- QTypeRevision::fromVersion(1, 1),
- QTypeRevision::fromVersion(1, 20),
- QTypeRevision::fromVersion(20, 0),
- QTypeRevision::fromMajorVersion(20),
- QTypeRevision::fromVersion(20, 1),
- QTypeRevision::fromVersion(20, 20),
- };
-
- const int length = sizeof(revisions) / sizeof(QTypeRevision);
-
- for (int i = 0; i < length; ++i) {
- for (int j = 0; j < length; ++j) {
- QCOMPARE(revisions[i] == revisions[j], i == j);
- QCOMPARE(revisions[i] != revisions[j], i != j);
- QCOMPARE(revisions[i] < revisions[j], i < j);
- QCOMPARE(revisions[i] > revisions[j], i > j);
- QCOMPARE(revisions[i] <= revisions[j], i <= j);
- QCOMPARE(revisions[i] >= revisions[j], i >= j);
- }
- }
-}
-
QTEST_APPLESS_MAIN(tst_QVersionNumber)
#include "tst_qversionnumber.moc"