Browse Source

Add TDD implementation of reworked Event module

Patrick-Christopher Mattulat 10 months ago
parent
commit
c44381dcc8

+ 26 - 18
CMakeLists.txt

@@ -206,11 +206,14 @@ set(SOURCE_FILES_ENCODING
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/Base64.cpp)
 
 set(SOURCE_FILES_EVENT
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/serialization/SerializableJsonEvent.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Event.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventHandler.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventManager.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Narrator.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/reworked/Event.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/reworked/EventListener.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/reworked/EventManager.cpp)
+#${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/serialization/SerializableJsonEvent.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Event.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventHandler.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventManager.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Narrator.cpp)
 
 set(SOURCE_FILES_IO
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/evaluator/FileExistenceEvaluator.cpp
@@ -341,19 +344,24 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/encoding/Base64Test.cpp)
 
     set(UNIT_TEST_FILES_EVENT
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/serialization/SerializableJsonEventTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventHandlerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventManagerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/NarratorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Colour.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/DailyNewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/NewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/SeriousNewsEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataCar.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataMercedesCar.cpp)
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/reworked/EventListenerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/reworked/EventManagerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/reworked/EventTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/OnClickEvent.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Button.cpp)
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/serialization/SerializableJsonEventTest.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventHandlerTest.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventManagerTest.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventTest.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/NarratorTest.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Colour.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/DailyNewsAgency.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsAgency.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsEvent.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/NewsAgency.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/SeriousNewsEvent.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataCar.cpp
+    #${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataMercedesCar.cpp)
 
     set(UNIT_TEST_FILES_IO
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/evaluator/FileExistenceEvaluatorTest.cpp

+ 30 - 0
include/ls-std/event/reworked/Event.hpp

@@ -0,0 +1,30 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_EVENT_REWORKED_HPP
+#define LS_STD_EVENT_REWORKED_HPP
+
+#include <ls-std/core/Class.hpp>
+#include <memory>
+#include <string>
+
+namespace ls::std::event::reworked
+{
+  class Event : public ls::std::core::Class
+  {
+    public:
+
+      explicit Event(const ::std::string &_name);
+      ~Event() noexcept override;
+
+      [[nodiscard]] ls::std::event::reworked::Event of(const ::std::shared_ptr<ls::std::core::Class> &_manager);
+  };
+}
+
+#endif

+ 30 - 0
include/ls-std/event/reworked/EventListener.hpp

@@ -0,0 +1,30 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_EVENT_LISTENER_REWORKED_HPP
+#define LS_STD_EVENT_LISTENER_REWORKED_HPP
+
+#include <ls-std/core/Class.hpp>
+#include <ls-std/event/reworked/Event.hpp>
+#include <ls-std/event/reworked/type/EventTypes.hpp>
+
+namespace ls::std::event::reworked
+{
+  class EventListener : public ls::std::core::Class
+  {
+    public:
+
+      explicit EventListener();
+      ~EventListener() noexcept override;
+
+      void subscribe(const ls::std::event::reworked::Event &_event, const ls::std::event::reworked::type::EventAction &_action);
+  };
+}
+
+#endif

+ 29 - 0
include/ls-std/event/reworked/EventManager.hpp

@@ -0,0 +1,29 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_EVENT_MANAGER_REWORKED_HPP
+#define LS_STD_EVENT_MANAGER_REWORKED_HPP
+
+#include "Event.hpp"
+#include <ls-std/core/Class.hpp>
+
+namespace ls::std::event::reworked
+{
+  class EventManager : public ls::std::core::Class
+  {
+    public:
+
+      explicit EventManager();
+      ~EventManager() noexcept override;
+
+      void invoke(const ls::std::event::reworked::Event &_event) const;
+  };
+}
+
+#endif

+ 20 - 0
include/ls-std/event/reworked/type/EventTypes.hpp

@@ -0,0 +1,20 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_EVENT_TYPES_REWORKED_HPP
+#define LS_STD_EVENT_TYPES_REWORKED_HPP
+
+#include <functional>
+
+namespace ls::std::event::reworked::type
+{
+  using EventAction = ::std::function<void()>;
+}
+
+#endif

+ 12 - 6
include/ls-std/ls-std-event.hpp

@@ -3,18 +3,24 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-14
- * Changed:         2023-02-03
+ * Changed:         2024-05-16
  *
  * */
 
 #ifndef LS_STD_LS_STD_EVENT_HPP
 #define LS_STD_LS_STD_EVENT_HPP
 
-#include <ls-std/event/serialization/SerializableJsonEvent.hpp>
+#include <ls-std/event/reworked/type/EventTypes.hpp>
 
-#include <ls-std/event/Event.hpp>
-#include <ls-std/event/EventHandler.hpp>
-#include <ls-std/event/EventManager.hpp>
-#include <ls-std/event/Narrator.hpp>
+#include <ls-std/event/reworked/Event.hpp>
+#include <ls-std/event/reworked/EventListener.hpp>
+#include <ls-std/event/reworked/EventManager.hpp>
+
+//#include <ls-std/event/serialization/SerializableJsonEvent.hpp>
+
+//#include <ls-std/event/Event.hpp>
+//#include <ls-std/event/EventHandler.hpp>
+//#include <ls-std/event/EventManager.hpp>
+//#include <ls-std/event/Narrator.hpp>
 
 #endif

+ 26 - 0
source/ls-std/event/reworked/Event.cpp

@@ -0,0 +1,26 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <ls-std/event/reworked/Event.hpp>
+
+using ls::std::core::Class;
+using ls::std::event::reworked::Event;
+using ::std::shared_ptr;
+using ::std::string;
+
+Event::Event(const string &_name) : Class(_name)
+{}
+
+Event::~Event() noexcept = default;
+
+Event Event::of(const shared_ptr<Class> &_manager)
+{
+  // implement
+  return Event("tmp");
+}

+ 25 - 0
source/ls-std/event/reworked/EventListener.cpp

@@ -0,0 +1,25 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <ls-std/event/reworked/EventListener.hpp>
+
+using ls::std::core::Class;
+using ls::std::event::reworked::Event;
+using ls::std::event::reworked::EventListener;
+using ls::std::event::reworked::type::EventAction;
+
+EventListener::EventListener() : Class("EventListener")
+{}
+
+EventListener::~EventListener() noexcept = default;
+
+void EventListener::subscribe(const Event &_event, const EventAction &_action)
+{
+  // implement
+}

+ 24 - 0
source/ls-std/event/reworked/EventManager.cpp

@@ -0,0 +1,24 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <ls-std/event/reworked/EventManager.hpp>
+
+using ls::std::core::Class;
+using ls::std::event::reworked::Event;
+using ls::std::event::reworked::EventManager;
+
+EventManager::EventManager() : Class("EventManager")
+{}
+
+EventManager::~EventManager() noexcept = default;
+
+void EventManager::invoke(const Event &_event) const
+{
+  // implement
+}

+ 30 - 0
test/cases/event/reworked/EventListenerTest.cpp

@@ -0,0 +1,30 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-event.hpp>
+
+using ls::std::event::reworked::EventListener;
+using testing::Test;
+
+namespace
+{
+  class EventListenerTest : public Test
+  {
+    public:
+
+      EventListenerTest() = default;
+      ~EventListenerTest() override = default;
+  };
+
+  TEST_F(EventListenerTest, getClassName)
+  {
+    ASSERT_STREQ("EventListener", EventListener().getClassName().c_str());
+  }
+}

+ 46 - 0
test/cases/event/reworked/EventManagerTest.cpp

@@ -0,0 +1,46 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std-event-test.hpp>
+#include <ls-std/ls-std-event.hpp>
+
+using ls::std::event::reworked::EventManager;
+using ::std::make_shared;
+using test::event::Button;
+using test::event::OnClickEvent;
+using testing::Test;
+
+namespace
+{
+  class EventManagerTest : public Test
+  {
+    public:
+
+      EventManagerTest() = default;
+      ~EventManagerTest() override = default;
+  };
+
+  TEST_F(EventManagerTest, getClassName)
+  {
+    ASSERT_STREQ("EventManager", EventManager().getClassName().c_str());
+  }
+
+  //TEST_F(EventManagerTest, invoke)
+  //{
+  //  auto eventManager = make_shared<EventManager>();
+  //
+  //  auto myButton = make_shared<Button>();
+  //  myButton->subscribe(OnClickEvent().of(eventManager), [myButton] () mutable { myButton->onClickEvent(); });
+  //
+  //  ASSERT_FALSE(myButton->isClicked());
+  //  eventManager->invoke(OnClickEvent());
+  //  ASSERT_TRUE(myButton->isClicked());
+  //}
+}

+ 30 - 0
test/cases/event/reworked/EventTest.cpp

@@ -0,0 +1,30 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-event.hpp>
+
+using ls::std::event::reworked::Event;
+using testing::Test;
+
+namespace
+{
+  class EventTest : public Test
+  {
+    public:
+
+      EventTest() = default;
+      ~EventTest() override = default;
+  };
+
+  TEST_F(EventTest, getClassName)
+  {
+    ASSERT_STREQ("OnClickEvent", Event("OnClickEvent").getClassName().c_str());
+  }
+}

+ 28 - 0
test/classes/event/Button.cpp

@@ -0,0 +1,28 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include "Button.hpp"
+
+using ls::std::event::reworked::EventListener;
+using test::event::Button;
+
+Button::Button() : EventListener()
+{}
+
+Button::~Button() noexcept = default;
+
+bool Button::isClicked() const
+{
+  return this->clicked;
+}
+
+void Button::onClickEvent()
+{
+  this->clicked = !this->clicked;
+}

+ 33 - 0
test/classes/event/Button.hpp

@@ -0,0 +1,33 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_BUTTON_HPP
+#define LS_STD_BUTTON_HPP
+
+#include <ls-std/ls-std-event.hpp>
+
+namespace test::event
+{
+  class Button : public ls::std::event::reworked::EventListener
+  {
+    public:
+
+      explicit Button();
+      ~Button() noexcept override;
+
+      [[nodiscard]] bool isClicked() const;
+      void onClickEvent();
+
+    private:
+
+      bool clicked{};
+  };
+}
+
+#endif

+ 18 - 0
test/classes/event/OnClickEvent.cpp

@@ -0,0 +1,18 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#include "OnClickEvent.hpp"
+
+using ls::std::event::reworked::Event;
+using test::event::OnClickEvent;
+
+OnClickEvent::OnClickEvent() : Event("OnClickEvent")
+{}
+
+OnClickEvent::~OnClickEvent() noexcept = default;

+ 26 - 0
test/classes/event/OnClickEvent.hpp

@@ -0,0 +1,26 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-16
+*
+* */
+
+#ifndef LS_STD_ON_CLICK_EVENT_HPP
+#define LS_STD_ON_CLICK_EVENT_HPP
+
+#include <ls-std/event/reworked/Event.hpp>
+
+namespace test::event
+{
+  class OnClickEvent : public ls::std::event::reworked::Event
+  {
+    public:
+
+      explicit OnClickEvent();
+      ~OnClickEvent() noexcept override;
+  };
+}
+
+#endif

+ 11 - 9
test/ls-std-event-test.hpp

@@ -3,20 +3,22 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-14
- * Changed:         2023-02-03
+ * Changed:         2024-05-16
  *
  * */
 
 #ifndef LS_STD_LS_STD_EVENT_TEST_HPP
 #define LS_STD_LS_STD_EVENT_TEST_HPP
 
-#include <classes/event/Colour.hpp>
-#include <classes/event/DailyNewsAgency.hpp>
-#include <classes/event/GossipNewsAgency.hpp>
-#include <classes/event/GossipNewsEvent.hpp>
-#include <classes/event/NewsAgency.hpp>
-#include <classes/event/SeriousNewsEvent.hpp>
-#include <classes/event/TestDataCar.hpp>
-#include <classes/event/TestDataMercedesCar.hpp>
+#include <classes/event/Button.hpp>
+//#include <classes/event/Colour.hpp>
+//#include <classes/event/DailyNewsAgency.hpp>
+//#include <classes/event/GossipNewsAgency.hpp>
+//#include <classes/event/GossipNewsEvent.hpp>
+//#include <classes/event/NewsAgency.hpp>
+#include <classes/event/OnClickEvent.hpp>
+//#include <classes/event/SeriousNewsEvent.hpp>
+//#include <classes/event/TestDataCar.hpp>
+//#include <classes/event/TestDataMercedesCar.hpp>
 
 #endif