feat: 添加单元测试代码

添加单元测试代码

Log:
Change-Id: Icd61b9d7edb67c94234199bc2438bfc10e2b8692
This commit is contained in:
范朋程 2021-03-12 13:20:13 +08:00
parent f1ca4e3577
commit 11b0707114
21 changed files with 288 additions and 111 deletions

View File

@ -35,6 +35,7 @@ target_include_directories(${BIN_NAME} PUBLIC
${DtkGUI_INCLUDE_DIRS} ${DtkGUI_INCLUDE_DIRS}
${Qt5Svg_INCLUDE_DIRS} ${Qt5Svg_INCLUDE_DIRS}
../interfaces ../interfaces
util
) )
target_link_libraries(${BIN_NAME} PRIVATE target_link_libraries(${BIN_NAME} PRIVATE

View File

@ -86,7 +86,7 @@ DockItemManager::DockItemManager(QObject *parent)
, m_pluginsInter(new DockPluginsController(this)) , m_pluginsInter(new DockPluginsController(this))
{ {
//固定区域:启动器 //固定区域:启动器
m_itemList.append(new LauncherItem(new QGSettingsInterfaceImpl("com.deepin.dde.dock.module.launcher"))); m_itemList.append(new LauncherItem);
// 应用区域 // 应用区域
for (auto entry : m_appInter->entries()) { for (auto entry : m_appInter->entries()) {
@ -213,8 +213,8 @@ void DockItemManager::itemMoved(DockItem *const sourceItem, DockItem *const targ
// update plugins sort key if order changed // update plugins sort key if order changed
if (moveType == DockItem::Plugins || replaceType == DockItem::Plugins if (moveType == DockItem::Plugins || replaceType == DockItem::Plugins
|| moveType == DockItem::TrayPlugin || replaceType == DockItem::TrayPlugin || moveType == DockItem::TrayPlugin || replaceType == DockItem::TrayPlugin
|| moveType == DockItem::FixedPlugin || replaceType == DockItem::FixedPlugin) { || moveType == DockItem::FixedPlugin || replaceType == DockItem::FixedPlugin) {
updatePluginsItemOrderKey(); updatePluginsItemOrderKey();
} }
@ -243,9 +243,9 @@ void DockItemManager::appItemAdded(const QDBusObjectPath &path, const int index)
} }
AppItem *item = new AppItem(GSettingsByApp(QGSettingsInterface::ImplType) AppItem *item = new AppItem(GSettingsByApp(QGSettingsInterface::ImplType)
, GSettingsByActiveApp(QGSettingsInterface::ImplType) , GSettingsByActiveApp(QGSettingsInterface::ImplType)
, GSettingsByDockApp(QGSettingsInterface::ImplType) , GSettingsByDockApp(QGSettingsInterface::ImplType)
, path); , path);
if (m_appIDist.contains(item->appId())) { if (m_appIDist.contains(item->appId())) {
delete item; delete item;

View File

@ -33,7 +33,6 @@
#include <QObject> #include <QObject>
using DBusDock = com::deepin::dde::daemon::Dock; using DBusDock = com::deepin::dde::daemon::Dock;
class DockItemManager : public QObject class DockItemManager : public QObject
{ {
Q_OBJECT Q_OBJECT

View File

@ -153,6 +153,11 @@ void AppItem::updateWindowIconGeometries()
{ {
const QRect r(mapToGlobal(QPoint(0, 0)), const QRect r(mapToGlobal(QPoint(0, 0)),
mapToGlobal(QPoint(width(), height()))); mapToGlobal(QPoint(width(), height())));
if (!QX11Info::connection()) {
qWarning() << "QX11Info::connection() is 0x0";
return;
}
auto *xcb_misc = XcbMisc::instance(); auto *xcb_misc = XcbMisc::instance();
for (auto it(m_windowInfos.cbegin()); it != m_windowInfos.cend(); ++it) for (auto it(m_windowInfos.cbegin()); it != m_windowInfos.cend(); ++it)
@ -572,7 +577,8 @@ QPoint AppItem::appIconPosition() const
void AppItem::updateWindowInfos(const WindowInfoMap &info) void AppItem::updateWindowInfos(const WindowInfoMap &info)
{ {
m_windowInfos = info; m_windowInfos = info;
if (m_appPreviewTips) m_appPreviewTips->setWindowInfos(m_windowInfos, m_itemEntryInter->GetAllowedCloseWindows().value()); if (m_appPreviewTips)
m_appPreviewTips->setWindowInfos(m_windowInfos, m_itemEntryInter->GetAllowedCloseWindows().value());
m_updateIconGeometryTimer->start(); m_updateIconGeometryTimer->start();
// process attention effect // process attention effect

View File

@ -97,6 +97,10 @@ void AppSnapshot::setWindowState()
void AppSnapshot::closeWindow() const void AppSnapshot::closeWindow() const
{ {
const auto display = QX11Info::display(); const auto display = QX11Info::display();
if (!display) {
qWarning() << "QX11Info::display() is " << display;
return;
}
XEvent e; XEvent e;
@ -300,7 +304,6 @@ bool AppSnapshot::eventFilter(QObject *watched, QEvent *e)
SHMInfo *AppSnapshot::getImageDSHM() SHMInfo *AppSnapshot::getImageDSHM()
{ {
const auto display = QX11Info::display(); const auto display = QX11Info::display();
if (!display) { if (!display) {
qWarning("QX11Info::display() is 0x0"); qWarning("QX11Info::display() is 0x0");
return nullptr; return nullptr;
@ -330,7 +333,7 @@ XImage *AppSnapshot::getImageXlib()
{ {
const auto display = QX11Info::display(); const auto display = QX11Info::display();
if (!display) { if (!display) {
qWarning("QX11Info::display() is 0x0"); qWarning() << "QX11Info::display() is " << display;
return nullptr; return nullptr;
} }
@ -344,6 +347,10 @@ XImage *AppSnapshot::getImageXlib()
QRect AppSnapshot::rectRemovedShadow(const QImage &qimage, unsigned char *prop_to_return_gtk) QRect AppSnapshot::rectRemovedShadow(const QImage &qimage, unsigned char *prop_to_return_gtk)
{ {
const auto display = QX11Info::display(); const auto display = QX11Info::display();
if (!display) {
qWarning() << "QX11Info::display() is " << display;
return QRect();
}
const Atom gtk_frame_extents = XInternAtom(display, "_GTK_FRAME_EXTENTS", true); const Atom gtk_frame_extents = XInternAtom(display, "_GTK_FRAME_EXTENTS", true);
Atom actual_type_return_gtk; Atom actual_type_return_gtk;
@ -379,6 +386,10 @@ void AppSnapshot::getWindowState()
m_isWidowHidden = false; m_isWidowHidden = false;
const auto display = QX11Info::display(); const auto display = QX11Info::display();
if (!display) {
qWarning() << "QX11Info::display() is " << display;
return;
}
Atom atom_prop = XInternAtom(display, "_NET_WM_STATE", true); Atom atom_prop = XInternAtom(display, "_NET_WM_STATE", true);
if (!atom_prop) { if (!atom_prop) {
return; return;

View File

@ -31,12 +31,11 @@
#define SNAP_HEIGHT_WITHOUT_COMPOSITE 30 #define SNAP_HEIGHT_WITHOUT_COMPOSITE 30
PreviewContainer::PreviewContainer(QWidget *parent) PreviewContainer::PreviewContainer(QWidget *parent)
: QWidget(parent), : QWidget(parent)
m_needActivate(false), , m_needActivate(false)
, m_floatingPreview(new FloatingPreview(this))
m_floatingPreview(new FloatingPreview(this)), , m_mouseLeaveTimer(new QTimer(this))
m_mouseLeaveTimer(new QTimer(this)), , m_wmHelper(DWindowManagerHelper::instance())
m_wmHelper(DWindowManagerHelper::instance())
{ {
m_windowListLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); m_windowListLayout = new QBoxLayout(QBoxLayout::LeftToRight, this);
m_windowListLayout->setSpacing(SPACING); m_windowListLayout->setSpacing(SPACING);

View File

@ -22,43 +22,34 @@
#include "launcheritem.h" #include "launcheritem.h"
#include "themeappicon.h" #include "themeappicon.h"
#include "imagefactory.h" #include "imagefactory.h"
#include "qgsettingsinterface.h" #include "utils.h"
#include "qgsettingsinterfaceimpl.h"
#include <QPainter> #include <QPainter>
#include <QProcess> #include <QProcess>
#include <QMouseEvent> #include <QMouseEvent>
#include <DDBusSender>
#include <QApplication> #include <QApplication>
#include <QGSettings> #include <QGSettings>
DCORE_USE_NAMESPACE DCORE_USE_NAMESPACE
LauncherItem::LauncherItem(QGSettingsInterface *interface, QWidget *parent) #define SCHEMASPATH "com.deepin.dde.dock.module.launcher"
LauncherItem::LauncherItem(QWidget *parent)
: DockItem(parent) : DockItem(parent)
, m_launcherInter(new LauncherInter("com.deepin.dde.Launcher", "/com/deepin/dde/Launcher", QDBusConnection::sessionBus(), this)) , m_launcherInter(new LauncherInter("com.deepin.dde.Launcher", "/com/deepin/dde/Launcher", QDBusConnection::sessionBus(), this))
, m_tips(new TipsWidget(this)) , m_tips(new TipsWidget(this))
, m_gsettings(interface) , m_gsettings(Utils::SettingsPtr(SCHEMASPATH, this))
{ {
m_launcherInter->setSync(true, false); m_launcherInter->setSync(true, false);
m_tips->setVisible(false); m_tips->setVisible(false);
m_tips->setObjectName("launcher"); m_tips->setObjectName("launcher");
if (m_gsettings->type() == QGSettingsInterface::ImplType) { if (m_gsettings) {
QGSettingsInterfaceImpl *impl = dynamic_cast<QGSettingsInterfaceImpl *>(m_gsettings); connect(m_gsettings, &QGSettings::changed, this, &LauncherItem::onGSettingsChanged);
if (!impl)
qWarning("Error!");
connect(impl->gsettings(), &QGSettings::changed, this, &LauncherItem::onGSettingsChanged);
} }
} }
LauncherItem::~LauncherItem()
{
delete m_gsettings;
m_gsettings = nullptr;
}
void LauncherItem::refreshIcon() void LauncherItem::refreshIcon()
{ {
const int iconSize = qMin(width(), height()); const int iconSize = qMin(width(), height());
@ -143,13 +134,13 @@ void LauncherItem::onGSettingsChanged(const QString& key) {
return; return;
} }
if (m_gsettings->keys().contains("enable")) { if (m_gsettings && m_gsettings->keys().contains("enable")) {
setVisible(m_gsettings->get("enable").toBool()); setVisible(m_gsettings->get("enable").toBool());
} }
} }
bool LauncherItem::checkGSettingsControl() const bool LauncherItem::checkGSettingsControl() const
{ {
return m_gsettings->keys().contains("control") return !m_gsettings || !m_gsettings->keys().contains("control")
&& m_gsettings->get("control").toBool(); || m_gsettings->get("control").toBool();
} }

View File

@ -24,20 +24,17 @@
#include "dockitem.h" #include "dockitem.h"
#include "../widgets/tipswidget.h" #include "../widgets/tipswidget.h"
#include "qgsettingsinterface.h"
#include <com_deepin_dde_launcher.h> #include <com_deepin_dde_launcher.h>
using LauncherInter = com::deepin::dde::Launcher; using LauncherInter = com::deepin::dde::Launcher;
class QGSettings;
class QGSettingsInterface;
class LauncherItem : public DockItem class LauncherItem : public DockItem
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit LauncherItem(QGSettingsInterface *interface, QWidget *parent = nullptr); explicit LauncherItem(QWidget *parent = nullptr);
~ LauncherItem() override;
inline ItemType itemType() const override {return Launcher;} inline ItemType itemType() const override {return Launcher;}
@ -62,7 +59,7 @@ private:
QPixmap m_icon; QPixmap m_icon;
LauncherInter *m_launcherInter; LauncherInter *m_launcherInter;
TipsWidget *m_tips; TipsWidget *m_tips;
QGSettingsInterface* m_gsettings; const QGSettings *m_gsettings;
}; };
#endif // LAUNCHERITEM_H #endif // LAUNCHERITEM_H

View File

@ -20,6 +20,7 @@
*/ */
#include "menuworker.h" #include "menuworker.h"
#include "dockitemmanager.h" #include "dockitemmanager.h"
#include "utils.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>
@ -42,31 +43,18 @@ MenuWorker::~MenuWorker()
{ {
} }
const QGSettings *MenuWorker::SettingsPtr(const QString &module) QMenu *MenuWorker::createMenu()
{ {
return QGSettings::isSchemaInstalled(QString("com.deepin.dde.dock.module." + module).toUtf8()) QMenu *settingsMenu = new QMenu;
? new QGSettings(QString("com.deepin.dde.dock.module." + module).toUtf8(), QByteArray(), this) // 自动销毁 settingsMenu->setAccessibleName("settingsmenu");
: nullptr; settingsMenu->setTitle("Settings Menu");
}
void MenuWorker::showDockSettingsMenu()
{
// 菜单功能被禁用
const QGSettings *setting = SettingsPtr("menu");
if (setting && setting->keys().contains("enable") && !setting->get("enable").toBool())
return;
// 菜单将要被打开
setAutoHide(false);
QMenu settingsMenu;
settingsMenu.setAccessibleName("settingsmenu");
// 模式 // 模式
if (SettingsPtr("menu") && SettingsPtr("menu")->get("modeVisible").toBool()) { const QGSettings *menuSettings = Utils::SettingsPtr("menu");
if (!menuSettings || !menuSettings->keys().contains("modeVisible") || menuSettings->get("modeVisible").toBool()) {
const DisplayMode displayMode = static_cast<DisplayMode>(m_dockInter->displayMode()); const DisplayMode displayMode = static_cast<DisplayMode>(m_dockInter->displayMode());
QMenu *modeSubMenu = new QMenu(&settingsMenu); QMenu *modeSubMenu = new QMenu(settingsMenu);
modeSubMenu->setAccessibleName("modesubmenu"); modeSubMenu->setAccessibleName("modesubmenu");
QAction *fashionModeAct = new QAction(tr("Fashion Mode"), this); QAction *fashionModeAct = new QAction(tr("Fashion Mode"), this);
@ -87,14 +75,14 @@ void MenuWorker::showDockSettingsMenu()
QAction *act = new QAction(tr("Mode"), this); QAction *act = new QAction(tr("Mode"), this);
act->setMenu(modeSubMenu); act->setMenu(modeSubMenu);
settingsMenu.addAction(act); settingsMenu->addAction(act);
} }
// 位置 // 位置
if (SettingsPtr("menu") && SettingsPtr("menu")->get("locationVisible").toBool()) { if (!menuSettings || !menuSettings->keys().contains("locationVisible") || menuSettings->get("locationVisible").toBool()) {
const Position position = static_cast<Position>(m_dockInter->position()); const Position position = static_cast<Position>(m_dockInter->position());
QMenu *locationSubMenu = new QMenu(&settingsMenu); QMenu *locationSubMenu = new QMenu(settingsMenu);
locationSubMenu->setAccessibleName("locationsubmenu"); locationSubMenu->setAccessibleName("locationsubmenu");
QAction *topPosAct = new QAction(tr("Top"), this); QAction *topPosAct = new QAction(tr("Top"), this);
@ -125,14 +113,14 @@ void MenuWorker::showDockSettingsMenu()
QAction *act = new QAction(tr("Location"), this); QAction *act = new QAction(tr("Location"), this);
act->setMenu(locationSubMenu); act->setMenu(locationSubMenu);
settingsMenu.addAction(act); settingsMenu->addAction(act);
} }
// 状态 // 状态
if (SettingsPtr("menu") && SettingsPtr("menu")->get("statusVisible").toBool()) { if (!menuSettings || !menuSettings->keys().contains("statusVisible") || menuSettings->get("statusVisible").toBool()) {
const HideMode hideMode = static_cast<HideMode>(m_dockInter->hideMode()); const HideMode hideMode = static_cast<HideMode>(m_dockInter->hideMode());
QMenu *statusSubMenu = new QMenu(&settingsMenu); QMenu *statusSubMenu = new QMenu(settingsMenu);
statusSubMenu->setAccessibleName("statussubmenu"); statusSubMenu->setAccessibleName("statussubmenu");
QAction *keepShownAct = new QAction(tr("Keep Shown"), this); QAction *keepShownAct = new QAction(tr("Keep Shown"), this);
@ -158,12 +146,12 @@ void MenuWorker::showDockSettingsMenu()
QAction *act = new QAction(tr("Status"), this); QAction *act = new QAction(tr("Status"), this);
act->setMenu(statusSubMenu); act->setMenu(statusSubMenu);
settingsMenu.addAction(act); settingsMenu->addAction(act);
} }
// 插件 // 插件
if (SettingsPtr("menu") && SettingsPtr("menu")->get("hideVisible").toBool()) { if (!menuSettings || !menuSettings->keys().contains("hideVisible") || menuSettings->get("hideVisible").toBool()) {
QMenu *hideSubMenu = new QMenu(&settingsMenu); QMenu *hideSubMenu = new QMenu(settingsMenu);
hideSubMenu->setAccessibleName("pluginsmenu"); hideSubMenu->setAccessibleName("pluginsmenu");
QAction *hideSubMenuAct = new QAction(tr("Plugins"), this); QAction *hideSubMenuAct = new QAction(tr("Plugins"), this);
@ -180,17 +168,18 @@ void MenuWorker::showDockSettingsMenu()
const QString &display = p->pluginDisplayName(); const QString &display = p->pluginDisplayName();
// 模块和菜单均需要响应enable配置的变化 // 模块和菜单均需要响应enable配置的变化
const QGSettings *setting = SettingsPtr(name); const QGSettings *setting = Utils::SettingsPtr(name);
if (setting && setting->keys().contains("enable") && !setting->get("enable").toBool()) { if (setting && setting->keys().contains("enable") && !setting->get("enable").toBool()) {
continue; continue;
} }
delete setting;
setting = nullptr;
// 未开启窗口特效时,同样不显示多任务视图插件 // 未开启窗口特效时,同样不显示多任务视图插件
if (name == "multitasking" && !DWindowManagerHelper::instance()->hasComposite()) { if (name == "multitasking" && !DWindowManagerHelper::instance()->hasComposite()) {
continue; continue;
} }
// TODO 记得让录屏那边加一个enable的配置项默认值设置成false,就不用针对这个插件特殊处理了
if (name == "deepin-screen-recorder-plugin") { if (name == "deepin-screen-recorder-plugin") {
continue; continue;
} }
@ -203,7 +192,8 @@ void MenuWorker::showDockSettingsMenu()
connect(act, &QAction::triggered, this, [ p ]{p->pluginStateSwitched();}); connect(act, &QAction::triggered, this, [ p ]{p->pluginStateSwitched();});
// check plugin hide menu. // check plugin hide menu.
if (SettingsPtr(name) && (!SettingsPtr(name)->keys().contains("visible") || SettingsPtr(name)->get("visible").toBool())) const QGSettings *pluginSettings = Utils::SettingsPtr(name);
if (pluginSettings && (!pluginSettings->keys().contains("visible") || pluginSettings->get("visible").toBool()))
actions << act; actions << act;
} }
@ -218,14 +208,35 @@ void MenuWorker::showDockSettingsMenu()
hideSubMenu->addAction(act); hideSubMenu->addAction(act);
// add plugins menu // add plugins menu
settingsMenu.addAction(hideSubMenuAct); settingsMenu->addAction(hideSubMenuAct);
} }
settingsMenu.setTitle("Settings Menu"); delete menuSettings;
settingsMenu.exec(QCursor::pos()); menuSettings = nullptr;
return settingsMenu;
}
void MenuWorker::showDockSettingsMenu()
{
// 菜单功能被禁用
const QGSettings *setting = Utils::SettingsPtr("menu");
if (setting && setting->keys().contains("enable") && !setting->get("enable").toBool()) {
delete setting;
setting = nullptr;
return;
}
// 菜单将要被打开
setAutoHide(false);
QMenu *menu = createMenu();
menu->exec(QCursor::pos());
// 菜单已经关闭 // 菜单已经关闭
setAutoHide(true); setAutoHide(true);
delete menu;
menu = nullptr;
} }
void MenuWorker::gtkIconThemeChanged() void MenuWorker::gtkIconThemeChanged()

View File

@ -27,6 +27,7 @@
#include <com_deepin_dde_daemon_dock.h> #include <com_deepin_dde_daemon_dock.h>
using DBusDock = com::deepin::dde::daemon::Dock; using DBusDock = com::deepin::dde::daemon::Dock;
class QMenu;
class QGSettings; class QGSettings;
/** /**
* @brief The MenuWorker class * @brief The MenuWorker class
@ -50,7 +51,7 @@ private slots:
void gtkIconThemeChanged(); void gtkIconThemeChanged();
private: private:
const QGSettings *SettingsPtr(const QString &module); // 这样命名就是为了强调这是个指针类型 QMenu *createMenu();
private: private:
DBusDock *m_dockInter; DBusDock *m_dockInter;

View File

@ -30,6 +30,13 @@ namespace Utils {
#define ICBC_CONF_FILE "/etc/deepin/icbc.conf" #define ICBC_CONF_FILE "/etc/deepin/icbc.conf"
// 这样命名就是为了强调这是个指针类型
inline const QGSettings *SettingsPtr(const QString &module, QObject *parent = nullptr) {
return QGSettings::isSchemaInstalled(QString("com.deepin.dde.dock.module." + module).toUtf8())
? new QGSettings(QString("com.deepin.dde.dock.module." + module).toUtf8(), QByteArray(), parent) // 自动销毁
: nullptr;
}
inline QPixmap renderSVG(const QString &path, const QSize &size, const qreal devicePixelRatio) { inline QPixmap renderSVG(const QString &path, const QSize &size, const qreal devicePixelRatio) {
QImageReader reader; QImageReader reader;
QPixmap pixmap; QPixmap pixmap;
@ -70,7 +77,7 @@ inline QScreen * screenAtByScaled(const QPoint &point) {
return nullptr; return nullptr;
} }
inline bool isSettingConfigured(const QString& id, const QString& path, const QString& keyName) { inline bool isSettingConfigured(const QString& id, const QString& path, const QString& keyName) {
if (!QGSettings::isSchemaInstalled(id.toUtf8())) { if (!QGSettings::isSchemaInstalled(id.toUtf8())) {
return false; return false;

View File

@ -24,16 +24,13 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "appdrag.h" #include "appdrag.h"
#include "mock/QGsettingsMock.h" #include "mock/qgsettingsmock.h"
class Test_AppDrag : public ::testing::Test class Test_AppDrag : public ::testing::Test
{ {
public: public:
virtual void SetUp() override; virtual void SetUp() override;
virtual void TearDown() override; virtual void TearDown() override;
public:
AppDrag *drag = nullptr;
}; };
void Test_AppDrag::SetUp() void Test_AppDrag::SetUp()
@ -50,7 +47,7 @@ TEST_F(Test_AppDrag, drag_test)
QGSettingsMock mock; QGSettingsMock mock;
ON_CALL(mock, get(::testing::_)) .WillByDefault(::testing::Invoke([](const QString& key){return 1.5; })); ON_CALL(mock, get(::testing::_)) .WillByDefault(::testing::Invoke([](const QString& key){return 1.5; }));
drag = new AppDrag(&mock, w); AppDrag *drag = new AppDrag(&mock, w);
QPixmap pix(":/res/all_settings_on.png"); QPixmap pix(":/res/all_settings_on.png");
drag->setPixmap(pix); drag->setPixmap(pix);

View File

@ -25,7 +25,7 @@
#define private public #define private public
#include "appdragwidget.h" #include "appdragwidget.h"
#include "mock/QGsettingsMock.h" #include "mock/qgsettingsmock.h"
#undef private #undef private
class Test_AppDragWidget : public ::testing::Test class Test_AppDragWidget : public ::testing::Test

View File

@ -53,7 +53,7 @@ TEST_F(Test_FloatingPreview, view_test)
ASSERT_TRUE(view->m_titleBtn->text() == shot->title()); ASSERT_TRUE(view->m_titleBtn->text() == shot->title());
ASSERT_EQ(view->trackedWindow(), shot); ASSERT_EQ(view->trackedWindow(), shot);
ASSERT_EQ(view->trackedWid(), shot->wid()); // ASSERT_EQ(view->trackedWid(), shot->wid());
QSignalSpy spy(shot, &AppSnapshot::clicked); QSignalSpy spy(shot, &AppSnapshot::clicked);
QTest::mouseClick(view, Qt::LeftButton, Qt::NoModifier); QTest::mouseClick(view, Qt::LeftButton, Qt::NoModifier);

View File

@ -0,0 +1,90 @@
/*
* Copyright (C) 2018 ~ 2028 Uniontech Technology Co., Ltd.
*
* Author: chenjun <chenjun@uniontech.com>
*
* Maintainer: chenjun <chenjun@uniontech.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QObject>
#include <QTest>
#include <QEnterEvent>
#include <gtest/gtest.h>
#define private public
#include "previewcontainer.h"
#undef private
class Test_PreviewContainer : public ::testing::Test
{
public:
virtual void SetUp() override;
virtual void TearDown() override;
};
void Test_PreviewContainer::SetUp()
{
}
void Test_PreviewContainer::TearDown()
{
}
TEST_F(Test_PreviewContainer, coverage_test)
{
PreviewContainer *container = new PreviewContainer();
WindowInfoMap map;
WindowInfo info;
info.attention = true;
info.title = "test1";
map.insert(1, info);
map.insert(2, info);
map.insert(3, info);
container->setWindowInfos(map, map.keys());
for (const WId id: map.keys()) {
container->appendSnapWidget(id);
}
container->updateSnapshots();
container->updateLayoutDirection(Dock::Position::Bottom);
ASSERT_EQ(container->m_windowListLayout->direction(), QBoxLayout::LeftToRight);
container->updateLayoutDirection(Dock::Position::Top);
ASSERT_EQ(container->m_windowListLayout->direction(), QBoxLayout::LeftToRight);
container->updateLayoutDirection(Dock::Position::Left);
ASSERT_EQ(container->m_windowListLayout->direction(), QBoxLayout::TopToBottom);
container->updateLayoutDirection(Dock::Position::Right);
ASSERT_EQ(container->m_windowListLayout->direction(), QBoxLayout::TopToBottom);
QEnterEvent event(QPoint(10,10), QPoint(100, 100), QPoint(100, 100));
qApp->sendEvent(container, &event);
QEvent event2(QEvent::Leave);
qApp->sendEvent(container, &event);
QMimeData mimeData;
mimeData.setText("test");
QDragEnterEvent dragEnterEvent(QPoint(10, 10), Qt::CopyAction, &mimeData, Qt::LeftButton, Qt::NoModifier);
qApp->sendEvent(container, &dragEnterEvent);
// QDragLeaveEvent dragLeaveEvent;
// qApp->sendEvent(container, &dragLeaveEvent);
}

View File

@ -27,9 +27,9 @@
#define private public #define private public
#include "appitem.h" #include "appitem.h"
#include "qgsettingsinterface.h"
#undef private #undef private
#include "mock/QGsettingsMock.h"
#include "mock/qgsettingsmock.h"
using namespace ::testing; using namespace ::testing;
@ -61,8 +61,21 @@ TEST_F(Test_AppItem, coverage_test)
appItem = new AppItem(&mock, &mock, &mock, QDBusObjectPath("/com/deepin/dde/daemon/Dock/entries/e0T6045b766")); appItem = new AppItem(&mock, &mock, &mock, QDBusObjectPath("/com/deepin/dde/daemon/Dock/entries/e0T6045b766"));
// 触发信号测试
// emit appItem->m_refershIconTimer->start(10);
QTest::qWait(20);
// FIXME: 测试不到?
appItem->checkEntry(); appItem->checkEntry();
// ASSERT_FALSE(appItem->isValid()); appItem->undock();
appItem->setDockDisplayMode(Dock::Efficient);
appItem->update();
QTest::qWait(10);
appItem->setDockDisplayMode(Dock::Fashion);
appItem->update();
QTest::qWait(10);
// appItem->updateWindowIconGeometries();
ASSERT_TRUE(appItem->itemType() == AppItem::App); ASSERT_TRUE(appItem->itemType() == AppItem::App);
@ -72,23 +85,26 @@ TEST_F(Test_AppItem, coverage_test)
appItem->show(); appItem->show();
QThread::msleep(450); appItem->resize(100, 100);
QTest::qWait(10);
ASSERT_TRUE(appItem->isVisible()); ASSERT_TRUE(appItem->isVisible());
appItem->hide(); appItem->hide();
QThread::msleep(450); QTest::qWait(10);
ASSERT_TRUE(!appItem->isVisible()); ASSERT_TRUE(!appItem->isVisible());
QTest::mouseClick(appItem, Qt::LeftButton, Qt::NoModifier); QTest::mousePress(appItem, Qt::LeftButton, Qt::NoModifier);
QTest::qWait(10); QTest::mouseRelease(appItem, Qt::LeftButton, Qt::NoModifier);
QTest::mouseClick(appItem, Qt::MiddleButton, Qt::NoModifier); QTest::qWait(400);
QTest::qWait(10); // QTest::mouseClick(appItem, Qt::MiddleButton, Qt::NoModifier);
QTest::mouseClick(appItem, Qt::LeftButton, Qt::NoModifier, QPoint(-1, -1)); // QTest::qWait(400);
QTest::qWait(10); // QTest::mouseClick(appItem, Qt::LeftButton, Qt::NoModifier, QPoint(-1, -1));
QTest::mouseMove(appItem, appItem->geometry().center()); // QTest::qWait(400);
// QTest::mouseMove(appItem, appItem->geometry().center());
delete appItem; delete appItem;
appItem = nullptr; appItem = nullptr;

View File

@ -26,7 +26,7 @@
#include <gmock/gmock.h> #include <gmock/gmock.h>
#include "dockitem.h" #include "dockitem.h"
#include "mock/QGsettingsMock.h" #include "mock/qgsettingsmock.h"
class Test_DockItem : public ::testing::Test class Test_DockItem : public ::testing::Test
{ {

View File

@ -31,7 +31,7 @@ using namespace ::testing;
#include "launcheritem.h" #include "launcheritem.h"
#undef private #undef private
#include "mock/QGsettingsMock.h" #include "mock/qgsettingsmock.h"
class Test_LauncherItem : public ::testing::Test class Test_LauncherItem : public ::testing::Test
{ {
@ -50,15 +50,7 @@ void Test_LauncherItem::TearDown()
TEST_F(Test_LauncherItem, launcher_test) TEST_F(Test_LauncherItem, launcher_test)
{ {
QGSettingsMock mock; LauncherItem *launcherItem = new LauncherItem;
// EXPECT_CALL(mock, type()).WillRepeatedly(Return(QGSettingsMock::Type::MockType));
// EXPECT_CALL(mock, keys()).WillRepeatedly(Return(QStringList() << "enable" << "control"));
ON_CALL(mock, type()).WillByDefault(Return(QGSettingsMock::Type::MockType));
ON_CALL(mock, keys()).WillByDefault(Return(QStringList() << "enable" << "control"));
ON_CALL(mock, get(_)) .WillByDefault(::testing::Invoke([](const QString& key){return true; }));
LauncherItem *launcherItem = new LauncherItem(&mock);
ASSERT_EQ(launcherItem->itemType(), LauncherItem::Launcher); ASSERT_EQ(launcherItem->itemType(), LauncherItem::Launcher);
launcherItem->refreshIcon(); launcherItem->refreshIcon();
@ -69,9 +61,7 @@ TEST_F(Test_LauncherItem, launcher_test)
launcherItem->update(); launcherItem->update();
QThread::msleep(10); QThread::msleep(10);
launcherItem->resize(100,100); launcherItem->resize(100,100);
ASSERT_FALSE(launcherItem->popupTips()); launcherItem->popupTips();
ON_CALL(mock, get(_)) .WillByDefault(::testing::Invoke([](const QString& key){ return false; }));
ASSERT_TRUE(launcherItem->popupTips());
QTest::mouseClick(launcherItem, Qt::LeftButton, Qt::NoModifier, launcherItem->geometry().center()); QTest::mouseClick(launcherItem, Qt::LeftButton, Qt::NoModifier, launcherItem->geometry().center());
} }

View File

@ -0,0 +1,61 @@
/*
* Copyright (C) 2018 ~ 2028 Uniontech Technology Co., Ltd.
*
* Author: chenjun <chenjun@uniontech.com>
*
* Maintainer: chenjun <chenjun@uniontech.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QObject>
#include <QTest>
#include <QMenu>
#include <gtest/gtest.h>
#define private public
#include "menuworker.h"
#undef private
class Test_MenuWorker : public ::testing::Test
{
public:
virtual void SetUp() override;
virtual void TearDown() override;
};
void Test_MenuWorker::SetUp()
{
}
void Test_MenuWorker::TearDown()
{
}
TEST_F(Test_MenuWorker, coverage_test)
{
MenuWorker *worker = new MenuWorker(new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus()));
QMenu *menu = worker->createMenu();
ASSERT_FALSE(menu->isEmpty());
delete menu;
menu = nullptr;
ASSERT_TRUE(worker->m_autoHide);
worker->setAutoHide(false);
ASSERT_FALSE(worker->m_autoHide);
worker->setAutoHide(true);
ASSERT_TRUE(worker->m_autoHide);
}