diff options
Diffstat (limited to 'tests/auto/installer/solver/tst_solver.cpp')
-rw-r--r-- | tests/auto/installer/solver/tst_solver.cpp | 91 |
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() |