##// END OF EJS Templates
Completes fuzzing test structure by setting initial range for the time controller
Completes fuzzing test structure by setting initial range for the time controller

File last commit:

r1177:94f6e8c9cecc
r1178:324a3ee21c58
Show More
FuzzingOperations.cpp
64 lines | 2.2 KiB | text/x-c | CppLexer
/ plugins / amda / tests / FuzzingOperations.cpp
#include "FuzzingOperations.h"
#include "FuzzingUtils.h"
#include <Data/IDataProvider.h>
#include <Variable/Variable.h>
#include <Variable/VariableController.h>
#include <QUuid>
Q_LOGGING_CATEGORY(LOG_FuzzingOperations, "FuzzingOperations")
namespace {
struct CreateOperation : public IFuzzingOperation {
bool canExecute(std::shared_ptr<Variable> variable) const override {
// A variable can be created only if it doesn't exist yet
return variable == nullptr;
}
void execute(std::shared_ptr<Variable>& variable, VariableController &variableController, const Properties &properties) const override{
// Retrieves metadata pool from properties, and choose one of the metadata entries to associate it with the variable
auto metaDataPool = properties.value(METADATA_POOL_PROPERTY).value<MetadataPool>();
auto variableMetadata = RandomGenerator::instance().randomChoice(metaDataPool);
// Retrieves provider
auto variableProvider = properties.value(PROVIDER_PROPERTY).value<std::shared_ptr<IDataProvider>>();
auto variableName = QString{"Var_%1"}.arg(QUuid::createUuid().toString());
qCInfo(LOG_FuzzingOperations()) << "Creating variable" << variableName << "(metadata:" << variableMetadata << ")";
auto newVariable = variableController.createVariable(variableName, variableMetadata, variableProvider);
std::swap(variable, newVariable);
}
};
struct UnknownOperation : public IFuzzingOperation {
bool canExecute(std::shared_ptr<Variable> variable) const override {
Q_UNUSED(variable);
return false;
}
void execute(std::shared_ptr<Variable>& variable, VariableController &variableController, const Properties &properties) const override{
Q_UNUSED(variable);
Q_UNUSED(variableController);
Q_UNUSED(properties);
// Does nothing
}
};
} // namespace
std::unique_ptr<IFuzzingOperation> FuzzingOperationFactory::create(FuzzingOperationType type)
{
switch (type) {
case FuzzingOperationType::CREATE:
return std::make_unique<CreateOperation>();
default:
// Default case returns unknown operation
break;
}
return std::make_unique<UnknownOperation>();
}