Browse Source

Add Event model class

- add Event model class, which holds id and
parameters
- add tests for Event model class
Patrick-Christopher Mattulat 3 years ago
parent
commit
04758d5ef0

+ 4 - 2
CMakeLists.txt

@@ -74,7 +74,8 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/StandardOutputWriter.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/logic/Narrator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/logic/IListener.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/xml/XMLParser.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/xml/XMLParser.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/event/Event.cpp)
 
 set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
@@ -119,7 +120,8 @@ set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/observer/TestDataCar.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/observer/TestDataMercedesCar.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/logic/NarratorTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLParserTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLParserTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventTest.cpp)
 
 ##########################################################
 # Build

+ 37 - 0
include/ls_std/event/Event.hpp

@@ -0,0 +1,37 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-11-26
+ * Changed:         2020-11-26
+ *
+ * */
+
+#ifndef LS_STD_EVENT_HPP
+#define LS_STD_EVENT_HPP
+
+#include <ls_std/base/Class.hpp>
+#include "EventTypes.hpp"
+
+namespace ls_std {
+  class Event : public ls_std::Class {
+    public:
+
+      explicit Event(ls_std::event_id  _id);
+      ~Event() override = default;
+
+      void addParameter(const ls_std::event_parameter& _eventParameter);
+      ls_std::event_id getId();
+      ls_std::event_parameter_list getParameterList();
+      void removeParameter(const ls_std::event_id& _id);
+
+    private:
+
+      ls_std::event_id id {};
+      ls_std::event_parameter_list eventParameterList {};
+
+      bool _hasParameter(const ls_std::event_id&  _id);
+  };
+}
+
+#endif

+ 25 - 0
include/ls_std/event/EventTypes.hpp

@@ -0,0 +1,25 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-11-26
+ * Changed:         2020-11-26
+ *
+ * */
+
+#ifndef LS_STD_EVENT_TYPES_HPP
+#define LS_STD_EVENT_TYPES_HPP
+
+#include <string>
+#include <vector>
+#include <map>
+
+namespace ls_std {
+  using event_id = std::string;
+  using event_parameter_id = std::string;
+  using event_parameter_value = std::string;
+  using event_parameter = std::pair<std::string, std::string>;
+  using event_parameter_list = std::map<event_parameter_id, event_parameter_value>;
+}
+
+#endif

+ 3 - 0
include/ls_std/ls_std.hpp

@@ -71,4 +71,7 @@
 #include "utils/RegexUtils.hpp"
 #include "utils/STLUtils.hpp"
 
+#include "event/Event.hpp"
+#include "event/EventTypes.hpp"
+
 #endif

+ 43 - 0
source/ls_std/event/Event.cpp

@@ -0,0 +1,43 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-11-26
+ * Changed:         2020-11-26
+ *
+ * */
+
+#include <ls_std/event/Event.hpp>
+
+ls_std::Event::Event(ls_std::event_id _id) : ls_std::Class("Event"),
+id(std::move(_id))
+{}
+
+void ls_std::Event::addParameter(const ls_std::event_parameter &_eventParameter)
+{
+  if(!this->_hasParameter(_eventParameter.first)) {
+    this->eventParameterList.insert(_eventParameter);
+  }
+}
+
+ls_std::event_id ls_std::Event::getId()
+{
+  return this->id;
+}
+
+ls_std::event_parameter_list ls_std::Event::getParameterList()
+{
+  return this->eventParameterList;
+}
+
+void ls_std::Event::removeParameter(const ls_std::event_id &_id)
+{
+  if(this->_hasParameter(_id)) {
+    this->eventParameterList.erase(_id);
+  }
+}
+
+bool ls_std::Event::_hasParameter(const ls_std::event_id &_id)
+{
+  return this->eventParameterList.find(_id) != this->eventParameterList.end();
+}

+ 76 - 0
test/cases/event/EventTest.cpp

@@ -0,0 +1,76 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-11-26
+ * Changed:         2020-11-26
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include <ls_std/ls_std.hpp>
+
+namespace {
+  class EventTest : public ::testing::Test {
+    protected:
+
+      EventTest() = default;
+      ~EventTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(EventTest, getClassName)
+  {
+    ls_std::Event event {"OPEN_DOOR_EVENT"};
+    ASSERT_STREQ("Event", event.getClassName().c_str());
+  }
+
+  TEST_F(EventTest, addParameter)
+  {
+    ls_std::Event event {"OPEN_DOOR_EVENT"};
+    ASSERT_TRUE(event.getParameterList().empty());
+
+    event.addParameter(ls_std::event_parameter("key", "yes"));
+    event.addParameter(ls_std::event_parameter("facing_door", "yes"));
+
+    ls_std::event_parameter_list parameterList = event.getParameterList();
+    ASSERT_FALSE(parameterList.empty());
+    ASSERT_EQ(2, parameterList.size());
+    ASSERT_STREQ("yes", parameterList.at("key").c_str());
+    ASSERT_STREQ("yes", parameterList.at("facing_door").c_str());
+  }
+
+  TEST_F(EventTest, getId)
+  {
+    ls_std::Event event {"OPEN_DOOR_EVENT"};
+    ASSERT_STREQ("OPEN_DOOR_EVENT", event.getId().c_str());
+  }
+
+  TEST_F(EventTest, getParameterList)
+  {
+    ls_std::Event event {"OPEN_DOOR_EVENT"};
+    ASSERT_TRUE(event.getParameterList().empty());
+  }
+
+  TEST_F(EventTest, removeParameter)
+  {
+    ls_std::Event event {"OPEN_DOOR_EVENT"};
+    ASSERT_TRUE(event.getParameterList().empty());
+
+    event.addParameter(ls_std::event_parameter("key", "yes"));
+    event.addParameter(ls_std::event_parameter("facing_door", "yes"));
+
+    ASSERT_FALSE(event.getParameterList().empty());
+    ASSERT_EQ(2, event.getParameterList().size());
+    event.removeParameter("key");
+    ASSERT_EQ(1, event.getParameterList().size());
+    event.removeParameter("facing_door");
+    ASSERT_EQ(0, event.getParameterList().size());
+    ASSERT_TRUE(event.getParameterList().empty());
+  }
+}