From 4066fbebcabbdf591c2fc525343f8f78486457d2 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Mon, 18 Oct 2021 17:28:49 +0300 Subject: Print essential component information with std::cout Do not use our own message handler for printing XML-formatted component information (from 'list', 'search', 'check-updates') that is expected to be included in output regardless of the current verbosity level or logging rules. Higher verbosity can still add more information to be included in output. Also: - Modify auto-tests to pass and check the output correctly. - Remove now orphaned 'ifw.package.info' logging category. - Rename 'LoggingHandler::printComponentInformation()' to 'printUpdateInformation()' to better match the intended purpose. Task-number: QTIFW-2349 Change-Id: Id1a868f8f824c606825cd6168974a7e3845383e6 Reviewed-by: Katja Marttila --- .../installer/cliinterface/tst_cliinterface.cpp | 112 +++++++++++---------- 1 file changed, 59 insertions(+), 53 deletions(-) (limited to 'tests') diff --git a/tests/auto/installer/cliinterface/tst_cliinterface.cpp b/tests/auto/installer/cliinterface/tst_cliinterface.cpp index d880310ac..25910cd9c 100644 --- a/tests/auto/installer/cliinterface/tst_cliinterface.cpp +++ b/tests/auto/installer/cliinterface/tst_cliinterface.cpp @@ -34,6 +34,9 @@ #include #include +#include +#include + using namespace QInstaller; class tst_CLIInterface : public QObject @@ -43,8 +46,7 @@ class tst_CLIInterface : public QObject private slots: void testListAvailablePackages() { - QString loggingRules = (QLatin1String("ifw.* = false\n" - "ifw.package.* = true\n")); + QString loggingRules = (QLatin1String("ifw.* = false\n")); QTest::ignoreMessage(QtDebugMsg, "Operations sanity check succeeded."); @@ -52,61 +54,52 @@ private slots: (m_installDir, ":///data/repository"); QLoggingCategory::setFilterRules(loggingRules); + auto func = &PackageManagerCore::listAvailablePackages; - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - " \n" - " \n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String(".")); - - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String("A")); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + " \n" + " \n" + " \n" + "\n"), func, QLatin1String("."), QHash()); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + " \n" + "\n"), func, QLatin1String("A"), QHash()); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String("A.*")); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + " \n" + "\n"), func, QLatin1String("A.*"), QHash()); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + "\n"), func, QLatin1String("^B"), QHash()); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String("^B")); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + "\n"), func, QLatin1String("^B.*"), QHash()); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String("^B.*")); - - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - "\n"); - core->listAvailablePackages(QLatin1String("^C")); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + "\n"), func, QLatin1String("^C"), QHash()); // Test with filters - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - " \n" - "\n"); QHash searchHash { { "Version", "1.0.2" }, { "DisplayName", "A" } }; - core->listAvailablePackages(QString(), searchHash); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + " \n" + "\n"), func, QString(), searchHash); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - "\n"); searchHash.clear(); searchHash.insert("Default", "false"); - core->listAvailablePackages(QString(), searchHash); + verifyListPackagesMessage(core, QLatin1String("\n" + " \n" + "\n"), func, QString(), searchHash); // Need to change rules here to catch messages QLoggingCategory::setFilterRules("ifw.* = true\n"); @@ -190,11 +183,11 @@ private slots: void testListInstalledPackages() { - QString loggingRules = (QLatin1String("ifw.* = false\n" - "ifw.package.* = true\n")); + QString loggingRules = (QLatin1String("ifw.* = false\n")); PackageManagerCore core; core.setPackageManager(); QLoggingCategory::setFilterRules(loggingRules); + auto func = &PackageManagerCore::listInstalledPackages; const QString testDirectory = QInstaller::generateTemporaryFileName(); QVERIFY(QDir().mkpath(testDirectory)); @@ -202,16 +195,14 @@ private slots: core.setValue(scTargetDir, testDirectory); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - " \n" - "\n"); - core.listInstalledPackages(); + verifyListPackagesMessage(&core, QLatin1String("\n" + " \n" + " \n" + "\n"), func, QString()); - QTest::ignoreMessage(QtDebugMsg, "\n" - " \n" - "\n"); - core.listInstalledPackages(QLatin1String("A")); + verifyListPackagesMessage(&core, QLatin1String("\n" + " \n" + "\n"), func, QLatin1String("A")); QDir dir(testDirectory); QVERIFY(dir.removeRecursively()); @@ -532,6 +523,21 @@ private slots: QVERIFY(dir.removeRecursively()); } +private: + template + 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)...); + + std::cout.rdbuf(buf); + QVERIFY(stream && stream.str() == message.toStdString()); + } + private: QString m_installDir; }; -- cgit v1.2.3