test: Coverage for AboutDialog.cpp
This commit is contained in:
parent
ce35234f18
commit
c630ad0952
7 changed files with 132 additions and 11 deletions
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
#include "MainWindow.h"
|
#include "MainWindow.h"
|
||||||
|
|
||||||
#include "AboutDialog.h"
|
|
||||||
#include "ServerConfigDialog.h"
|
#include "ServerConfigDialog.h"
|
||||||
#include "common/constants.h"
|
#include "common/constants.h"
|
||||||
#include "gui/Logger.h"
|
#include "gui/Logger.h"
|
||||||
|
|
@ -26,6 +25,7 @@
|
||||||
#include "gui/constants.h"
|
#include "gui/constants.h"
|
||||||
#include "gui/core/CoreProcess.h"
|
#include "gui/core/CoreProcess.h"
|
||||||
#include "gui/diagnostic.h"
|
#include "gui/diagnostic.h"
|
||||||
|
#include "gui/dialogs/AboutDialog.h"
|
||||||
#include "gui/dialogs/SettingsDialog.h"
|
#include "gui/dialogs/SettingsDialog.h"
|
||||||
#include "gui/messages.h"
|
#include "gui/messages.h"
|
||||||
#include "gui/string_utils.h"
|
#include "gui/string_utils.h"
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,20 @@
|
||||||
|
|
||||||
using namespace deskflow::gui;
|
using namespace deskflow::gui;
|
||||||
|
|
||||||
AboutDialog::AboutDialog(MainWindow *parent)
|
//
|
||||||
|
// AboutDialog::Deps
|
||||||
|
//
|
||||||
|
|
||||||
|
bool AboutDialog::Deps::isDarkMode() const { return ::isDarkMode(); }
|
||||||
|
|
||||||
|
//
|
||||||
|
// AboutDialog
|
||||||
|
//
|
||||||
|
|
||||||
|
AboutDialog::AboutDialog(QMainWindow *parent, std::shared_ptr<Deps> deps)
|
||||||
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
||||||
Ui::AboutDialogBase() {
|
Ui::AboutDialogBase(),
|
||||||
|
m_pDeps(deps) {
|
||||||
|
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
|
|
@ -65,7 +76,7 @@ void AboutDialog::setLogo(const char *const &filename) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AboutDialog::updateLogo() const {
|
void AboutDialog::updateLogo() const {
|
||||||
if (isDarkMode()) {
|
if (m_pDeps->isDarkMode()) {
|
||||||
qDebug("showing dark logo");
|
qDebug("showing dark logo");
|
||||||
setLogo(":/image/logo-dark.png");
|
setLogo(":/image/logo-dark.png");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -18,25 +18,32 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "MainWindow.h"
|
|
||||||
#include "gui/VersionChecker.h"
|
|
||||||
#include "ui_AboutDialogBase.h"
|
#include "ui_AboutDialogBase.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QMainWindow>
|
||||||
|
|
||||||
class QWidget;
|
class QWidget;
|
||||||
class QString;
|
class QString;
|
||||||
|
|
||||||
class AboutDialog : public QDialog, public Ui::AboutDialogBase {
|
class AboutDialog : public QDialog, public Ui::AboutDialogBase {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AboutDialog(MainWindow *parent);
|
struct Deps {
|
||||||
|
virtual ~Deps() = default;
|
||||||
|
virtual bool isDarkMode() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit AboutDialog(
|
||||||
|
QMainWindow *parent,
|
||||||
|
std::shared_ptr<Deps> deps = std::make_shared<Deps>());
|
||||||
int exec() override;
|
int exec() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VersionChecker m_versionChecker;
|
std::shared_ptr<Deps> m_pDeps;
|
||||||
|
|
||||||
void updateLogo() const;
|
void updateLogo() const;
|
||||||
void setLogo(const char *const &filename) const;
|
void setLogo(const char *const &filename) const;
|
||||||
|
QString importantDevelopers() const;
|
||||||
virtual QString importantDevelopers() const;
|
|
||||||
};
|
};
|
||||||
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
macro(config_all_tests)
|
macro(config_all_tests)
|
||||||
|
|
||||||
|
# Required to load images from .qrc file.
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
|
||||||
set(base_dir ${PROJECT_SOURCE_DIR})
|
set(base_dir ${PROJECT_SOURCE_DIR})
|
||||||
set(src_dir ${base_dir}/src)
|
set(src_dir ${base_dir}/src)
|
||||||
set(test_base_dir ${src_dir}/test)
|
set(test_base_dir ${src_dir}/test)
|
||||||
|
|
@ -66,6 +69,8 @@ macro(set_sources)
|
||||||
list(APPEND sources ${PROJECT_BINARY_DIR}/src/version.rc)
|
list(APPEND sources ${PROJECT_BINARY_DIR}/src/version.rc)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
list(APPEND sources ${GUI_QRC_FILE})
|
||||||
|
|
||||||
replace_platform_sources()
|
replace_platform_sources()
|
||||||
replace_arch_sources()
|
replace_arch_sources()
|
||||||
|
|
||||||
|
|
|
||||||
98
src/test/unittests/gui/dialogs/AboutDialogTests.cpp
Normal file
98
src/test/unittests/gui/dialogs/AboutDialogTests.cpp
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Deskflow -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2024 Symless Ltd.
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file LICENSE that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// `TestQtFullApp` freezes on Windows CI, so exclude this test for now.
|
||||||
|
#ifndef WIN32
|
||||||
|
|
||||||
|
#include "common/copyright.h"
|
||||||
|
#include "gui/dialogs/AboutDialog.h"
|
||||||
|
#include "shared/gui/TestQtFullApp.h"
|
||||||
|
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
using namespace testing;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class DepsMock : public AboutDialog::Deps {
|
||||||
|
public:
|
||||||
|
MOCK_METHOD(bool, isDarkMode, (), (const, override));
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
TEST(AboutDialogTests, exec_setsDevelopersLabel) {
|
||||||
|
TestQtFullApp app;
|
||||||
|
const auto deps = std::make_shared<NiceMock<DepsMock>>();
|
||||||
|
AboutDialog aboutDialog(nullptr, deps);
|
||||||
|
QTimer::singleShot(0, &aboutDialog, &QDialog::accept);
|
||||||
|
|
||||||
|
aboutDialog.exec();
|
||||||
|
|
||||||
|
const auto label = aboutDialog.findChild<QLabel *>("m_pDevelopersLabel");
|
||||||
|
EXPECT_TRUE(label->text().contains("Chris Schoeneman"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(AboutDialogTests, exec_setsCopyrightLabel) {
|
||||||
|
TestQtFullApp app;
|
||||||
|
const auto deps = std::make_shared<NiceMock<DepsMock>>();
|
||||||
|
AboutDialog aboutDialog(nullptr, deps);
|
||||||
|
QTimer::singleShot(0, &aboutDialog, &QDialog::accept);
|
||||||
|
|
||||||
|
aboutDialog.exec();
|
||||||
|
|
||||||
|
EXPECT_EQ(
|
||||||
|
aboutDialog.findChild<QLabel *>("m_pCopyrightLabel")->text(),
|
||||||
|
QString::fromStdString(deskflow::copyright()));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(AboutDialogTests, exec_inDarkMode_usesDarkLogo) {
|
||||||
|
TestQtFullApp app;
|
||||||
|
const auto deps = std::make_shared<NiceMock<DepsMock>>();
|
||||||
|
AboutDialog aboutDialog(nullptr, deps);
|
||||||
|
QTimer::singleShot(0, &aboutDialog, &QDialog::accept);
|
||||||
|
EXPECT_CALL(*deps, isDarkMode()).WillOnce(Return(true));
|
||||||
|
|
||||||
|
aboutDialog.exec();
|
||||||
|
|
||||||
|
const QPixmap expectedLogo(":/image/logo-dark.png");
|
||||||
|
const auto actualLogo =
|
||||||
|
aboutDialog.findChild<QLabel *>("m_pLabel_Logo")->pixmap();
|
||||||
|
EXPECT_FALSE(actualLogo.isNull());
|
||||||
|
EXPECT_EQ(actualLogo.toImage(), expectedLogo.toImage());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(AboutDialogTests, exec_notInDarkMode_usesLightLogo) {
|
||||||
|
TestQtFullApp app;
|
||||||
|
const auto deps = std::make_shared<NiceMock<DepsMock>>();
|
||||||
|
AboutDialog aboutDialog(nullptr, deps);
|
||||||
|
QTimer::singleShot(0, &aboutDialog, &QDialog::accept);
|
||||||
|
EXPECT_CALL(*deps, isDarkMode()).WillOnce(Return(false));
|
||||||
|
|
||||||
|
aboutDialog.exec();
|
||||||
|
|
||||||
|
const QPixmap expectedLogo(":/image/logo-light.png");
|
||||||
|
const auto actualLogo =
|
||||||
|
aboutDialog.findChild<QLabel *>("m_pLabel_Logo")->pixmap();
|
||||||
|
EXPECT_FALSE(actualLogo.isNull());
|
||||||
|
EXPECT_EQ(actualLogo.toImage(), expectedLogo.toImage());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// `TestQtFullApp` freezes on windows ci, so exclude this test for now.
|
// `TestQtFullApp` freezes on Windows CI, so exclude this test for now.
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
|
||||||
#include "gui/core/CoreProcess.h"
|
#include "gui/core/CoreProcess.h"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue