fuzzer: Also serialize the AddDockWidget operation
This commit is contained in:
@@ -25,12 +25,15 @@
|
||||
#define KDDOCKWIDGETS_TESTING_H
|
||||
|
||||
#include "KDDockWidgets.h"
|
||||
#include "MainWindowBase.h"
|
||||
#include "DockWidgetBase.h"
|
||||
|
||||
#include <QSize>
|
||||
#include <QRect>
|
||||
#include <QVector>
|
||||
#include <QEvent>
|
||||
#include <QWidget>
|
||||
#include <QVariant>
|
||||
|
||||
/**
|
||||
* @file
|
||||
@@ -38,6 +41,8 @@
|
||||
*/
|
||||
|
||||
namespace KDDockWidgets {
|
||||
|
||||
|
||||
namespace Testing {
|
||||
|
||||
class WarningObserver
|
||||
@@ -46,6 +51,30 @@ namespace Testing {
|
||||
virtual void onFatal() = 0;
|
||||
};
|
||||
|
||||
struct AddDockWidgetParams {
|
||||
MainWindowBase *mainWindow;
|
||||
DockWidgetBase *dockWidget;
|
||||
DockWidgetBase *relativeTo;
|
||||
KDDockWidgets::Location location;
|
||||
KDDockWidgets::AddingOption addingOption;
|
||||
|
||||
QVariantMap toVariantMap() const
|
||||
{
|
||||
QVariantMap map;
|
||||
map["mainWindowName"] = mainWindow->uniqueName();
|
||||
map["dockWidgetName"] = dockWidget->uniqueName();
|
||||
|
||||
if (relativeTo)
|
||||
map["relativeToName"] = relativeTo->uniqueName();
|
||||
|
||||
map["location"] = location;
|
||||
map["addingOption"] = addingOption;
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
void setWarningObserver(WarningObserver *);
|
||||
|
||||
void installFatalMessageHandler();
|
||||
|
||||
@@ -5,5 +5,5 @@ add_executable(fuzzer
|
||||
Operations.cpp
|
||||
../Testing.cpp)
|
||||
|
||||
|
||||
set_property(TARGET fuzzer PROPERTY CXX_STANDARD 17)
|
||||
target_link_libraries(fuzzer kddockwidgets Qt5::Widgets Qt5::Test)
|
||||
|
||||
@@ -165,7 +165,7 @@ bool Fuzzer::getRandomBool(int truePercentage)
|
||||
return distrib(m_randomEngine) < truePercentage;
|
||||
}
|
||||
|
||||
Fuzzer::AddDockWidgetParams Fuzzer::getRandomAddDockWidgetParams()
|
||||
Testing::AddDockWidgetParams Fuzzer::getRandomAddDockWidgetParams()
|
||||
{
|
||||
AddDockWidgetParams params;
|
||||
|
||||
|
||||
@@ -133,19 +133,25 @@ public:
|
||||
{
|
||||
QVariantMap map;
|
||||
map[QStringLiteral("initialLayout")] = initialLayout.toVariantMap();
|
||||
|
||||
QVariantList operationsVariant;
|
||||
operationsVariant.reserve(operations.size());
|
||||
int i = 0;
|
||||
for (const auto &o : operations) {
|
||||
QVariantMap operationVariant = o->toVariantMap();
|
||||
if (operationVariant.isEmpty())
|
||||
break;
|
||||
|
||||
operationVariant["index"] = i;
|
||||
++i;
|
||||
operationsVariant << operationVariant;
|
||||
}
|
||||
|
||||
map[QStringLiteral("operations")] = operationsVariant;
|
||||
return map;
|
||||
}
|
||||
};
|
||||
|
||||
struct AddDockWidgetParams {
|
||||
MainWindowBase *mainWindow;
|
||||
DockWidgetBase *dockWidget;
|
||||
DockWidgetBase *relativeTo;
|
||||
KDDockWidgets::Location location;
|
||||
KDDockWidgets::AddingOption addingOption;
|
||||
};
|
||||
|
||||
|
||||
void runTest(const Test &);
|
||||
|
||||
explicit Fuzzer(FuzzerConfig config, QObject *parent = nullptr);
|
||||
@@ -158,7 +164,7 @@ public:
|
||||
|
||||
bool getRandomBool(int truePercentage = 50);
|
||||
|
||||
AddDockWidgetParams getRandomAddDockWidgetParams();
|
||||
Testing::AddDockWidgetParams getRandomAddDockWidgetParams();
|
||||
|
||||
KDDockWidgets::MainWindowBase* getRandomMainWindow();
|
||||
KDDockWidgets::DockWidgetBase* getRandomDockWidget(DockWidgetBase *excluding = nullptr);
|
||||
|
||||
@@ -47,6 +47,19 @@ void OperationBase::execute()
|
||||
execute_impl();
|
||||
}
|
||||
|
||||
QVariantMap OperationBase::toVariantMap() const
|
||||
{
|
||||
const QVariantMap params = paramsToVariantMap();
|
||||
if (params.isEmpty())
|
||||
return {};
|
||||
|
||||
QVariantMap map;
|
||||
map["type"] = m_operationType;
|
||||
map["params"] = params;
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
DockWidgetBase *OperationBase::dockByName(const QString &name) const
|
||||
{
|
||||
return DockRegistry::self()->dockByName(name);
|
||||
@@ -65,6 +78,7 @@ CloseViaDockWidgetAPI::CloseViaDockWidgetAPI(Fuzzer *fuzzer)
|
||||
void CloseViaDockWidgetAPI::execute_impl()
|
||||
{
|
||||
if (DockWidgetBase *dw = m_fuzzer->getRandomDockWidget()) {
|
||||
m_dockWidgetName = dw->uniqueName();
|
||||
auto fw = qobject_cast<FloatingWindow*>(dw->window());
|
||||
dw->close();
|
||||
if (fw && fw->beingDeleted())
|
||||
@@ -72,6 +86,14 @@ void CloseViaDockWidgetAPI::execute_impl()
|
||||
}
|
||||
}
|
||||
|
||||
QVariantMap CloseViaDockWidgetAPI::paramsToVariantMap() const
|
||||
{
|
||||
QVariantMap map;
|
||||
if (!m_dockWidgetName.isEmpty())
|
||||
map["dockWidgetName"] = m_dockWidgetName;
|
||||
return map;
|
||||
}
|
||||
|
||||
HideViaDockWidgetAPI::HideViaDockWidgetAPI(Fuzzer *fuzzer)
|
||||
: OperationBase(OperationType_HideViaDockWidgetAPI, fuzzer)
|
||||
{
|
||||
@@ -80,6 +102,7 @@ HideViaDockWidgetAPI::HideViaDockWidgetAPI(Fuzzer *fuzzer)
|
||||
void HideViaDockWidgetAPI::execute_impl()
|
||||
{
|
||||
if (DockWidgetBase *dw = m_fuzzer->getRandomDockWidget()) {
|
||||
m_dockWidgetName = dw->uniqueName();
|
||||
auto fw = qobject_cast<FloatingWindow*>(dw->window());
|
||||
dw->hide();
|
||||
if (fw && fw->beingDeleted())
|
||||
@@ -87,6 +110,14 @@ void HideViaDockWidgetAPI::execute_impl()
|
||||
}
|
||||
}
|
||||
|
||||
QVariantMap HideViaDockWidgetAPI::paramsToVariantMap() const
|
||||
{
|
||||
QVariantMap map;
|
||||
if (!m_dockWidgetName.isEmpty())
|
||||
map["dockWidgetName"] = m_dockWidgetName;
|
||||
return map;
|
||||
}
|
||||
|
||||
ShowViaDockWidgetAPI::ShowViaDockWidgetAPI(Fuzzer *fuzzer)
|
||||
: OperationBase(OperationType_ShowViaDockWidgetAPI, fuzzer)
|
||||
{
|
||||
@@ -94,8 +125,18 @@ ShowViaDockWidgetAPI::ShowViaDockWidgetAPI(Fuzzer *fuzzer)
|
||||
|
||||
void ShowViaDockWidgetAPI::execute_impl()
|
||||
{
|
||||
if (DockWidgetBase *dw = m_fuzzer->getRandomDockWidget())
|
||||
if (DockWidgetBase *dw = m_fuzzer->getRandomDockWidget()) {
|
||||
m_dockWidgetName = dw->uniqueName();
|
||||
dw->show();
|
||||
}
|
||||
}
|
||||
|
||||
QVariantMap ShowViaDockWidgetAPI::paramsToVariantMap() const
|
||||
{
|
||||
QVariantMap map;
|
||||
if (!m_dockWidgetName.isEmpty())
|
||||
map["dockWidgetName"] = m_dockWidgetName;
|
||||
return map;
|
||||
}
|
||||
|
||||
AddDockWidget::AddDockWidget(Fuzzer *fuzzer)
|
||||
@@ -105,10 +146,16 @@ AddDockWidget::AddDockWidget(Fuzzer *fuzzer)
|
||||
|
||||
void AddDockWidget::execute_impl()
|
||||
{
|
||||
const Fuzzer::AddDockWidgetParams params = m_fuzzer->getRandomAddDockWidgetParams();
|
||||
m_params = m_fuzzer->getRandomAddDockWidgetParams();
|
||||
|
||||
auto fw = qobject_cast<FloatingWindow*>(params.dockWidget->window());
|
||||
params.mainWindow->addDockWidget(params.dockWidget, params.location, params.relativeTo, params.addingOption);
|
||||
auto fw = qobject_cast<FloatingWindow*>(m_params->dockWidget->window());
|
||||
m_params->mainWindow->addDockWidget(m_params->dockWidget, m_params->location, m_params->relativeTo, m_params->addingOption);
|
||||
if (fw && fw->beingDeleted())
|
||||
Testing::waitForDeleted(fw);
|
||||
}
|
||||
|
||||
QVariantMap AddDockWidget::paramsToVariantMap() const
|
||||
{
|
||||
return m_params ? m_params->toVariantMap()
|
||||
: QVariantMap();
|
||||
}
|
||||
|
||||
@@ -25,11 +25,13 @@
|
||||
#define KDDOCKWIDGETS_TESTING_OPERATIONS_H
|
||||
|
||||
#include "KDDockWidgets.h"
|
||||
#include "../Testing.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QVector>
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
|
||||
namespace KDDockWidgets {
|
||||
|
||||
@@ -61,8 +63,12 @@ public:
|
||||
virtual ~OperationBase();
|
||||
|
||||
void execute();
|
||||
|
||||
QVariantMap toVariantMap() const;
|
||||
|
||||
protected:
|
||||
virtual void execute_impl() = 0;
|
||||
virtual QVariantMap paramsToVariantMap() const = 0;
|
||||
DockWidgetBase* dockByName(const QString &) const;
|
||||
MainWindowBase* mainWindowByName(const QString &) const;
|
||||
|
||||
@@ -77,6 +83,8 @@ public:
|
||||
|
||||
protected:
|
||||
void execute_impl() override;
|
||||
QVariantMap paramsToVariantMap() const override;
|
||||
QString m_dockWidgetName;
|
||||
};
|
||||
|
||||
class HideViaDockWidgetAPI : public OperationBase
|
||||
@@ -86,6 +94,8 @@ public:
|
||||
|
||||
protected:
|
||||
void execute_impl() override;
|
||||
QVariantMap paramsToVariantMap() const override;
|
||||
QString m_dockWidgetName;
|
||||
};
|
||||
|
||||
class ShowViaDockWidgetAPI : public OperationBase
|
||||
@@ -95,6 +105,8 @@ public:
|
||||
|
||||
protected:
|
||||
void execute_impl() override;
|
||||
QVariantMap paramsToVariantMap() const override;
|
||||
QString m_dockWidgetName;
|
||||
};
|
||||
|
||||
class AddDockWidget : public OperationBase
|
||||
@@ -104,6 +116,9 @@ public:
|
||||
|
||||
protected:
|
||||
void execute_impl() override;
|
||||
QVariantMap paramsToVariantMap() const override;
|
||||
private:
|
||||
std::optional<Testing::AddDockWidgetParams> m_params;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user