Define macOS QOperatingSystemVersion constants using only major version

Otherwise comparisons of current > QOperatingSystemVersion::MacOSSonoma
will trigger for 14.1 and above, instead of 15 and up. The expectation
is that the constant represents the major version.

[ChangeLog][macOS] QOperatingSystemVersion constants for macOS 11
and up are now represented with their major version only, and minor
and patch versions unspecified, as documented.

Task-number: QTBUG-107907
Pick-to: 6.10 6.9 6.8 6.5
Change-Id: I62dbac54f6b37b5797459c30c326706341b403a9
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Tor Arne Vestbø 2025-07-28 16:55:19 +02:00
parent 4e246d74fe
commit 57ada89c04
3 changed files with 67 additions and 8 deletions

View File

@ -547,7 +547,7 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSCatalina =
\since 6.0
*/
const QOperatingSystemVersion QOperatingSystemVersion::MacOSBigSur =
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 11, 0);
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 11);
/*!
\variable QOperatingSystemVersion::MacOSMonterey
@ -555,7 +555,7 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSBigSur =
\since 6.3
*/
const QOperatingSystemVersion QOperatingSystemVersion::MacOSMonterey =
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 12, 0);
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 12);
/*!
\variable QOperatingSystemVersion::MacOSVentura

View File

@ -142,9 +142,9 @@ public:
#endif
// ### Qt7: Regroup with the rest below
static constexpr QOperatingSystemVersionBase MacOSSonoma { QOperatingSystemVersionBase::MacOS, 14, 0 };
static constexpr QOperatingSystemVersionBase MacOSSequoia { QOperatingSystemVersionBase::MacOS, 15, 0 };
static constexpr QOperatingSystemVersionBase MacOSTahoe { QOperatingSystemVersionBase::MacOS, 26, 0 };
static constexpr QOperatingSystemVersionBase MacOSSonoma { QOperatingSystemVersionBase::MacOS, 14 };
static constexpr QOperatingSystemVersionBase MacOSSequoia { QOperatingSystemVersionBase::MacOS, 15 };
static constexpr QOperatingSystemVersionBase MacOSTahoe { QOperatingSystemVersionBase::MacOS, 26 };
static constexpr QOperatingSystemVersionBase Android14 { QOperatingSystemVersionBase::Android, 14, 0 };
static constexpr QOperatingSystemVersionBase Windows11_23H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22631 };
static constexpr QOperatingSystemVersionBase Windows11_24H2 { QOperatingSystemVersionBase::Windows, 10, 0, 26100 };
@ -216,8 +216,8 @@ public:
static constexpr QOperatingSystemVersionBase MacOSHighSierra { QOperatingSystemVersionBase::MacOS, 10, 13 };
static constexpr QOperatingSystemVersionBase MacOSMojave { QOperatingSystemVersionBase::MacOS, 10, 14 };
static constexpr QOperatingSystemVersionBase MacOSCatalina { QOperatingSystemVersionBase::MacOS, 10, 15 };
static constexpr QOperatingSystemVersionBase MacOSBigSur = { QOperatingSystemVersionBase::MacOS, 11, 0 };
static constexpr QOperatingSystemVersionBase MacOSMonterey = { QOperatingSystemVersionBase::MacOS, 12, 0 };
static constexpr QOperatingSystemVersionBase MacOSBigSur = { QOperatingSystemVersionBase::MacOS, 11 };
static constexpr QOperatingSystemVersionBase MacOSMonterey = { QOperatingSystemVersionBase::MacOS, 12 };
static constexpr QOperatingSystemVersionBase AndroidJellyBean { QOperatingSystemVersionBase::Android, 4, 1 };
static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR1 { QOperatingSystemVersionBase::Android, 4, 2 };
@ -251,7 +251,7 @@ public:
static constexpr QOperatingSystemVersionBase Android12L { QOperatingSystemVersionBase::Android, 12, 0 };
static constexpr QOperatingSystemVersionBase Android13 { QOperatingSystemVersionBase::Android, 13, 0 };
static constexpr QOperatingSystemVersionBase MacOSVentura { QOperatingSystemVersionBase::MacOS, 13, 0 };
static constexpr QOperatingSystemVersionBase MacOSVentura { QOperatingSystemVersionBase::MacOS, 13 };
constexpr QOperatingSystemVersion(const QOperatingSystemVersionBase &osversion)
: QOperatingSystemVersionUnexported(osversion) {}

View File

@ -21,6 +21,9 @@ private slots:
void comparison2();
void mixedComparison();
void constantsSemantics_data();
void constantsSemantics();
};
void tst_QOperatingSystemVersion::construction_data()
@ -250,5 +253,61 @@ void tst_QOperatingSystemVersion::mixedComparison()
<= QOperatingSystemVersionBase(QOperatingSystemVersionBase::Windows, 10, 0));
}
void tst_QOperatingSystemVersion::constantsSemantics_data()
{
QTest::addColumn<QOperatingSystemVersionBase>("referenceVersion");
QTest::addColumn<int>("segmentCount");
// OSX/macOS 10.x
QTest::newRow("Mavericks") << QOperatingSystemVersionBase(QOperatingSystemVersion::OSXMavericks) << 2;
QTest::newRow("Yosemite") << QOperatingSystemVersionBase(QOperatingSystemVersion::OSXYosemite) << 2;
QTest::newRow("El Capitan") << QOperatingSystemVersionBase(QOperatingSystemVersion::OSXElCapitan) << 2;
QTest::newRow("Sierra") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSSierra) << 2;
QTest::newRow("High Sierra") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSHighSierra) << 2;
QTest::newRow("Mojave") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSMojave) << 2;
QTest::newRow("Catalina") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSCatalina) << 2;
// macOS 11+
QTest::newRow("Big Sur") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSBigSur) << 1;
QTest::newRow("Monterey") << QOperatingSystemVersionBase(QOperatingSystemVersion::MacOSMonterey) << 1;
QTest::newRow("Ventura") << QOperatingSystemVersion::MacOSVentura << 1;
QTest::newRow("Sonoma") << QOperatingSystemVersion::MacOSSonoma << 1;
QTest::newRow("Sequoia") << QOperatingSystemVersion::MacOSSequoia << 1;
QTest::newRow("Tahoe") << QOperatingSystemVersion::MacOSTahoe << 1;
}
void tst_QOperatingSystemVersion::constantsSemantics()
{
QFETCH(QOperatingSystemVersionBase, referenceVersion);
QFETCH(int, segmentCount);
QCOMPARE(referenceVersion.segmentCount(), segmentCount);
auto adjustedVersion = [&](QOperatingSystemVersionBase referenceVersion, int segment, int adjustment) {
auto adjustedSegments = referenceVersion.version().segments();
adjustedSegments[segment] += adjustment;
return QOperatingSystemVersionBase(referenceVersion.type(), adjustedSegments.at(0),
qMax(adjustedSegments.at(1), 0), qMax(adjustedSegments.at(2), 0));
};
// Increases or decreases of the significant version part should contribute to
// a smaller or larger version
for (int segment = 0; segment < referenceVersion.segmentCount(); ++segment) {
auto smallerVersion = adjustedVersion(referenceVersion, segment, -1);
QCOMPARE_LT(smallerVersion, referenceVersion);
auto largerVersion = adjustedVersion(referenceVersion, segment, 1);
QCOMPARE_GT(largerVersion, referenceVersion);
}
// The non-significant parts of a version should never contribute to being
// larger or smaller than a reference version's significant segments.
for (int segment = referenceVersion.segmentCount(); segment < 3; ++segment) {
auto largerInsignificantVersion = adjustedVersion(referenceVersion, segment, 1);
QVERIFY(!(largerInsignificantVersion > referenceVersion));
QVERIFY(!(largerInsignificantVersion < referenceVersion));
}
}
QTEST_MAIN(tst_QOperatingSystemVersion)
#include "tst_qoperatingsystemversion.moc"