diff --git a/core/tests/DataSource/DataSourceItemBuilder.cpp b/core/tests/DataSource/DataSourceItemBuilder.cpp new file mode 100644 index 0000000..c3ff319 --- /dev/null +++ b/core/tests/DataSource/DataSourceItemBuilder.cpp @@ -0,0 +1,73 @@ +#include "DataSourceItemBuilder.h" + +DataSourceItemBuilder &DataSourceItemBuilder::root(const QString &name) +{ + m_Root = std::make_shared(DataSourceItemType::NODE, name); + m_Items.push(m_Root.get()); + return *this; +} + +DataSourceItemBuilder &DataSourceItemBuilder::root(QVariantHash data) +{ + m_Root = std::make_shared(DataSourceItemType::NODE, data); + m_Items.push(m_Root.get()); + return *this; +} + +DataSourceItemBuilder &DataSourceItemBuilder::node(const QString &name) +{ + return append(DataSourceItemType::NODE, name); +} + +DataSourceItemBuilder &DataSourceItemBuilder::node(QVariantHash data) +{ + return append(DataSourceItemType::NODE, std::move(data)); +} + +DataSourceItemBuilder &DataSourceItemBuilder::product(const QString &name) +{ + return append(DataSourceItemType::PRODUCT, name); +} + +DataSourceItemBuilder &DataSourceItemBuilder::product(QVariantHash data) +{ + return append(DataSourceItemType::PRODUCT, std::move(data)); +} + +DataSourceItemBuilder &DataSourceItemBuilder::component(const QString &name) +{ + return append(DataSourceItemType::COMPONENT, name); +} + +DataSourceItemBuilder &DataSourceItemBuilder::component(QVariantHash data) +{ + return append(DataSourceItemType::COMPONENT, std::move(data)); +} + +DataSourceItemBuilder &DataSourceItemBuilder::end() +{ + m_Items.pop(); + return *this; +} + +std::shared_ptr DataSourceItemBuilder::build() +{ + return m_Root; +} + +DataSourceItemBuilder &DataSourceItemBuilder::append(DataSourceItemType type, const QString &name) +{ + append(type, QVariantHash{{DataSourceItem::NAME_DATA_KEY, name}}); + return *this; +} + +DataSourceItemBuilder &DataSourceItemBuilder::append(DataSourceItemType type, QVariantHash data) +{ + auto parentItem = m_Items.top(); + + auto insertIndex = parentItem->childCount(); + parentItem->appendChild(std::make_unique(type, std::move(data))); + + m_Items.push(parentItem->child(insertIndex)); + return *this; +} diff --git a/core/tests/DataSource/DataSourceItemBuilder.h b/core/tests/DataSource/DataSourceItemBuilder.h new file mode 100644 index 0000000..ce675a4 --- /dev/null +++ b/core/tests/DataSource/DataSourceItemBuilder.h @@ -0,0 +1,45 @@ +#ifndef SCIQLOP_DATASOURCEITEMBUILDER_H +#define SCIQLOP_DATASOURCEITEMBUILDER_H + +#include + +#include +#include + +/** + * @brief The DataSourceItemBuilder class aims to facilitate the creation of a DataSourceItem for unit tests + * @sa DataSourceItem + */ +class DataSourceItemBuilder { +public: + /// Inits root item + DataSourceItemBuilder & root(const QString &name); + DataSourceItemBuilder & root(QVariantHash data); + + /// Adds node into the current item + DataSourceItemBuilder & node(const QString &name); + DataSourceItemBuilder & node(QVariantHash data); + + /// Adds product into the current item + DataSourceItemBuilder & product(const QString &name); + DataSourceItemBuilder & product(QVariantHash data); + + /// Adds component into the current item + DataSourceItemBuilder & component(const QString &name); + DataSourceItemBuilder & component(QVariantHash data); + + /// Closes the build of the current item + DataSourceItemBuilder& end(); + + /// Creates the DataSourceItem + std::shared_ptr build(); + +private: + DataSourceItemBuilder& append(DataSourceItemType type, const QString &name); + DataSourceItemBuilder& append(DataSourceItemType type, QVariantHash data); + + std::shared_ptr m_Root{nullptr}; + std::stack m_Items; +}; + +#endif // SCIQLOP_DATASOURCEITEMBUILDER_H diff --git a/core/tests/meson.build b/core/tests/meson.build index e03a89d..ec2a714 100644 --- a/core/tests/meson.build +++ b/core/tests/meson.build @@ -20,7 +20,9 @@ amdatest_sources = [ 'Data/DataSeriesBuilders.h', 'Data/DataSeriesBuilders.cpp', 'Data/DataSeriesTestsUtils.h', - 'Data/DataSeriesTestsUtils.cpp' + 'Data/DataSeriesTestsUtils.cpp', + 'DataSource/DataSourceItemBuilder.h', + 'DataSource/DataSourceItemBuilder.cpp' ] foreach unit_test : tests