2021-01-18 07:28:54 +00:00
|
|
|
/* Copyright 2013-2021 MultiMC Contributors
|
2014-09-06 17:16:56 +01:00
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <QTest>
|
|
|
|
|
2015-10-05 00:47:27 +01:00
|
|
|
#include <Version.h>
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
class VersionTest : public QObject {
|
2014-09-06 17:16:56 +01:00
|
|
|
Q_OBJECT
|
2023-01-20 00:18:39 +00:00
|
|
|
|
2023-07-04 04:04:24 +01:00
|
|
|
QStringList m_flex_test_names = {};
|
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
void addDataColumns()
|
2014-09-06 17:16:56 +01:00
|
|
|
{
|
|
|
|
QTest::addColumn<QString>("first");
|
|
|
|
QTest::addColumn<QString>("second");
|
|
|
|
QTest::addColumn<bool>("lessThan");
|
|
|
|
QTest::addColumn<bool>("equal");
|
2023-01-20 00:18:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void setupVersions()
|
|
|
|
{
|
|
|
|
addDataColumns();
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2023-08-02 17:35:35 +01:00
|
|
|
QTest::newRow("equal, explicit") << "1.2.0"
|
|
|
|
<< "1.2.0" << false << true;
|
|
|
|
QTest::newRow("equal, two-digit") << "1.42"
|
|
|
|
<< "1.42" << false << true;
|
|
|
|
|
|
|
|
QTest::newRow("lessThan, explicit 1") << "1.2.0"
|
|
|
|
<< "1.2.1" << true << false;
|
|
|
|
QTest::newRow("lessThan, explicit 2") << "1.2.0"
|
|
|
|
<< "1.3.0" << true << false;
|
|
|
|
QTest::newRow("lessThan, explicit 3") << "1.2.0"
|
|
|
|
<< "2.2.0" << true << false;
|
|
|
|
QTest::newRow("lessThan, implicit 1") << "1.2"
|
|
|
|
<< "1.2.0" << true << false;
|
|
|
|
QTest::newRow("lessThan, implicit 2") << "1.2"
|
|
|
|
<< "1.2.1" << true << false;
|
|
|
|
QTest::newRow("lessThan, implicit 3") << "1.2"
|
|
|
|
<< "1.3.0" << true << false;
|
|
|
|
QTest::newRow("lessThan, implicit 4") << "1.2"
|
|
|
|
<< "2.2.0" << true << false;
|
|
|
|
QTest::newRow("lessThan, two-digit") << "1.41"
|
|
|
|
<< "1.42" << true << false;
|
|
|
|
|
|
|
|
QTest::newRow("greaterThan, explicit 1") << "1.2.1"
|
|
|
|
<< "1.2.0" << false << false;
|
|
|
|
QTest::newRow("greaterThan, explicit 2") << "1.3.0"
|
|
|
|
<< "1.2.0" << false << false;
|
|
|
|
QTest::newRow("greaterThan, explicit 3") << "2.2.0"
|
|
|
|
<< "1.2.0" << false << false;
|
|
|
|
QTest::newRow("greaterThan, implicit 1") << "1.2.0"
|
|
|
|
<< "1.2" << false << false;
|
|
|
|
QTest::newRow("greaterThan, implicit 2") << "1.2.1"
|
|
|
|
<< "1.2" << false << false;
|
|
|
|
QTest::newRow("greaterThan, implicit 3") << "1.3.0"
|
|
|
|
<< "1.2" << false << false;
|
|
|
|
QTest::newRow("greaterThan, implicit 4") << "2.2.0"
|
|
|
|
<< "1.2" << false << false;
|
|
|
|
QTest::newRow("greaterThan, two-digit") << "1.42"
|
|
|
|
<< "1.41" << false << false;
|
2014-09-06 17:16:56 +01:00
|
|
|
}
|
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
private slots:
|
2023-08-02 17:35:35 +01:00
|
|
|
void test_versionCompare_data() { setupVersions(); }
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
void test_versionCompare()
|
2014-09-06 17:16:56 +01:00
|
|
|
{
|
2023-01-20 00:18:39 +00:00
|
|
|
QFETCH(QString, first);
|
|
|
|
QFETCH(QString, second);
|
|
|
|
QFETCH(bool, lessThan);
|
|
|
|
QFETCH(bool, equal);
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
const auto v1 = Version(first);
|
|
|
|
const auto v2 = Version(second);
|
|
|
|
|
|
|
|
qDebug() << v1 << "vs" << v2;
|
|
|
|
|
|
|
|
QCOMPARE(v1 < v2, lessThan);
|
|
|
|
QCOMPARE(v1 > v2, !lessThan && !equal);
|
|
|
|
QCOMPARE(v1 == v2, equal);
|
2014-09-06 17:16:56 +01:00
|
|
|
}
|
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
void test_flexVerTestVector_data()
|
2014-09-06 17:16:56 +01:00
|
|
|
{
|
2023-01-20 00:18:39 +00:00
|
|
|
addDataColumns();
|
|
|
|
|
|
|
|
QDir test_vector_dir(QFINDTESTDATA("testdata/Version"));
|
|
|
|
|
2023-08-02 17:35:35 +01:00
|
|
|
QFile vector_file{ test_vector_dir.absoluteFilePath("test_vectors.txt") };
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
vector_file.open(QFile::OpenModeFlag::ReadOnly);
|
|
|
|
|
|
|
|
int test_number = 0;
|
2023-08-02 17:35:35 +01:00
|
|
|
const QString test_name_template{ "FlexVer test #%1 (%2)" };
|
2023-01-20 00:18:39 +00:00
|
|
|
for (auto line = vector_file.readLine(); !vector_file.atEnd(); line = vector_file.readLine()) {
|
|
|
|
line = line.simplified();
|
|
|
|
if (line.startsWith('#') || line.isEmpty())
|
|
|
|
continue;
|
|
|
|
|
|
|
|
test_number += 1;
|
|
|
|
|
|
|
|
auto split_line = line.split('<');
|
|
|
|
if (split_line.size() == 2) {
|
2023-08-02 17:35:35 +01:00
|
|
|
QString first{ split_line.first().simplified() };
|
|
|
|
QString second{ split_line.last().simplified() };
|
2023-01-20 00:18:39 +00:00
|
|
|
|
2023-07-04 04:04:24 +01:00
|
|
|
auto new_test_name = test_name_template.arg(QString::number(test_number), "lessThan");
|
|
|
|
m_flex_test_names.append(new_test_name);
|
|
|
|
QTest::newRow(m_flex_test_names.last().toLatin1().data()) << first << second << true << false;
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
split_line = line.split('=');
|
|
|
|
if (split_line.size() == 2) {
|
2023-08-02 17:35:35 +01:00
|
|
|
QString first{ split_line.first().simplified() };
|
|
|
|
QString second{ split_line.last().simplified() };
|
2023-01-20 00:18:39 +00:00
|
|
|
|
2023-07-04 04:04:24 +01:00
|
|
|
auto new_test_name = test_name_template.arg(QString::number(test_number), "equals");
|
|
|
|
m_flex_test_names.append(new_test_name);
|
|
|
|
QTest::newRow(m_flex_test_names.last().toLatin1().data()) << first << second << false << true;
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
split_line = line.split('>');
|
|
|
|
if (split_line.size() == 2) {
|
2023-08-02 17:35:35 +01:00
|
|
|
QString first{ split_line.first().simplified() };
|
|
|
|
QString second{ split_line.last().simplified() };
|
2023-01-20 00:18:39 +00:00
|
|
|
|
2023-07-04 04:04:24 +01:00
|
|
|
auto new_test_name = test_name_template.arg(QString::number(test_number), "greaterThan");
|
|
|
|
m_flex_test_names.append(new_test_name);
|
|
|
|
QTest::newRow(m_flex_test_names.last().toLatin1().data()) << first << second << false << false;
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
qCritical() << "Unexpected separator in the test vector: ";
|
|
|
|
qCritical() << line;
|
|
|
|
|
|
|
|
QVERIFY(0 != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
vector_file.close();
|
2014-09-06 17:16:56 +01:00
|
|
|
}
|
2023-01-20 00:18:39 +00:00
|
|
|
|
|
|
|
void test_flexVerTestVector()
|
2014-09-06 17:16:56 +01:00
|
|
|
{
|
2023-07-05 07:43:39 +01:00
|
|
|
QFETCH(QString, first);
|
|
|
|
QFETCH(QString, second);
|
|
|
|
QFETCH(bool, lessThan);
|
|
|
|
QFETCH(bool, equal);
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2015-10-05 00:47:27 +01:00
|
|
|
const auto v1 = Version(first);
|
|
|
|
const auto v2 = Version(second);
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2023-01-19 07:46:35 +00:00
|
|
|
qDebug() << v1 << "vs" << v2;
|
|
|
|
|
2014-09-06 17:16:56 +01:00
|
|
|
QCOMPARE(v1 < v2, lessThan);
|
|
|
|
QCOMPARE(v1 > v2, !lessThan && !equal);
|
|
|
|
QCOMPARE(v1 == v2, equal);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-01-20 00:18:39 +00:00
|
|
|
QTEST_GUILESS_MAIN(VersionTest)
|
2014-09-06 17:16:56 +01:00
|
|
|
|
2016-04-14 00:23:54 +01:00
|
|
|
#include "Version_test.moc"
|