From ed080c64ae21d22115d16780a5903d7cc4fd1546 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 21 Jan 2020 13:23:34 +0100 Subject: Core: Add a QTypeRevision class QTypeRevision is needed to encode the value of the new two-argument Q_REVISION(major, minor) macros. Those, in turn are necessary because the minor version resets to 0, and we need to take the major version into account when stating revisions for Qt classes. Task-number: QTBUG-71278 Change-Id: I63eff6eab7d6e4f8f32b359a216767c98947a106 Reviewed-by: Fabian Kosmale Reviewed-by: Paul Wicking Reviewed-by: Simon Hausmann Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira Reviewed-by: Shawn Rutledge --- .../tools/qversionnumber/tst_qversionnumber.cpp | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) (limited to 'tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp') diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp index 7c4d1071ce..63a6618dab 100644 --- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp +++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp @@ -81,6 +81,9 @@ private slots: void serialize(); void moveSemantics(); void qtVersion(); + void qPropertyRevision_data(); + void qPropertyRevision(); + void qPropertyRevisionTypes(); }; void tst_QVersionNumber::singleInstanceData() @@ -645,6 +648,118 @@ void tst_QVersionNumber::qtVersion() QCOMPARE(v.toString(), QString(qVersion())); } +template +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 +void compileTestRevision() +{ + if (std::is_signed::value) + compileTestRevision::Signed>(); + else + compileTestRevision::Unsigned>(); + + const Integer value = 0x0510; + const QTypeRevision r = QTypeRevision::fromEncodedVersion(value); + + QCOMPARE(r.majorVersion(), 5); + QCOMPARE(r.minorVersion(), 16); + QCOMPARE(r.toEncodedVersion(), value); + + compileTestRevisionMajorMinor(); +} + +template<> +void compileTestRevision() +{ + compileTestRevisionMajorMinor(); +} + +template<> +void compileTestRevision() +{ + compileTestRevisionMajorMinor(); +} + +template<> +void compileTestRevision() +{ + compileTestRevisionMajorMinor(); +} + +void tst_QVersionNumber::qPropertyRevision_data() +{ + QTest::addColumn("revision"); + QTest::addColumn("valid"); + QTest::addColumn("major"); + QTest::addColumn("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::qPropertyRevision() +{ + 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()); + QCOMPARE(copy, revision); + + QVERIFY(revision != other); + QVERIFY(copy != other); +} + +void tst_QVersionNumber::qPropertyRevisionTypes() +{ + compileTestRevision(); + compileTestRevision(); + + QVERIFY(!QTypeRevision::isValidSegment(0xff)); + QVERIFY(!QTypeRevision::isValidSegment(-1)); + + const QTypeRevision maxRevision = QTypeRevision::fromVersion(254, 254); + QVERIFY(maxRevision.hasMajorVersion()); + QVERIFY(maxRevision.hasMinorVersion()); +} + QTEST_APPLESS_MAIN(tst_QVersionNumber) #include "tst_qversionnumber.moc" -- cgit v1.2.3