#include "AccessoriesSwitchProvider.hpp"
+#include <Ecore.h>
+
AccessoriesSwitchProvider::AccessoriesSwitchProvider()
: SwitchProvider("AccessoriesSwitchProvider"), keys(
{"XF86AddFavorite",
})
{
for (auto &key : keys)
- switches.emplace_back(std::make_shared<Switch>(key, shared_from_this()));
+ switches.emplace_back(std::make_shared<Switch>(key, switchProviderId));
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, onEcoreEventKeyDownCb, this);
}
-SwitchProvider::SwitchCollection AccessoriesSwitchProvider::findAllSwitches()
+SwitchProvider::SwitchCollection AccessoriesSwitchProvider::findAllSwitches() const
{
return switches;
}
-std::shared_ptr<Switch> AccessoriesSwitchProvider::findSwitchById(const std::string &id)
+std::shared_ptr<Switch> AccessoriesSwitchProvider::findSwitchById(const std::string &switchId) const
{
for (auto &sw : switches) {
- if (sw->getId()->getGlobalId() == id)
+ if (sw->getId()->getGlobalId() == switchId)
return sw;
}
Eina_Bool AccessoriesSwitchProvider::onEcoreEventKeyDownCb(void *data, int type, void *ev)
{
auto event = static_cast<Ecore_Event_Key *>(ev);
- std::string id(event->key);
+ std::string keyId(event->key);
auto accessoriesSwitchProvider = reinterpret_cast<AccessoriesSwitchProvider*>(data);
- auto sw = accessoriesSwitchProvider->findSwitchById(id);
+ auto switchId = SwitchId(keyId, accessoriesSwitchProvider->getId());
+ auto sw = accessoriesSwitchProvider->findSwitchById(switchId.getGlobalId());
if (sw)
accessoriesSwitchProvider->notify(sw);
#include <string>
#include <memory>
-class AccessoriesSwitchProvider : public SwitchProvider, std::enable_shared_from_this<AccessoriesSwitchProvider>
+class AccessoriesSwitchProvider : public SwitchProvider
{
public:
AccessoriesSwitchProvider();
- SwitchCollection findAllSwitches() override;
- std::shared_ptr<Switch> findSwitchById(const std::string &id) override;
+ SwitchCollection findAllSwitches() const override;
+ std::shared_ptr<Switch> findSwitchById(const std::string &switchId) const override;
private:
static Eina_Bool onEcoreEventKeyDownCb(void *data, int type, void *ev);
: SwitchProvider("CompositeSwitchProvider")
{}
-CompositeSwitchProvider::SwitchCollection CompositeSwitchProvider::findAllSwitches()
+CompositeSwitchProvider::SwitchCollection CompositeSwitchProvider::findAllSwitches() const
{
SwitchCollection result;
return result;
}
-std::shared_ptr<Switch> CompositeSwitchProvider::findSwitchById(const std::string &id)
+std::shared_ptr<Switch> CompositeSwitchProvider::findSwitchById(const std::string &id) const
{
for (auto &provider : providers) {
auto sw = provider->findSwitchById(id);
public:
CompositeSwitchProvider();
- SwitchCollection findAllSwitches() override;
- std::shared_ptr<Switch> findSwitchById(const std::string &id) override;
+ SwitchCollection findAllSwitches() const override;
+ std::shared_ptr<Switch> findSwitchById(const std::string &id) const override;
void add(std::shared_ptr<SwitchProvider> provider);
std::vector<std::shared_ptr<SwitchProvider>> getProviders();
-#ifndef CONDITION_HPP_
-#define CONDITION_HPP_
+#ifndef CONDITION_HPP
+#define CONDITION_HPP
+
+#include <memory>
template<typename T>
class Condition {
public:
- virtual ~Condition(){};
+ virtual ~Condition() = default;
virtual bool matching(const T *item) const = 0;
+ virtual std::shared_ptr<T> getItem() const = 0;
};
#endif
bool matching(const T *item) const override {
return true;
}
+
+ std::shared_ptr<T> getItem() const override {
+ return nullptr;
+ }
};
#endif
+++ /dev/null
-#ifndef CONDITION_ANY_HPP
-#define CONDITION_ANY_HPP
-
-#include "Condition.hpp"
-
-template<typename T>
-class ConditionAny : public Condition<T>
-{
-public:
- ConditionAny(std::vector<std::shared_ptr<T>> items)
- : items(std::move(items))
- {}
-
- bool matching(const T* item) const override {
- for (auto &it : items)
- if (*item == *it)
- return true;
- return false;
- }
-
-private:
- std::vector<std::shared_ptr<T>> items;
-};
-
-#endif
class ConditionEqual : public Condition<T>
{
public:
- ConditionEqual(std::shared_ptr<T> item)
- :item(std::move(item))
+ ConditionEqual(const std::shared_ptr<T> &item)
+ :item(item)
{}
bool matching(const T *item) const override {
return *item == *(this->item);
}
+ std::shared_ptr<T> getItem() const override {
+ return item;
+ }
+
private:
- std::shared_ptr<T> item;
+ const std::shared_ptr<T> item;
};
#endif
-#ifndef CONFIGURATION_HPP_
-#define CONFIGURATION_HPP_
+#ifndef CONFIGURATION_HPP
+#define CONFIGURATION_HPP
#include "Subject.hpp"
#include "SwitchConfigurationItem.hpp"
-#ifndef OBSERVER_HPP_
-#define OBSERVER_HPP_
+#ifndef OBSERVER_HPP
+#define OBSERVER_HPP
-#include "universalswitch.hpp"
+#include "UniversalSwitchLog.hpp"
#include <memory>
template<typename T>
class Observer {
public:
- void update(std::shared_ptr<T> item) {
- INFO("updated: %p", item.get());
- }
+ virtual void update(const std::shared_ptr<T> &item) = 0;
};
#endif
#include "QueryBuilder.hpp"
-#include "universalswitch.hpp"
+#include "UniversalSwitchLog.hpp"
QueryBuilder &QueryBuilder::select(const std::initializer_list<std::string> &list) {
query << "select ";
}
QueryBuilder &QueryBuilder::from(const std::string &s) {
- query << "from " << s << " ";
+ query << " from " << s << " ";
printDebug();
return *this;
#include "QueryBuilder.hpp"
-SQLiteConfiguration &SQLiteConfiguration::instance()
-{
- static SQLiteConfiguration instance;
- return instance;
-}
-
-SQLiteConfiguration::SQLiteConfiguration()
- : password("UniversalSwitchPassword"), dbName("UniversalSwitch.db"), tableName("`UNIVERSAL_SWITCH`"),
- switchIdCol("`SWITCH_ID`"), /*providerIdCol("`PROVIDER_ID`"),*/ userNameCol("`USER_NAME`"),
+SQLiteConfiguration::SQLiteConfiguration(bool createInMemory)
+ : password("UniversalSwitchPassword"), dbName(createInMemory ? ":memory:" : "UniversalSwitch.db"), tableName("`UNIVERSAL_SWITCH`"),
+ switchIdCol("`SWITCH_ID`"), userNameCol("`USER_NAME`"),
activityTypeCol("`ACTIVITY_TYPE`")
{
- initialize();
-}
-
-SQLiteConfiguration::~SQLiteConfiguration()
-{
- sqlite3_close(dbHandler);
- sqlite3_shutdown();
-}
-
-void SQLiteConfiguration::initialize()
-{
sqlite3_shutdown();
sqlite3_config(SQLITE_CONFIG_URI, 1);
sqlite3_initialize();
- auto resource = app_get_data_path();
- if (!resource)
- ERROR("app_get_data_path() failed");
+ std::string path;
+ if (createInMemory) {
+ auto resource = app_get_data_path();
+ if (!resource)
+ ERROR("app_get_data_path() failed");
- auto path = std::string(resource ? resource : "") + dbName;
- free(resource);
+ path = (resource ? resource : "") + dbName;
+ free(resource);
+ } else
+ path = dbName;
- if (sqlite3_open(path.c_str(), &dbHandler) != SQLITE_OK)
+ if (sqlite3_open(path.c_str(), &dbHandler) != SQLITE_OK) {
ERROR("sqlite3_open() failed");
+ throw std::runtime_error("SQLite connection failed");
+ }
sqlite3_update_hook(dbHandler, update_callback, nullptr);
createTable();
}
+SQLiteConfiguration::~SQLiteConfiguration()
+{
+ sqlite3_close(dbHandler);
+ sqlite3_shutdown();
+}
+
void SQLiteConfiguration::add(const std::shared_ptr<SwitchConfigurationItem> &item)
{
auto query = QueryBuilder().insertInto(tableName).values({item->getSwitchId(),
- /*item.get()->getProviderId(),*/
item->getUserName(),
item->getActivityType()
}).build();
+ item->setChangeType(ChangeType::ADD);
if (executeQuery(query))
notify(item);
}
INFO("update query: %s", query.c_str());
+ item->setChangeType(ChangeType::UPDATE);
if (executeQuery(query))
notify(item);
}
auto query = QueryBuilder().deleteFrom(tableName).where(switchIdCol, "=", switchId).build();
INFO("remove query: %s", query.c_str());
+ item->setChangeType(ChangeType::REMOVE);
if (executeQuery(query))
notify(item);
}
return {};
return collection;
-
}
static int call_functor(void *data, int argc, char **argv, char **colName)
{
auto query = "CREATE TABLE IF NOT EXISTS " + tableName + "("
+ switchIdCol + " TEXT NOT NULL, "
- // + providerIdCol + " TEXT NOT NULL, "
+ userNameCol + " TEXT, "
+ activityTypeCol + " TEXT NOT NULL, "
+ "PRIMARY KEY (" + switchIdCol + "));";
#include <string>
#include <functional>
+#include <memory>
class SQLiteConfiguration : public Configuration
{
public:
- static SQLiteConfiguration &instance();
+ SQLiteConfiguration(bool createInMemory = false);
+ ~SQLiteConfiguration();
void add(const std::shared_ptr<SwitchConfigurationItem> &item) override;
void update(const std::shared_ptr<SwitchConfigurationItem> &item) override;
using execCallback_t = std::function<void(int, char **, char **)>;
private:
- SQLiteConfiguration();
- ~SQLiteConfiguration();
-
- void initialize();
-
bool executeQuery(const std::string &query, const execCallback_t &cb) const;
bool executeQuery(const std::string &query) const;
void createTable();
const std::string tableName;
const std::string switchIdCol;
- // const std::string providerIdCol;
const std::string userNameCol;
const std::string activityTypeCol;
-#ifndef SUBJECT_HPP_
-#define SUBJECT_HPP_
+#ifndef SUBJECT_HPP
+#define SUBJECT_HPP
#include "Condition.hpp"
#include "Observer.hpp"
observers.emplace_back(std::move(observer), std::move(cond));
}
- void detach(const Observer<T> *observer, const Condition<T> *cond)
+ void detach(const Observer<T> *observer, const T *item)
{
- for (auto it = observers.begin(); it != observers.end(); ++it)
- if (it->first.get() == observer && it->second.get() == cond) {
+ for (auto it = observers.begin(); it != observers.end(); ++it) {
+ auto tempObserver = it->first.lock();
+
+ if (tempObserver.get() == observer && it->second->getItem().get() == item) {
*it = std::move(observers.back());
observers.pop_back();
break;
}
+ }
}
protected:
#include "Switch.hpp"
-Switch::Switch(std::string id, std::weak_ptr<const SwitchProvider> provider)
- : provider(std::move(provider))
-{
- auto prov = provider.lock();
- switchId = std::make_shared<SwitchId>(id, prov->getId());
-}
-
-std::weak_ptr<const SwitchProvider> Switch::getProvider() const
-{
- return provider;
-}
+Switch::Switch(const std::string &switchId, const std::string &providerId)
+ : switchId(std::make_shared<SwitchId>(switchId, providerId))
+{}
bool Switch::operator==(const Switch &sw) const
{
#ifndef SWITCH_HPP
#define SWITCH_HPP
-#include "SwitchProvider.hpp"
#include "SwitchId.hpp"
#include <string>
#include <memory>
-class SwitchProvider;
-
class Switch
{
public:
- Switch(std::string id, std::weak_ptr<const SwitchProvider> provider);
+ Switch(const std::string &switchId, const std::string &providerId);
- std::weak_ptr<const SwitchProvider> getProvider() const;
bool operator==(const Switch &sw) const;
std::shared_ptr<SwitchId> getId() const;
std::shared_ptr<SwitchId> switchId;
std::string name;
std::string description;
- std::weak_ptr<const SwitchProvider> provider;
};
#endif
: changeType(type)
{}
-SwitchConfigurationItem::SwitchConfigurationItem(const std::string &switchId, /*const std::string &providerId,*/ const std::string &activityType, ChangeType type)
- : switchId(switchId), /*providerId(providerId),*/ activityType(activityType), changeType(type)
+SwitchConfigurationItem::SwitchConfigurationItem(const std::string &switchId, const std::string &activityType)
+ : switchId(switchId), activityType(activityType)
+{}
+
+SwitchConfigurationItem::SwitchConfigurationItem(const std::string &switchId, const std::string &activityType, ChangeType type)
+ : switchId(switchId), activityType(activityType), changeType(type)
{}
bool SwitchConfigurationItem::operator==(const SwitchConfigurationItem &item) const
{
- return switchId == item.getSwitchId() /*&& providerId == item.getProviderId()*/
- && activityType == item.getActivityType() && changeType == item.getChangeType();
+ return switchId == item.getSwitchId() && activityType == item.getActivityType() && changeType == item.getChangeType();
}
std::string SwitchConfigurationItem::getSwitchId() const
this->switchId = switchId;
}
-// std::string SwitchConfigurationItem::getProviderId() const
-// {
-// return providerId;
-// }
-//
-// void SwitchConfigurationItem::setProviderId(const std::string &providerId)
-// {
-// this->providerId = providerId;
-// }
-
std::string SwitchConfigurationItem::getUserName() const {
return userName;
}
}
setSwitchId(argv[static_cast<int>(SwitchConfigurationItemFields::SWITCH_ID)]);
- // setProviderId(argv[SwitchConfigurationItemFields::PROVIDER_ID]);
setUserName(argv[static_cast<int>(SwitchConfigurationItemFields::USER_NAME)]);
setActivityType(argv[static_cast<int>(SwitchConfigurationItemFields::ACTIVITY_TYPE)]);
- // INFO("switchId: %s, providerId: %s, value: %s", switchId.c_str(), /*providerId.c_str(),*/ activityType.c_str());
INFO("switchId: %s, userName: %s, activityType: %s", switchId.c_str(), userName.c_str(), activityType.c_str());
}
#include <string>
-#include "universalswitch.hpp"
+#include "UniversalSwitchLog.hpp"
enum class ChangeType {
ADD,
enum class SwitchConfigurationItemFields {
SWITCH_ID,
- // PROVIDER_ID,
USER_NAME,
ACTIVITY_TYPE,
Count
public:
SwitchConfigurationItem() = default;
SwitchConfigurationItem(ChangeType type);
- SwitchConfigurationItem(const std::string &switchId, /*const std::string &providerId,*/ const std::string &activityType, ChangeType type);
+ SwitchConfigurationItem(const std::string &switchId, const std::string &activityType);
+ SwitchConfigurationItem(const std::string &switchId, const std::string &activityType, ChangeType type);
bool operator==(const SwitchConfigurationItem &item) const;
std::string getSwitchId() const;
void setSwitchId(const std::string &switchId);
- // std::string getProviderId() const;
- // void setProviderId(const std::string &providerId);
std::string getUserName() const;
void setUserName(const std::string &userName);
std::string getActivityType() const;
private:
std::string switchId;
- // std::string providerId;
std::string userName;
std::string activityType;
};
-#endif // SWITCH_CONFIGURATION_ITEM_OBSERVER_HPP_
+#endif // SWITCH_CONFIGURATION_ITEM_OBSERVER_HPP
class SwitchId
{
public:
- SwitchId(const std::string &localId, const std::string providerid);
+ SwitchId(const std::string &localId, const std::string providerId);
bool operator==(const SwitchId &switchId) const;
#include "ConditionEqual.hpp"
#include "AdHocActivityDispatcher.hpp"
-SwitchManager::SwitchManager(std::shared_ptr<SwitchProvider> provider,
- std::shared_ptr<Configuration> configuration,
- std::shared_ptr<ActivityBuilderFactory> factory)
- : switchProvider(std::move(provider)),
- configuration(std::move(configuration)),
- activityBuilderFactory(std::move(factory))
+SwitchManager::SwitchManager(const std::shared_ptr<SwitchProvider> &provider,
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityBuilderFactory> &factory)
+ : switchProvider(provider),
+ configuration(configuration),
+ activityBuilderFactory(factory)
{
asyncActivityConstructor = std::make_shared<AsyncActivityConstructor>();
activityDispatcher = std::make_shared<AdHocActivityDispatcher>();
+}
- auto cond = std::unique_ptr<Condition<SwitchConfigurationItem>>(new ConditionAll<SwitchConfigurationItem>);
+void SwitchManager::initialize()
+{
+ auto cond = std::unique_ptr<Condition<SwitchConfigurationItem>>(new ConditionAll<SwitchConfigurationItem>);
configuration->attach(shared_from_this(), std::move(cond));
auto confItems = configuration->findAll();
for (auto &item : confItems) {
- auto sw = provider->findSwitchById(item->getSwitchId());
+ auto sw = switchProvider->findSwitchById(item->getSwitchId());
if (!sw)
continue;
auto cond = std::unique_ptr<Condition<Switch>>(new ConditionEqual<Switch>(sw));
- provider->attach(shared_from_this(), std::move(cond));
+ switchProvider->attach(shared_from_this(), std::move(cond));
}
}
+
+void SwitchManager::update(const std::shared_ptr<SwitchConfigurationItem> &item) {
+ switch (item->getChangeType())
+ {
+ case ChangeType::ADD: {
+ auto sw = switchProvider->findSwitchById(item->getSwitchId());
+ if (!sw)
+ return;
+
+ auto cond = std::unique_ptr<Condition<Switch>>(new ConditionEqual<Switch>(sw));
+ switchProvider->attach(shared_from_this(), std::move(cond));
+
+ break;
+ }
+
+ case ChangeType::UPDATE:
+
+ break;
+
+ case ChangeType::REMOVE: {
+ auto sw = switchProvider->findSwitchById(item->getSwitchId());
+ switchProvider->detach(this, sw.get());
+ break;
+ }
+
+ case ChangeType::NONE:
+ WARNING("Invalid item type");
+ }
+}
+
+void SwitchManager::update(const std::shared_ptr<Switch> &item) {
+
+}
+
+void SwitchManager::update(const std::shared_ptr<Activity> &item) {
+
+}
#include "Configuration.hpp"
#include "Condition.hpp"
#include "ActivityBuilderFactory.hpp"
+#include "Activity.hpp"
#include <memory>
-class SwitchManager : public SwitchConfigurationItemObserver, public SwitchObserver, public ActivityObserver, std::enable_shared_from_this<SwitchManager>
+class SwitchManager : public SwitchConfigurationItemObserver, public SwitchObserver, public ActivityObserver, public std::enable_shared_from_this<SwitchManager>
{
public:
- SwitchManager(std::shared_ptr<SwitchProvider> provider,
- std::shared_ptr<Configuration> configuration,
- std::shared_ptr<ActivityBuilderFactory> factory);
+ void update(const std::shared_ptr<SwitchConfigurationItem> &item) override;
+ void update(const std::shared_ptr<Switch> &item) override;
+ void update(const std::shared_ptr<Activity> &item) override;
+
+ template<class A>
+ static std::shared_ptr<A> create(const std::shared_ptr<SwitchProvider> &provider,
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityBuilderFactory> &factory) {
+ auto ptr = std::shared_ptr<A>(new A(provider, configuration, factory));
+ ptr->initialize();
+ return ptr;
+ }
+
+protected:
+ SwitchManager(const std::shared_ptr<SwitchProvider> &provider,
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityBuilderFactory> &factory);
+
+ void initialize();
-private:
std::shared_ptr<SwitchProvider> switchProvider;
std::shared_ptr<Configuration> configuration;
std::shared_ptr<ActivityBuilderFactory> activityBuilderFactory;
#include "SwitchProvider.hpp"
-SwitchProvider::SwitchProvider(std::string id)
- : id(std::move(id))
+SwitchProvider::SwitchProvider(const std::string &switchProviderId)
+ : switchProviderId(switchProviderId)
{}
std::string SwitchProvider::getId() const
{
- return id;
+ return switchProviderId;
}
#include <vector>
#include <memory>
-class Switch;
-
class SwitchProvider : public Subject<Switch>
{
public:
using SwitchCollection = std::vector<std::shared_ptr<Switch>>;
- using SwitchPtr = std::shared_ptr<const Switch>;
virtual ~SwitchProvider() {};
- virtual SwitchCollection findAllSwitches() = 0;
- virtual std::shared_ptr<Switch> findSwitchById(const std::string &id) = 0;
+ virtual SwitchCollection findAllSwitches() const = 0;
+ virtual std::shared_ptr<Switch> findSwitchById(const std::string &switchId) const = 0;
std::string getId() const;
protected:
- SwitchProvider(std::string id);
- const std::string id;
+ SwitchProvider(const std::string &id);
+ const std::string switchProviderId;
};
#endif
-#ifndef UNIVERSAL_SWITCH_HPP_
-#define UNIVERSAL_SWITCH_HPP_
+#ifndef UNIVERSAL_SWITCH_HPP
+#define UNIVERSAL_SWITCH_HPP
#include <libintl.h>
#include <dlog.h>
#include <Ecore.h>
+#include <iostream>
+
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define _(str) (gettext(str))
-#endif /* UNIVERSAL_SWITCH_HPP_ */
+#endif /* UNIVERSAL_SWITCH_HPP */
-#include "universalswitch.hpp"
+#include "UniversalSwitchLog.hpp"
#include "SQLiteConfiguration.hpp"
#include <tizen.h>
-
ADD_SUBDIRECTORY(googletest)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/)
ADD_TEST(test_${TESTNAME} test_${TESTNAME})
ENDFUNCTION(CREATE_TEST_FROM_SOURCE)
-CREATE_TEST_FROM_SOURCE(main.cpp)
+CREATE_TEST_FROM_SOURCE(ConfigurationTests.cpp)
--- /dev/null
+#include "ConfigurationTests.hpp"
+
+TEST_F(ConfigurationFixture, ConfigurationNotEmpty_BeUpdatedOnEvent) {
+ configuration_->add(item_);
+
+ auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ simulateKeyDown();
+
+ EXPECT_EQ(switchManager->updatedWithSwitch, 1);
+ EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
+}
+
+TEST_F(ConfigurationFixture, ConfigurationEmpty_MappingAdded_BeUpdatedOnEvent) {
+ auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ configuration_->add(item_);
+ simulateKeyDown();
+
+ EXPECT_EQ(switchManager->updatedWithSwitch, 1);
+ EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
+}
+
+TEST_F(ConfigurationFixture, MappingAddedAndRemoved_BeNotUpdatedOnEvent) {
+ configuration_->add(item_);
+ auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ configuration_->remove(switchId_);
+ simulateKeyDown();
+
+ EXPECT_EQ(switchManager->updatedWithSwitch, 0);
+}
+
+TEST_F(ConfigurationFixture, MappingAddedAndUpdated_BeUpdatedWithNewValue) {
+ configuration_->add(item_);
+ auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ auto newActivityType = "SCAN_OFF";
+ auto newItem = std::make_shared<SwitchConfigurationItem>(switch_->getId()->getGlobalId(), newActivityType);
+ configuration_->update(newItem);
+ simulateKeyDown();
+
+ EXPECT_EQ(switchManager->updatedWithSwitch, 1);
+ EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
+}
--- /dev/null
+#ifndef CONFIGURATION_TESTS_HPP
+#define CONFIGURATION_TESTS_HPP
+
+#include <cmock/cmock.h>
+
+#include "SQLiteConfiguration.hpp"
+#include "AccessoriesSwitchProvider.hpp"
+#include "SwitchConfigurationItem.hpp"
+#include "SwitchManager.hpp"
+
+#include <memory>
+
+using ::testing::StrictMock;
+using ::testing::DoAll;
+using ::testing::Invoke;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::_;
+
+class ConfigurationFixture : public ::testing::Test {
+public:
+ void SetUp() {
+ EXPECT_TRUE(ecore_init());
+ EXPECT_TRUE(ecore_event_init());
+ configuration_ = std::make_shared<SQLiteConfiguration>(true);
+ switchProvider_ = std::make_shared<AccessoriesSwitchProvider>();
+ switch_ = switchProvider_->findSwitchById(switchId_);
+ item_ = std::make_shared<SwitchConfigurationItem>(switch_->getId()->getGlobalId(), activityType_);
+ }
+
+ void TearDown() {
+ ecore_event_shutdown();
+ ecore_shutdown();
+ }
+
+ void simulateKeyDown() {
+ Ecore_Event_Key *event = (Ecore_Event_Key*)malloc(sizeof(Ecore_Event_Key));
+ event->key = key.c_str();
+ EXPECT_TRUE(ecore_event_add(ECORE_EVENT_KEY_DOWN, event, NULL, NULL));
+ ecore_main_loop_iterate();
+ }
+
+protected:
+ std::shared_ptr<Configuration> configuration_;
+ std::shared_ptr<SwitchProvider> switchProvider_;
+ std::shared_ptr<Switch> switch_;
+ std::shared_ptr<SwitchConfigurationItem> item_;
+ std::string key = "Down";
+ std::string switchId_ = "AccessoriesSwitchProvider_Down";
+ std::string activityType_ = "SELECT";
+};
+
+class SwitchManagerMocked : public SwitchManager {
+public:
+
+ SwitchManagerMocked(const std::shared_ptr<SwitchProvider> &provider,
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityBuilderFactory> &factory)
+ : SwitchManager(provider, configuration, factory)
+ {}
+
+ void update(const std::shared_ptr<Switch> &item) override {
+ SwitchManager::update(item);
+ receivedItem = item;
+ ++updatedWithSwitch;
+ }
+
+ int updatedWithSwitch = 0;
+ std::shared_ptr<Switch> receivedItem;
+};
+
+#endif // CONFIGURATION_TESTS_HPP
+++ /dev/null
-#include <cmock/cmock.h>
-
-using namespace ::testing;
-
-TEST(FooTest, SQLiteUsage) {
- EXPECT_TRUE(true);
-}