summaryrefslogtreecommitdiffstats
path: root/tests/auto/installer/solver/tst_solver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/installer/solver/tst_solver.cpp')
-rw-r--r--tests/auto/installer/solver/tst_solver.cpp91
1 files changed, 58 insertions, 33 deletions
diff --git a/tests/auto/installer/solver/tst_solver.cpp b/tests/auto/installer/solver/tst_solver.cpp
index d1c3aaa14..4548af3f1 100644
--- a/tests/auto/installer/solver/tst_solver.cpp
+++ b/tests/auto/installer/solver/tst_solver.cpp
@@ -1,6 +1,6 @@
/**************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2023 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Installer Framework.
@@ -39,13 +39,16 @@
using namespace QInstaller;
typedef QMap<Component *, QStringList> ComponentToStringList;
+typedef QList<QPair<Component *, CalculatorBase::Resolution>> UninstallReasonList;
+
+Q_DECLARE_METATYPE(UninstallReasonList)
class Data {
public:
Data() {}
explicit Data(const QString &data)
: m_data(data) {}
- inline uint qHash(const Data &test);
+ inline hashValue qHash(const Data &test);
QString data() const { return m_data; }
bool operator==(const Data &rhs) const { return m_data == rhs.m_data; }
const Data &operator=(const Data &rhs) { if (this != &rhs) { m_data = rhs.m_data; } return *this; }
@@ -53,7 +56,7 @@ public:
private:
QString m_data;
};
-inline uint qHash(const Data &data)
+inline hashValue qHash(const Data &data)
{
return qHash(data.data());
}
@@ -146,7 +149,8 @@ private slots:
QTest::addColumn<PackageManagerCore *>("core");
QTest::addColumn<QList<Component *> >("selectedComponents");
QTest::addColumn<QList<Component *> >("expectedResult");
- QTest::addColumn<QList<int> >("installReason");
+ QTest::addColumn<QList<CalculatorBase::Resolution> >("installReason");
+ QTest::addColumn<AutoDependencyHash >("autodependencyHash");
PackageManagerCore *core = new PackageManagerCore();
core->setPackageManager();
@@ -166,14 +170,18 @@ private slots:
core->appendRootComponent(componentB_NewVersion);
core->appendRootComponent(componentB_Auto);
+ QHash<QString, QStringList> autodependencyHash;
+ autodependencyHash.insert(QLatin1String("B_version"), QStringList() << QLatin1String("B_auto"));
+
QTest::newRow("Installer resolved") << core
<< (QList<Component *>() << componentB)
<< (QList<Component *>() << componentB_NewVersion << componentAB << componentB << componentB_Auto)
- << (QList<int>()
- << InstallerCalculator::Dependent
- << InstallerCalculator::Dependent
- << InstallerCalculator::Resolved
- << InstallerCalculator::Automatic);
+ << (QList<CalculatorBase::Resolution>()
+ << CalculatorBase::Resolution::Dependent
+ << CalculatorBase::Resolution::Dependent
+ << CalculatorBase::Resolution::Resolved
+ << CalculatorBase::Resolution::Automatic)
+ << autodependencyHash;
}
void resolveInstaller()
@@ -181,16 +189,17 @@ private slots:
QFETCH(PackageManagerCore *, core);
QFETCH(QList<Component *> , selectedComponents);
QFETCH(QList<Component *> , expectedResult);
- QFETCH(QList<int>, installReason);
+ QFETCH(QList<CalculatorBase::Resolution>, installReason);
+ QFETCH(AutoDependencyHash, autodependencyHash);
- InstallerCalculator calc(core->components(PackageManagerCore::ComponentType::AllNoReplacements));
- calc.appendComponentsToInstall(selectedComponents);
- QList<Component *> result = calc.orderedComponentsToInstall();
+ InstallerCalculator calc(core, autodependencyHash);
+ calc.solve(selectedComponents);
+ QList<Component *> result = calc.resolvedComponents();
QCOMPARE(result.count(), expectedResult.count());
for (int i = 0; i < result.count(); i++) {
QCOMPARE(result.at(i), expectedResult.at(i));
- QCOMPARE((int)calc.installReasonType(result.at(i)), installReason.at(i));
+ QCOMPARE(calc.resolutionType(result.at(i)), installReason.at(i));
}
delete core;
}
@@ -218,7 +227,6 @@ private slots:
<< (QList<Component *>() << componentA)
<< (QList<Component *>());
}
-
}
void unresolvedDependencyVersion()
@@ -227,11 +235,11 @@ private slots:
QFETCH(QList<Component *> , selectedComponents);
QFETCH(QList<Component *> , expectedResult);
- InstallerCalculator calc(core->components(PackageManagerCore::ComponentType::AllNoReplacements));
+ InstallerCalculator calc(core, QHash<QString, QStringList>());
QTest::ignoreMessage(QtWarningMsg, "Cannot find missing dependency \"B->=2.0.0\" for \"A\".");
- calc.appendComponentsToInstall(selectedComponents);
+ calc.solve(selectedComponents);
- QList<Component *> result = calc.orderedComponentsToInstall();
+ QList<Component *> result = calc.resolvedComponents();
QCOMPARE(result.count(), expectedResult.count());
delete core;
}
@@ -240,9 +248,11 @@ private slots:
{
QTest::addColumn<PackageManagerCore *>("core");
QTest::addColumn<QList<Component *> >("selectedToUninstall");
- QTest::addColumn<QList<Component *> >("installedComponents");
- QTest::addColumn<QSet<Component *> >("expectedResult");
+ QTest::addColumn<QList<Component *> >("expectedResult");
+ QTest::addColumn<UninstallReasonList >("uninstallReasons");
+ QTest::addColumn<LocalDependencyHash >("dependencyHash");
+ UninstallReasonList uninstallReasonList;
PackageManagerCore *core = new PackageManagerCore();
core->setPackageManager();
NamedComponent *componentA = new NamedComponent(core, QLatin1String("A"));
@@ -259,11 +269,19 @@ private slots:
componentB->setInstalled();
componentAB->setInstalled();
+ QHash<QString, QStringList> dependencyComponentHash;
+ dependencyComponentHash.insert(QLatin1String("A.B"), QStringList() << QLatin1String("B"));
+
+ uninstallReasonList.append(qMakePair(componentAB, CalculatorBase::Resolution::Selected));
+ uninstallReasonList.append(qMakePair(componentB, CalculatorBase::Resolution::Dependent));
QTest::newRow("Uninstaller resolved") << core
<< (QList<Component *>() << componentAB)
- << (QList<Component *>() << componentA << componentB)
- << (QSet<Component *>() << componentAB << componentB);
+ << (QList<Component *>() << componentB << componentAB)
+ << uninstallReasonList
+ << dependencyComponentHash;
+ dependencyComponentHash.clear();
+ uninstallReasonList.clear();
core = new PackageManagerCore();
core->setPackageManager();
NamedComponent *compA = new NamedComponent(core, QLatin1String("A"));
@@ -277,29 +295,37 @@ private slots:
compA->setInstalled();
compB->setInstalled();
+ dependencyComponentHash.insert(QLatin1String("A"), QStringList() << QLatin1String("B"));
+
+ uninstallReasonList.append(qMakePair(compA, CalculatorBase::Resolution::Selected));
+ uninstallReasonList.append(qMakePair(compB, CalculatorBase::Resolution::Dependent));
QTest::newRow("Cascade dependencies") << core
<< (QList<Component *>() << compA)
- << (QList<Component *>() << compB)
- << (QSet<Component *>() << compA << compB);
+ << (QList<Component *>() << compB << compA)
+ << (uninstallReasonList)
+ << dependencyComponentHash;
}
void resolveUninstaller()
{
QFETCH(PackageManagerCore *, core);
QFETCH(QList<Component *> , selectedToUninstall);
- QFETCH(QList<Component *> , installedComponents);
- QFETCH(QSet<Component *> , expectedResult);
-
- UninstallerCalculator calc(installedComponents);
- calc.appendComponentsToUninstall(selectedToUninstall);
- QSet<Component *> result = calc.componentsToUninstall();
-
+ QFETCH(QList<Component *> , expectedResult);
+ QFETCH(UninstallReasonList, uninstallReasons);
+ QFETCH(LocalDependencyHash, dependencyHash);
+
+ UninstallerCalculator calc(core, QHash<QString, QStringList>(), dependencyHash, QStringList());
+ calc.solve(selectedToUninstall);
+ QList<Component *> result = calc.resolvedComponents();
+ for (auto pair : uninstallReasons) {
+ CalculatorBase::Resolution type = calc.resolutionType(pair.first);
+ QCOMPARE(pair.second, type);
+ }
QCOMPARE(result.count(), expectedResult.count());
QCOMPARE(result, expectedResult);
delete core;
}
-
void checkComponent_data()
{
QTest::addColumn<QList<Component *> >("componentsToCheck");
@@ -342,7 +368,6 @@ private slots:
QTest::newRow("AutoDepend and dependency")
<< (QList<Component *>() << componentC << componentD << componentE)
<< result;
-
}
void checkComponent()