diff --git a/tests/fuzzer/Fuzzer.cpp b/tests/fuzzer/Fuzzer.cpp index 612d4276..f0c86fe1 100644 --- a/tests/fuzzer/Fuzzer.cpp +++ b/tests/fuzzer/Fuzzer.cpp @@ -254,33 +254,10 @@ QPoint Fuzzer::getRandomPos() OperationBase::Ptr Fuzzer::getRandomOperation() { - Testing::Operations::OperationBase::Ptr operation; - std::uniform_int_distribution<> operationDistrib(OperationType_None + 1, OperationType_Count - 1); auto operationType = OperationType(operationDistrib(m_randomEngine)); - switch (operationType) { - case OperationType_CloseViaDockWidgetAPI: - operation = OperationBase::Ptr(new CloseViaDockWidgetAPI(this)); - break; - case OperationType_HideViaDockWidgetAPI: - operation = OperationBase::Ptr(new HideViaDockWidgetAPI(this)); - break; - case OperationType_ShowViaDockWidgetAPI: - operation = OperationBase::Ptr(new ShowViaDockWidgetAPI(this)); - break; - case OperationType_AddDockWidget: - operation = OperationBase::Ptr(new AddDockWidget(this)); - break; - case OperationType_AddDockWidgetAsTab: - operation = OperationBase::Ptr(new AddDockWidgetAsTab(this)); - break; - case OperationType_None: - case OperationType_Count: - break; - } - - return operation; + return OperationBase::newOperation(this, operationType); } Fuzzer::Test Fuzzer::generateRandomTest() diff --git a/tests/fuzzer/Operations.cpp b/tests/fuzzer/Operations.cpp index a89f3b22..da3cbca9 100644 --- a/tests/fuzzer/Operations.cpp +++ b/tests/fuzzer/Operations.cpp @@ -64,17 +64,37 @@ QVariantMap OperationBase::toVariantMap() const OperationBase::Ptr OperationBase::fromVariantMap(Fuzzer *fuzzer, const QVariantMap &map) { - OperationBase::Ptr ptr; - if (!map.contains("type") || !map.contains("params")) { qDebug() << Q_FUNC_INFO << "Invalid map"; return {}; } auto operationType = OperationType(map["type"].toInt()); - switch (operationType) { + + OperationBase::Ptr ptr = OperationBase::newOperation(fuzzer, operationType); + if (ptr) { + + const QVariantMap params = map["params"].toMap(); + if (params.isEmpty()) { + qDebug() << Q_FUNC_INFO << "Invalid params"; + } else { + ptr->fillParamsFromVariantMap(params); + } + } else { + qDebug() << Q_FUNC_INFO << "Failed to fill params"; + } + + return ptr; +} + +OperationBase::Ptr OperationBase::newOperation(Fuzzer *fuzzer, OperationType type) +{ + OperationBase::Ptr ptr; + + switch (type) { case OperationType_Count: case OperationType_None: + qDebug() << Q_FUNC_INFO << "Invalid type"; break; case OperationType_CloseViaDockWidgetAPI: ptr = OperationBase::Ptr(new CloseViaDockWidgetAPI(fuzzer)); @@ -93,18 +113,6 @@ OperationBase::Ptr OperationBase::fromVariantMap(Fuzzer *fuzzer, const QVariantM break; } - if (ptr) { - - const QVariantMap params = map["params"].toMap(); - if (params.isEmpty()) { - qDebug() << Q_FUNC_INFO << "Invalid params"; - } else { - ptr->fillParamsFromVariantMap(params); - } - } else { - qDebug() << Q_FUNC_INFO << "Failed to fill params"; - } - return ptr; } diff --git a/tests/fuzzer/Operations.h b/tests/fuzzer/Operations.h index 18c0362c..dd1045e8 100644 --- a/tests/fuzzer/Operations.h +++ b/tests/fuzzer/Operations.h @@ -67,6 +67,7 @@ public: QVariantMap toVariantMap() const; static OperationBase::Ptr fromVariantMap(Fuzzer *fuzzer, const QVariantMap &); + static OperationBase::Ptr newOperation(Fuzzer *fuzzer, OperationType); protected: virtual void execute_impl() = 0;