From 7e97570fc6fb1072008c6db92f04ede656a2a330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=9C=8B=E7=A8=8B?= Date: Sat, 6 Mar 2021 19:33:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B4=E7=90=86=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 整理单元测试代码,方便测试AppItem类 Log: Change-Id: Iff41154f8f9e968742c9f30c09f2f7a6b5aabde4 --- frame/controller/dockitemmanager.cpp | 4 +- frame/item/appitem.cpp | 92 ++++++++++++++----- frame/item/appitem.h | 6 +- frame/item/launcheritem.cpp | 2 +- frame/mockinterface/qgsettingsinterface.h | 4 +- .../mockinterface/qgsettingsinterfaceimpl.cpp | 2 +- .../mockinterface/qgsettingsinterfacemock.cpp | 2 +- 7 files changed, 82 insertions(+), 30 deletions(-) diff --git a/frame/controller/dockitemmanager.cpp b/frame/controller/dockitemmanager.cpp index 522c3a4a3..37e866dbd 100644 --- a/frame/controller/dockitemmanager.cpp +++ b/frame/controller/dockitemmanager.cpp @@ -41,7 +41,7 @@ DockItemManager::DockItemManager(QObject *parent) // 应用区域 for (auto entry : m_appInter->entries()) { - AppItem *it = new AppItem(entry); + AppItem *it = new AppItem(entry, QGSettingsInterface::Type::ImplType); manageItem(it); connect(it, &AppItem::requestActivateWindow, m_appInter, &DBusDock::ActivateWindow, Qt::QueuedConnection); @@ -190,7 +190,7 @@ void DockItemManager::appItemAdded(const QDBusObjectPath &path, const int index) ++insertIndex; } - AppItem *item = new AppItem(path); + AppItem *item = new AppItem(path, QGSettingsInterface::Type::ImplType); if (m_appIDist.contains(item->appId())) { delete item; diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 9d8def293..cfce7162b 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -26,6 +26,8 @@ #include "xcb_misc.h" #include "appswingeffectbuilder.h" #include "appspreviewprovider.h" +#include "qgsettingsinterfaceimpl.h" +#include "qgsettingsinterfacemock.h" #include #include @@ -45,26 +47,65 @@ QPoint AppItem::MousePressPos; -static QGSettings *GSettingsByApp() +static QGSettingsInterface *GSettingsByApp(QGSettingsInterface::Type type) { - static QGSettings settings("com.deepin.dde.dock.module.app"); - return &settings; + switch (type) { + case QGSettingsInterface::Type::ImplType: + { + static QGSettingsInterfaceImpl settings("com.deepin.dde.dock.module.app"); + return &settings; + } + case QGSettingsInterface::Type::MockType: + { + static QGSettingsInterfaceMock settings("com.deepin.dde.dock.module.app"); + return &settings; + } + default: + return nullptr; + } } -static QGSettings *GSettingsByActiveApp() +static QGSettingsInterface *GSettingsByActiveApp(QGSettingsInterface::Type type) { - static QGSettings settings("com.deepin.dde.dock.module.activeapp"); - return &settings; + switch (type) { + case QGSettingsInterface::Type::ImplType: + { + static QGSettingsInterfaceImpl settings("com.deepin.dde.dock.module.activeapp"); + return &settings; + } + case QGSettingsInterface::Type::MockType: + { + static QGSettingsInterfaceMock settings("com.deepin.dde.dock.module.activeapp"); + return &settings; + } + default: + return nullptr; + } } -static QGSettings *GSettingsByDockApp() +static QGSettingsInterface *GSettingsByDockApp(QGSettingsInterface::Type type) { - static QGSettings settings("com.deepin.dde.dock.module.dockapp"); - return &settings; + switch (type) { + case QGSettingsInterface::Type::ImplType: + { + static QGSettingsInterfaceImpl settings("com.deepin.dde.dock.module.dockapp"); + return &settings; + } + case QGSettingsInterface::Type::MockType: + { + static QGSettingsInterfaceMock settings("com.deepin.dde.dock.module.dockapp"); + return &settings; + } + default: + return nullptr; + } } -AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent) +AppItem::AppItem(const QDBusObjectPath &entry, QGSettingsInterface::Type type, QWidget *parent) : DockItem(parent) + , m_qgAppInterface(GSettingsByApp(type)) + , m_qgActiveAppInterface(GSettingsByActiveApp(type)) + , m_qgDockedAppInterface(GSettingsByDockApp(type)) , m_appNameTips(new TipsWidget(this)) , m_appPreviewTips(nullptr) , m_itemEntryInter(new DockEntryInter("com.deepin.dde.daemon.Dock", entry.path(), QDBusConnection::sessionBus(), this)) @@ -120,9 +161,9 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent) updateWindowInfos(m_itemEntryInter->windowInfos()); refreshIcon(); - connect(GSettingsByApp(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); - connect(GSettingsByDockApp(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); - connect(GSettingsByActiveApp(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); + connect(m_qgAppInterface->gsettings(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); + connect(m_qgDockedAppInterface->gsettings(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); + connect(m_qgActiveAppInterface->gsettings(), &QGSettings::changed, this, &AppItem::onGSettingsChanged); connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &AppItem::onThemeTypeChanged); @@ -140,6 +181,13 @@ AppItem::~AppItem() stopSwingEffect(); m_appNameTips->deleteLater(); + + delete m_qgAppInterface; + m_qgAppInterface = nullptr; + delete m_qgActiveAppInterface; + m_qgActiveAppInterface = nullptr; + delete m_qgDockedAppInterface; + m_qgDockedAppInterface = nullptr; } void AppItem::checkEntry() @@ -665,7 +713,7 @@ void AppItem::playSwingEffect() stopSwingEffect(); QPair pair = SwingEffect( - this, m_appIcon, rect(), devicePixelRatioF()); + this, m_appIcon, rect(), devicePixelRatioF()); m_swingEffectView = pair.first; m_itemAnimation = pair.second; @@ -711,24 +759,24 @@ void AppItem::onGSettingsChanged(const QString &key) return; } - QGSettings *setting = m_itemEntryInter->isDocked() - ? GSettingsByDockApp() - : GSettingsByActiveApp(); + QGSettingsInterface *setting = m_itemEntryInter->isDocked() + ? m_qgDockedAppInterface + : m_qgActiveAppInterface; if (setting->keys().contains("enable")) { - const bool isEnable = GSettingsByApp()->keys().contains("enable") && GSettingsByApp()->get("enable").toBool(); + const bool isEnable = m_qgAppInterface->keys().contains("enable") && m_qgAppInterface->get("enable").toBool(); setVisible(isEnable && setting->get("enable").toBool()); } } bool AppItem::checkGSettingsControl() const { - QGSettings *setting = m_itemEntryInter->isDocked() - ? GSettingsByDockApp() - : GSettingsByActiveApp(); + QGSettingsInterface *setting = m_itemEntryInter->isDocked() + ? m_qgDockedAppInterface + : m_qgActiveAppInterface; return (setting->keys().contains("control") && setting->get("control").toBool()) || - (GSettingsByApp()->keys().contains("control") && GSettingsByApp()->get("control").toBool()); + (m_qgAppInterface->keys().contains("control") && m_qgAppInterface->get("control").toBool()); } void AppItem::onThemeTypeChanged(DGuiApplicationHelper::ColorType themeType) diff --git a/frame/item/appitem.h b/frame/item/appitem.h index f28b704eb..5505efcdd 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -28,6 +28,7 @@ #include "appdrag.h" #include "dbusclientmanager.h" #include "../widgets/tipswidget.h" +#include "qgsettingsinterface.h" #include #include @@ -43,7 +44,7 @@ class AppItem : public DockItem Q_OBJECT public: - explicit AppItem(const QDBusObjectPath &entry, QWidget *parent = nullptr); + explicit AppItem(const QDBusObjectPath &entry, QGSettingsInterface::Type type, QWidget *parent = nullptr); ~AppItem() override; void checkEntry() override; @@ -102,6 +103,9 @@ private slots: void onThemeTypeChanged(DGuiApplicationHelper::ColorType themeType); private: + QGSettingsInterface *m_qgAppInterface; + QGSettingsInterface *m_qgActiveAppInterface; + QGSettingsInterface *m_qgDockedAppInterface; TipsWidget *m_appNameTips; PreviewContainer *m_appPreviewTips; DockEntryInter *m_itemEntryInter; diff --git a/frame/item/launcheritem.cpp b/frame/item/launcheritem.cpp index 9e10f7ccf..4f80caee1 100644 --- a/frame/item/launcheritem.cpp +++ b/frame/item/launcheritem.cpp @@ -45,7 +45,7 @@ LauncherItem::LauncherItem(QGSettingsInterface *interface, QWidget *parent) m_tips->setVisible(false); m_tips->setObjectName("launcher"); - if (m_gsettings->type() == QGSettingsInterface::REAL) { + if (m_gsettings->type() == QGSettingsInterface::ImplType) { QGSettingsInterfaceImpl *impl = dynamic_cast(m_gsettings); if (!impl) qWarning("Error!"); diff --git a/frame/mockinterface/qgsettingsinterface.h b/frame/mockinterface/qgsettingsinterface.h index 321ce9c9c..846c36345 100644 --- a/frame/mockinterface/qgsettingsinterface.h +++ b/frame/mockinterface/qgsettingsinterface.h @@ -30,8 +30,8 @@ class QGSettingsInterface { public: enum Type { - REAL, // 持有真正的QGSettings指针 - FAKE // Mock类 + ImplType, // 持有真正的QGSettings指针 + MockType // Mock类 }; virtual ~QGSettingsInterface() {} diff --git a/frame/mockinterface/qgsettingsinterfaceimpl.cpp b/frame/mockinterface/qgsettingsinterfaceimpl.cpp index 3650743f7..a0ec88c03 100644 --- a/frame/mockinterface/qgsettingsinterfaceimpl.cpp +++ b/frame/mockinterface/qgsettingsinterfaceimpl.cpp @@ -36,7 +36,7 @@ QGSettingsInterfaceImpl::~QGSettingsInterfaceImpl() QGSettingsInterface::Type QGSettingsInterfaceImpl::type() { - return Type::REAL; + return Type::ImplType; } QGSettings *QGSettingsInterfaceImpl::gsettings() diff --git a/frame/mockinterface/qgsettingsinterfacemock.cpp b/frame/mockinterface/qgsettingsinterfacemock.cpp index 0d8593544..6f74360f9 100644 --- a/frame/mockinterface/qgsettingsinterfacemock.cpp +++ b/frame/mockinterface/qgsettingsinterfacemock.cpp @@ -35,7 +35,7 @@ QGSettingsInterfaceMock::~QGSettingsInterfaceMock() QGSettingsInterface::Type QGSettingsInterfaceMock::type() { - return Type::FAKE; + return Type::MockType; } QGSettings *QGSettingsInterfaceMock::gsettings()