summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2023-08-24 12:14:32 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2023-09-14 06:27:51 +0000
commit4e8bf4771c64838058bf7d853dd8d30fac9fca21 (patch)
tree1231057ecc6e6e7328ff22a5bf8fcf6d6fa097dc /tests
parent554aacf002690075872682b03e0bc836cf9cafe8 (diff)
Add auto-tests for component aliases
Task-number: QTIFW-2978 Change-Id: I2ed1368dbaf793f1035d93af88c4c2e73c4271b3 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/installer/commandlineinstall/tst_commandlineinstall.cpp40
-rw-r--r--tests/auto/installer/componentalias/componentalias.pro8
-rw-r--r--tests/auto/installer/componentalias/data/aliases-priority.xml36
-rw-r--r--tests/auto/installer/componentalias/data/aliases-versions.xml36
-rw-r--r--tests/auto/installer/componentalias/data/repository/Updates.xml43
-rw-r--r--tests/auto/installer/componentalias/metadata/installer-config/aliases.xml36
-rw-r--r--tests/auto/installer/componentalias/metadata/installer-config/config.xml6
-rw-r--r--tests/auto/installer/componentalias/settings.qrc9
-rw-r--r--tests/auto/installer/componentalias/tst_componentalias.cpp212
-rw-r--r--tests/auto/installer/installer.pro3
-rw-r--r--tests/auto/installer/shared/verifyinstaller.h23
11 files changed, 420 insertions, 32 deletions
diff --git a/tests/auto/installer/commandlineinstall/tst_commandlineinstall.cpp b/tests/auto/installer/commandlineinstall/tst_commandlineinstall.cpp
index 48b7bf35d..1da28865a 100644
--- a/tests/auto/installer/commandlineinstall/tst_commandlineinstall.cpp
+++ b/tests/auto/installer/commandlineinstall/tst_commandlineinstall.cpp
@@ -35,9 +35,6 @@
#include <QTest>
#include <QRegularExpression>
-#include <iostream>
-#include <sstream>
-
using namespace QInstaller;
typedef QList<QPair<QString, QString> > ComponentResourceHash;
@@ -73,7 +70,7 @@ private slots:
(m_installDir, ":///data/repository"));
auto func = &PackageManagerCore::listAvailablePackages;
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
" <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
@@ -81,29 +78,29 @@ private slots:
" <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("."), QHash<QString, QString>());
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
" <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("A"), QHash<QString, QString>());
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
" <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("A.*"), QHash<QString, QString>());
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("^B"), QHash<QString, QString>());
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("^B.*"), QHash<QString, QString>());
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
"</availablepackages>\n"), func, QLatin1String("^C"), QHash<QString, QString>());
@@ -113,7 +110,7 @@ private slots:
{ "Version", "1.0.2" },
{ "DisplayName", "A" }
};
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
" <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
@@ -121,7 +118,7 @@ private slots:
searchHash.clear();
searchHash.insert("Default", "false");
- verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n"
"<availablepackages>\n"
" <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
"</availablepackages>\n"), func, QString(), searchHash);
@@ -214,13 +211,13 @@ private slots:
core.setValue(scTargetDir, testDirectory);
- verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n"
"<localpackages>\n"
" <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
" <package name=\"B\" displayname=\"B Title\" version=\"1.0.0-1\"/>\n"
"</localpackages>\n"), func, QString());
- verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n"
+ VerifyInstaller::verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n"
"<localpackages>\n"
" <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
"</localpackages>\n"), func, QLatin1String("A"));
@@ -760,23 +757,6 @@ private slots:
}
private:
- template <typename Func, typename... Args>
- void verifyListPackagesMessage(PackageManagerCore *core, const QString &message,
- Func func, Args... args)
- {
- std::ostringstream stream;
- std::streambuf *buf = std::cout.rdbuf();
- std::cout.rdbuf(stream.rdbuf());
-
- (core->*func)(std::forward<Args>(args)...);
-
- std::cout.rdbuf(buf);
- QVERIFY(stream && stream.tellp() == message.size());
- for (const QString &line : message.split(QLatin1String("\n")))
- QVERIFY(stream.str().find(line.toStdString()) != std::string::npos);
- }
-
-private:
QString m_installDir;
};
diff --git a/tests/auto/installer/componentalias/componentalias.pro b/tests/auto/installer/componentalias/componentalias.pro
new file mode 100644
index 000000000..efbc0268f
--- /dev/null
+++ b/tests/auto/installer/componentalias/componentalias.pro
@@ -0,0 +1,8 @@
+include(../../qttest.pri)
+
+QT -= gui
+QT += testlib
+
+SOURCES = tst_componentalias.cpp
+
+RESOURCES += settings.qrc
diff --git a/tests/auto/installer/componentalias/data/aliases-priority.xml b/tests/auto/installer/componentalias/data/aliases-priority.xml
new file mode 100644
index 000000000..192ff9e44
--- /dev/null
+++ b/tests/auto/installer/componentalias/data/aliases-priority.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Aliases>
+ <Alias>
+ <Name>set-A</Name>
+ <DisplayName>Installation A (priority)</DisplayName>
+ <Description>Installs component A</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>A</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-B</Name>
+ <DisplayName>Virtual installation B (priority)</DisplayName>
+ <Description>Installs component B</Description>
+ <Version>1.0.0</Version>
+ <Virtual>true</Virtual>
+ <RequiresComponent>B</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-D</Name>
+ <DisplayName>Installation D (Unstable) (priority)</DisplayName>
+ <Description>Installs missing component D</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>D</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-full</Name>
+ <DisplayName>Full installation (priority)</DisplayName>
+ <Description>Installs all components</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresAlias>set-A,set-B</RequiresAlias>
+ <RequiresComponent>C</RequiresComponent>
+ </Alias>
+</Aliases>
diff --git a/tests/auto/installer/componentalias/data/aliases-versions.xml b/tests/auto/installer/componentalias/data/aliases-versions.xml
new file mode 100644
index 000000000..d460f3275
--- /dev/null
+++ b/tests/auto/installer/componentalias/data/aliases-versions.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Aliases>
+ <Alias>
+ <Name>set-A</Name>
+ <DisplayName>Installation A (updated)</DisplayName>
+ <Description>Installs component A</Description>
+ <Version>2.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>A</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-B</Name>
+ <DisplayName>Virtual installation B (updated)</DisplayName>
+ <Description>Installs component B</Description>
+ <Version>1.1.0</Version>
+ <Virtual>true</Virtual>
+ <RequiresComponent>B</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-D</Name>
+ <DisplayName>Installation D (Unstable) (updated)</DisplayName>
+ <Description>Installs missing component D</Description>
+ <Version>1.2.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>D</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-full</Name>
+ <DisplayName>Full installation (updated)</DisplayName>
+ <Description>Installs all components</Description>
+ <Version>3.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresAlias>set-A,set-B</RequiresAlias>
+ <RequiresComponent>C</RequiresComponent>
+ </Alias>
+</Aliases>
diff --git a/tests/auto/installer/componentalias/data/repository/Updates.xml b/tests/auto/installer/componentalias/data/repository/Updates.xml
new file mode 100644
index 000000000..e128590dc
--- /dev/null
+++ b/tests/auto/installer/componentalias/data/repository/Updates.xml
@@ -0,0 +1,43 @@
+<Updates>
+ <ApplicationName>{AnyApplication}</ApplicationName>
+ <ApplicationVersion>1.0.0</ApplicationVersion>
+ <Checksum>true</Checksum>
+ <PackageUpdate>
+ <Name>A</Name>
+ <DisplayName>A</DisplayName>
+ <Description>Example component A</Description>
+ <Version>1.0.2-1</Version>
+ <ReleaseDate>2015-01-01</ReleaseDate>
+ <Default>false</Default>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>B</Name>
+ <DisplayName>B</DisplayName>
+ <Description>Example component B</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2015-01-01</ReleaseDate>
+ <Default>false</Default>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>C</Name>
+ <DisplayName>C</DisplayName>
+ <Description>Example component C</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2015-01-01</ReleaseDate>
+ <Default>false</Default>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>C.subcomponent</Name>
+ <DisplayName>Subcomponent of C</DisplayName>
+ <Description>Example subcomponent</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2015-01-01</ReleaseDate>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>C.subcomponent.subcomponent</Name>
+ <DisplayName>Subcomponent of subcomponent component</DisplayName>
+ <Description>Example subcomponent of subcomponent</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2015-01-01</ReleaseDate>
+ </PackageUpdate>
+</Updates>
diff --git a/tests/auto/installer/componentalias/metadata/installer-config/aliases.xml b/tests/auto/installer/componentalias/metadata/installer-config/aliases.xml
new file mode 100644
index 000000000..60291d29a
--- /dev/null
+++ b/tests/auto/installer/componentalias/metadata/installer-config/aliases.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Aliases>
+ <Alias>
+ <Name>set-A</Name>
+ <DisplayName>Installation A</DisplayName>
+ <Description>Installs component A</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>A</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-B</Name>
+ <DisplayName>Virtual installation B</DisplayName>
+ <Description>Installs component B</Description>
+ <Version>1.0.0</Version>
+ <Virtual>true</Virtual>
+ <RequiresComponent>B</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-D</Name>
+ <DisplayName>Installation D (Unstable)</DisplayName>
+ <Description>Installs missing component D</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresComponent>D</RequiresComponent>
+ </Alias>
+ <Alias>
+ <Name>set-full</Name>
+ <DisplayName>Full installation</DisplayName>
+ <Description>Installs all components</Description>
+ <Version>1.0.0</Version>
+ <Virtual>false</Virtual>
+ <RequiresAlias>set-A,set-B</RequiresAlias>
+ <RequiresComponent>C</RequiresComponent>
+ </Alias>
+</Aliases>
diff --git a/tests/auto/installer/componentalias/metadata/installer-config/config.xml b/tests/auto/installer/componentalias/metadata/installer-config/config.xml
new file mode 100644
index 000000000..9e2b5af55
--- /dev/null
+++ b/tests/auto/installer/componentalias/metadata/installer-config/config.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Installer>
+ <Name>test</Name>
+ <Version>1.0.0</Version>
+ <AliasDefinitionsFile>aliases.xml</AliasDefinitionsFile>
+</Installer>
diff --git a/tests/auto/installer/componentalias/settings.qrc b/tests/auto/installer/componentalias/settings.qrc
new file mode 100644
index 000000000..bb45fd361
--- /dev/null
+++ b/tests/auto/installer/componentalias/settings.qrc
@@ -0,0 +1,9 @@
+<RCC>
+ <qresource prefix="/">
+ <file>data/repository/Updates.xml</file>
+ <file>data/aliases-priority.xml</file>
+ <file>data/aliases-versions.xml</file>
+ <file>metadata/installer-config/config.xml</file>
+ <file>metadata/installer-config/aliases.xml</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/installer/componentalias/tst_componentalias.cpp b/tests/auto/installer/componentalias/tst_componentalias.cpp
new file mode 100644
index 000000000..b30615080
--- /dev/null
+++ b/tests/auto/installer/componentalias/tst_componentalias.cpp
@@ -0,0 +1,212 @@
+/**************************************************************************
+**
+** Copyright (C) 2023 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+
+#include "../shared/packagemanager.h"
+#include "../shared/verifyinstaller.h"
+
+#include <packagemanagercore.h>
+#include <componentalias.h>
+
+#include <QTest>
+#include <QLoggingCategory>
+
+using namespace QInstaller;
+
+class tst_ComponentAlias : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void init()
+ {
+ m_installDir = QInstaller::generateTemporaryFileName();
+ QVERIFY(QDir().mkpath(m_installDir));
+ }
+
+ void cleanup()
+ {
+ QDir dir(m_installDir);
+ QVERIFY(dir.removeRecursively());
+ }
+
+ void testSearchAlias()
+ {
+ QString loggingRules = (QLatin1String("ifw.* = false\n"));
+
+ QLoggingCategory::setFilterRules(loggingRules);
+ QScopedPointer<PackageManagerCore> core(PackageManager::getPackageManager
+ (m_installDir, ":///data/repository"));
+
+ auto listMethod = &PackageManagerCore::listAvailableAliases;
+
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("\n"
+ "Name: set-A\n"
+ "Display name: Installation A\n"
+ "Description: Installs component A\n"
+ "Version: 1.0.0\n"
+ "Components: A\n"
+ "Required aliases: \n"
+ "========================================\n"
+ "Name: set-full\n"
+ "Display name: Full installation\n"
+ "Description: Installs all components\n"
+ "Version: 1.0.0\n"
+ "Components: C\n"
+ "Required aliases: set-A,set-B\n"), listMethod, QString());
+
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("\n"
+ "Name: set-A\n"
+ "Display name: Installation A\n"
+ "Description: Installs component A\n"
+ "Version: 1.0.0\n"
+ "Components: A\n"
+ "Required aliases: \n"), listMethod, QLatin1String("A"));
+ }
+
+ void testAliasSourceWithPriority()
+ {
+ QString loggingRules = (QLatin1String("ifw.* = false\n"));
+
+ QLoggingCategory::setFilterRules(loggingRules);
+ QScopedPointer<PackageManagerCore> core(PackageManager::getPackageManager
+ (m_installDir, ":///data/repository"));
+
+ core->addAliasSource(AliasSource(AliasSource::SourceFileFormat::Xml,
+ ":///data/aliases-priority.xml", 1));
+
+ auto listMethod = &PackageManagerCore::listAvailableAliases;
+
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("\n"
+ "Name: set-A\n"
+ "Display name: Installation A (priority)\n"
+ "Description: Installs component A\n"
+ "Version: 1.0.0\n"
+ "Components: A\n"
+ "Required aliases: \n"
+ "========================================\n"
+ "Name: set-full\n"
+ "Display name: Full installation (priority)\n"
+ "Description: Installs all components\n"
+ "Version: 1.0.0\n"
+ "Components: C\n"
+ "Required aliases: set-A,set-B\n"), listMethod, QString());
+ }
+
+ void testAliasSourceWithVersionCompare()
+ {
+ QString loggingRules = (QLatin1String("ifw.* = false\n"));
+
+ QLoggingCategory::setFilterRules(loggingRules);
+ QScopedPointer<PackageManagerCore> core(PackageManager::getPackageManager
+ (m_installDir, ":///data/repository"));
+
+ core->addAliasSource(AliasSource(AliasSource::SourceFileFormat::Xml,
+ ":///data/aliases-versions.xml", -1));
+
+ auto listMethod = &PackageManagerCore::listAvailableAliases;
+
+ VerifyInstaller::verifyListPackagesMessage(core.get(), QLatin1String("\n"
+ "Name: set-A\n"
+ "Display name: Installation A (updated)\n"
+ "Description: Installs component A\n"
+ "Version: 2.0.0\n"
+ "Components: A\n"
+ "Required aliases: \n"
+ "========================================\n"
+ "Name: set-full\n"
+ "Display name: Full installation (updated)\n"
+ "Description: Installs all components\n"
+ "Version: 3.0.0\n"
+ "Components: C\n"
+ "Required aliases: set-A,set-B\n"), listMethod, QString());
+ }
+
+ void testInstallAlias_data()
+ {
+ QTest::addColumn<QStringList>("selectedAliases");
+ QTest::addColumn<PackageManagerCore::Status>("status");
+ QTest::addColumn<QStringList>("installedComponents");
+
+ QTest::newRow("Simple alias")
+ << (QStringList() << "set-A")
+ << PackageManagerCore::Success
+ << (QStringList() << "A");
+
+ QTest::newRow("Alias with dependencies")
+ << (QStringList() << "set-full")
+ << PackageManagerCore::Success
+ << (QStringList() << "A" << "B" << "C" << "C.subcomponent" << "C.subcomponent.subcomponent");
+ }
+
+ void testInstallAlias()
+ {
+ QFETCH(QStringList, selectedAliases);
+ QFETCH(PackageManagerCore::Status, status);
+ QFETCH(QStringList, installedComponents);
+
+ QScopedPointer<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository"));
+
+ QCOMPARE(status, core->installSelectedComponentsSilently(selectedAliases));
+
+ for (const QString &component : installedComponents)
+ QVERIFY(core->componentByName(component)->isInstalled());
+ }
+
+ void testInstallAliasFails_data()
+ {
+ QTest::addColumn<QStringList>("selectedAliases");
+ QTest::addColumn<PackageManagerCore::Status>("status");
+
+ QTest::newRow("Virtual alias")
+ << (QStringList() << "set-B")
+ << PackageManagerCore::Canceled;
+
+ QTest::newRow("Unstable alias")
+ << (QStringList() << "set-D")
+ << PackageManagerCore::Canceled;
+ }
+
+ void testInstallAliasFails()
+ {
+ QFETCH(QStringList, selectedAliases);
+ QFETCH(PackageManagerCore::Status, status);
+
+ QScopedPointer<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository"));
+
+ QCOMPARE(status, core->installSelectedComponentsSilently(selectedAliases));
+ }
+
+private:
+ QString m_installDir;
+};
+
+QTEST_GUILESS_MAIN(tst_ComponentAlias)
+
+#include "tst_componentalias.moc"
diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro
index ff070d143..a5f5b3a2e 100644
--- a/tests/auto/installer/installer.pro
+++ b/tests/auto/installer/installer.pro
@@ -43,7 +43,8 @@ SUBDIRS += \
contentshaupdate \
componentreplace \
metadatacache \
- contentsha1check
+ contentsha1check \
+ componentalias
CONFIG(libarchive) {
SUBDIRS += libarchivearchive
diff --git a/tests/auto/installer/shared/verifyinstaller.h b/tests/auto/installer/shared/verifyinstaller.h
index 4d70c577b..e19d3fa0a 100644
--- a/tests/auto/installer/shared/verifyinstaller.h
+++ b/tests/auto/installer/shared/verifyinstaller.h
@@ -1,6 +1,6 @@
/**************************************************************************
**
-** Copyright (C) 2022 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.
@@ -29,6 +29,8 @@
#ifndef VERIFYINSTALLER_H
#define VERIFYINSTALLER_H
+#include <packagemanagercore.h>
+
#include <QString>
#include <QStringList>
#include <QCryptographicHash>
@@ -36,6 +38,9 @@
#include <QDir>
#include <QtTest/QTest>
+#include <iostream>
+#include <sstream>
+
struct VerifyInstaller
{
static void verifyInstallerResources(const QString &installDir, const QString &componentName, const QString &fileName)
@@ -114,5 +119,21 @@ struct VerifyInstaller
}
}
}
+
+ template <typename Func, typename... Args>
+ static void verifyListPackagesMessage(QInstaller::PackageManagerCore *core, const QString &message,
+ Func func, Args... args)
+ {
+ std::ostringstream stream;
+ std::streambuf *buf = std::cout.rdbuf();
+ std::cout.rdbuf(stream.rdbuf());
+
+ (core->*func)(std::forward<Args>(args)...);
+
+ std::cout.rdbuf(buf);
+ QVERIFY(stream && stream.tellp() == message.size());
+ for (const QString &line : message.split(QLatin1String("\n")))
+ QVERIFY(stream.str().find(line.toStdString()) != std::string::npos);
+ }
};
#endif