diff --git a/src/helper.cpp b/src/helper.cpp index cbaeb0f90baeabba932a3d8475212162247e119f..928100ba9fda3745d5bf6c3a3181f32b00884703 100644 --- a/src/helper.cpp +++ b/src/helper.cpp @@ -200,42 +200,50 @@ bool lessThanVersion(const QString &q1, const QString &q2) { QStringList version1 = q1.split(QLatin1Char('.')); QStringList version2 = q2.split(QLatin1Char('.')); - std::vector<int> version1_digits; - std::vector<int> version2_digits; + std::vector<int> version1_parts; + std::vector<int> version2_parts; + constexpr int amountOfVersionParts = 3; - for(int i = 0; i < version1.length(); ++i) + for(const auto &versionPart : version1) { - if(version1[i].length() == 1 && version1[i][0].isDigit()) + bool ok; + int part = versionPart.toInt(&ok, 10); + if(ok) { - version1_digits.push_back(version1[i].toInt()); + version1_parts.push_back(part); } else { - throw std::invalid_argument("Invalid Input String!"); + throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!"); } } - for(int i = 0; i < version2.length(); ++i) + for(const auto &versionPart : version2) { - if(version2[i].length() == 1 && version2[i][0].isDigit()) + bool ok; + int part = versionPart.toInt(&ok, 10); + if(ok) { - version2_digits.push_back(version2[i].toInt()); + version2_parts.push_back(part); } else { - throw std::invalid_argument("Invalid Input String!"); + throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!"); } } - int length = std::min(version1_digits.size(), version2_digits.size()); - for(int i = 0; i < length; ++i) + if(!(version1_parts.size() == amountOfVersionParts && version2_parts.size() == amountOfVersionParts)) { - if(version1_digits[i] > version2_digits[i]) + throw std::invalid_argument("Invalid PeTrack version string: Amount of version parts is wrong!"); + } + for(int i = 0; i < amountOfVersionParts; ++i) + { + if(version1_parts[i] > version2_parts[i]) { return true; } - else if(version1_digits[i] < version2_digits[i]) + else if(version1_parts[i] < version2_parts[i]) { return false; } } - return version1_digits.size() > version2_digits.size(); + return false; } diff --git a/tests/unit_test/tst_helper.cpp b/tests/unit_test/tst_helper.cpp index 83d2d6afafb0046fb9ad668b70327ca373b0d189..2158c827cf00000f4c250dea5cbfadf6a96420ef 100644 --- a/tests/unit_test/tst_helper.cpp +++ b/tests/unit_test/tst_helper.cpp @@ -28,16 +28,17 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]") CHECK(lessThanVersion(QString("0.9.1"), QString("0.9.0"))); CHECK(lessThanVersion(QString("0.9.0"), QString("0.8.0"))); CHECK(lessThanVersion(QString("1.8.0"), QString("0.9.0"))); - CHECK(lessThanVersion(QString("0.9.1.1"), QString("0.9.0"))); - CHECK(lessThanVersion(QString("0.9.0.0"), QString("0.9.0"))); + CHECK(lessThanVersion(QString("0.9.15"), QString("0.9.3"))); + CHECK(lessThanVersion(QString("0.130.1"), QString("0.9.3"))); + CHECK(lessThanVersion(QString("15.9.16"), QString("0.9.3"))); CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1"))); CHECK_FALSE(lessThanVersion(QString("0.8.0"), QString("0.9.0"))); CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("1.9.0"))); - CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1.1"))); - CHECK_FALSE(lessThanVersion(QString("0.9.0.1"), QString("0.9.1"))); - CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0.0"))); CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0"))); + CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.9.13"))); + CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.967.13"))); + CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("19.9.13"))); CHECK_THROWS(lessThanVersion(QString("0.8.k"), QString("0.9.0"))); CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("0.9.k"))); @@ -46,4 +47,7 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]") CHECK_THROWS(lessThanVersion(QString("k.8.9"), QString("0.9.0"))); CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0"))); CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0"))); + CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.15.0"))); + CHECK_THROWS(lessThanVersion(QString("0.8k.9"), QString("0.15.0"))); + CHECK_THROWS(lessThanVersion(QString("0.9.0.1"), QString("0.9.1"))); }