#include <gtest/gtest.h>
#include "supervisor/PluginMapper.h"
#include "supervisor/ModesEx.h"
+#include "ModesPlugin.h"
using namespace std;
bool emptyPluginMap();
string getpluginDir();
+ void checkTestPlugin(Plugin *plugin);
PluginMapper piMapper;
};
+
+class TmpPlugin : public Plugin {
+private:
+ int count;
+ struct TmpAction : public PluginAction {
+ int &ref;
+ TmpAction(int &count)
+ : PluginAction("tmp"), ref(count)
+ {
+ ref++;
+ }
+ ~TmpAction()
+ {
+ ref--;
+ }
+ };
+public:
+ TmpPlugin()
+ {
+ count = 0;
+ setName("temp");
+ }
+ ~TmpPlugin() override = default;
+
+ PluginAction* newAction(const std::string &key) override
+ {
+ return new TmpAction(count);
+ }
+ int getCount()
+ {
+ return count;
+ }
+};
MODES_NAMESPACE_END
MODES_NAMESPACE_USE;
return piMapper.pluginDir;
}
+void TestPluginBroker::checkTestPlugin(Plugin *plugin)
+{
+ PluginAction *piAction = plugin->newAction("changeAccuracy");
+ EXPECT_EQ(piAction->set(0), MODES_ERROR_NONE);
+ EXPECT_EQ(piAction->set(false), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(piAction->getUndoInfo(), string("changeAccuracy"));
+ EXPECT_EQ(piAction->setUndoInfo("test"), MODES_ERROR_NONE);
+ plugin->deleteAction(piAction);
+
+ piAction = plugin->newAction("printBool");
+ EXPECT_EQ(piAction->set(false), MODES_ERROR_NONE);
+ EXPECT_EQ(piAction->set(3), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(piAction->set(3.3), MODES_ERROR_NOT_SUPPORTED);
+ plugin->deleteAction(piAction);
+
+ piAction = plugin->newAction("alwaysSameValue");
+ EXPECT_EQ(piAction->IsCurrentValue(string("Always true")), true);
+ EXPECT_EQ(piAction->set(string("String value")), MODES_ERROR_NOT_SUPPORTED);
+ plugin->deleteAction(piAction);
+
+ piAction = plugin->newAction("exactness");
+ EXPECT_EQ(piAction->set(0), MODES_ERROR_NONE);
+ plugin->deleteAction(piAction);
+
+ piAction = plugin->newAction("nightLight");
+ EXPECT_EQ(piAction->set(0), MODES_ERROR_NONE);
+ plugin->deleteAction(piAction);
+}
+
TEST(PluginMapper, readLibraryList)
{
TestPluginBroker broker;
Plugin *plugin = broker.piMapper.getPlugin("test");
ASSERT_TRUE(plugin);
- PluginAction *piAction = plugin->newAction("printInt");
- ret = piAction->set(0);
- EXPECT_EQ(ret, MODES_ERROR_NONE);
-
- ret = piAction->set(false);
- EXPECT_EQ(ret, MODES_ERROR_NOT_SUPPORTED);
- plugin->deleteAction(piAction);
-
- piAction = plugin->newAction("printFloat");
- ret = piAction->set(1.234);
- EXPECT_EQ(ret, MODES_ERROR_NONE);
- plugin->deleteAction(piAction);
+ broker.checkTestPlugin(plugin);
- piAction = plugin->newAction("printBool");
- ret = piAction->set(false);
+ ret = broker.piMapper.unloadPlugins();
EXPECT_EQ(ret, MODES_ERROR_NONE);
+ EXPECT_TRUE(broker.emptyPluginMap());
+}
- ret = piAction->set(3);
- EXPECT_EQ(ret, MODES_ERROR_NOT_SUPPORTED);
- plugin->deleteAction(piAction);
+TEST(PluginMapper, defaultDeleteAction)
+{
+ TmpPlugin plugin;
+ EXPECT_EQ(plugin.getCount(), 0);
- piAction = plugin->newAction("printString");
- ret = piAction->set(string("String value"));
- EXPECT_EQ(ret, MODES_ERROR_NONE);
- plugin->deleteAction(piAction);
+ PluginAction *action = plugin.newAction("test");
+ EXPECT_EQ(plugin.getCount(), 1);
- piAction = plugin->newAction("alwaySameValue");
- bool same = piAction->IsCurrentValue(string("String value"));
- EXPECT_EQ(same, true);
- ret = piAction->set(string("String value"));
- EXPECT_EQ(ret, MODES_ERROR_NOT_SUPPORTED);
- plugin->deleteAction(piAction);
+ plugin.deleteAction(action);
+ EXPECT_EQ(plugin.getCount(), 0);
+}
- ret = broker.piMapper.unloadPlugins();
- EXPECT_EQ(ret, MODES_ERROR_NONE);
- EXPECT_TRUE(broker.emptyPluginMap());
+TEST(PluginMapper, ActionDefaultMethod)
+{
+ TmpPlugin plugin;
+ PluginAction *action = plugin.newAction("test");
+
+ EXPECT_EQ(action->IsCurrentValue(1), false);
+ EXPECT_EQ(action->IsCurrentValue(1.1), false);
+ EXPECT_EQ(action->IsCurrentValue(true), false);
+ EXPECT_EQ(action->IsCurrentValue(string("test")), false);
+
+ EXPECT_EQ(action->set(1), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(action->set(1.1), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(action->set(true), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(action->set(string("test")), MODES_ERROR_NOT_SUPPORTED);
+
+ EXPECT_EQ(action->getUndoInfo().empty(), true);
+ EXPECT_EQ(action->setUndoInfo("test"), MODES_ERROR_NOT_SUPPORTED);
+ EXPECT_EQ(action->setChangedCallback(nullptr, nullptr), MODES_ERROR_NOT_SUPPORTED);
+
+ action->unSetChangedCallback(nullptr);
+ action->undo();
+ plugin.deleteAction(action);
+ EXPECT_EQ(plugin.getCount(), 0);
}