diff --git a/deepin-devicemanager/src/Page/PageInfo.cpp b/deepin-devicemanager/src/Page/PageInfo.cpp index cb74f351d..993d6a7ce 100644 --- a/deepin-devicemanager/src/Page/PageInfo.cpp +++ b/deepin-devicemanager/src/Page/PageInfo.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -77,7 +77,7 @@ bool PageInfo::packageHasInstalled(const QString &packageName) p.waitForFinished(-1); QByteArray r = p.readAll(); - bool installed = r.contains("installed"); + bool installed = r.contains("Status: install ok installed"); qCDebug(appLog) << "Package" << packageName << "is" << (installed ? "installed" : "not installed"); return installed; } diff --git a/deepin-devicemanager/tests/src/Page/ut_pageinfo.cpp b/deepin-devicemanager/tests/src/Page/ut_pageinfo.cpp index bf6114338..72d9cad44 100644 --- a/deepin-devicemanager/tests/src/Page/ut_pageinfo.cpp +++ b/deepin-devicemanager/tests/src/Page/ut_pageinfo.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 UnionTech Software Technology Co.,Ltd +// Copyright (C) 2019-2026 ~ 2020 UnionTech Software Technology Co.,Ltd // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -48,3 +48,50 @@ TEST_F(PageInfo_UT, PageInfo_UT_paintEvent) m_pageInfo->paintEvent(&paint); delete p; } + +// Parametrized test for PageInfo::packageHasInstalled +// Stub readAll to inject controlled dpkg output without running dpkg +static QByteArray g_readAllData; + +static QByteArray ut_QIODevice_readAll(void *self) +{ + Q_UNUSED(self) + return g_readAllData; +} + +struct PackageHasInstalledParam { + QByteArray dpkgOutput; + bool expected; +}; + +class PackageHasInstalled_UT + : public UT_HEAD + , public testing::WithParamInterface +{ +public: + void SetUp() override {} + void TearDown() override {} +}; + +TEST_P(PackageHasInstalled_UT, packageHasInstalled) +{ + g_readAllData = GetParam().dpkgOutput; + + Stub stub; + stub.set(ADDR(QIODevice, readAll), ut_QIODevice_readAll); + + PageMultiInfo *p = new PageMultiInfo; + PageInfo *pageInfo = dynamic_cast(p); + bool result = pageInfo->packageHasInstalled("test-package"); + EXPECT_EQ(GetParam().expected, result); + delete p; +} + +INSTANTIATE_TEST_SUITE_P(PackageHasInstalledCases, PackageHasInstalled_UT, + testing::Values( + PackageHasInstalledParam{"Status: install ok installed\n", true}, + PackageHasInstalledParam{"Package: dde-printer\nStatus: install ok installed\nPriority: optional\n", true}, + PackageHasInstalledParam{"", false}, + PackageHasInstalledParam{"package 'x' is not installed\n", false} + ) +);