Prechádzať zdrojové kódy

Added StateConnection class

- added StateConnection class to represent a connection between two states
- added tests for StateConnection class
pcmattulat 3 rokov pred
rodič
commit
97600e9a73

+ 6 - 2
CMakeLists.txt

@@ -95,7 +95,9 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/StateMachine.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/StateMachine.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/State.hpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/State.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/State.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/StateConnection.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/logic/StateConnection.cpp)
 
 set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
@@ -122,7 +124,9 @@ set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/serialization/boxing/SerializableJSONFloatTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/serialization/boxing/SerializableJSONDoubleTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/serialization/boxing/SerializableJSONBooleanTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/logic/StateTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/logic/StateTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/logic/StateMachineTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/logic/StateConnectionTest.cpp)
 
 ##########################################################
 # Build

+ 34 - 0
source/logic/StateConnection.cpp

@@ -0,0 +1,34 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-09-10
+ * Changed:         2020-09-10
+ *
+ * */
+
+#include "StateConnection.hpp"
+
+#include <utility>
+
+ls_std::StateConnection::StateConnection(std::string _connectionId, std::shared_ptr<State> _state) :
+Class("StateConnection"),
+connectionId(std::move(_connectionId)),
+state(std::move(_state))
+{}
+
+std::string ls_std::StateConnection::getConnectionId() {
+  return this->connectionId;
+}
+
+std::shared_ptr<ls_std::State> ls_std::StateConnection::getState() {
+  return this->state;
+}
+
+bool ls_std::StateConnection::isPassable() {
+  return this->condition;
+}
+
+void ls_std::StateConnection::updatePassCondition(bool _condition) {
+  this->condition = _condition;
+}

+ 38 - 0
source/logic/StateConnection.hpp

@@ -0,0 +1,38 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-09-10
+ * Changed:         2020-09-10
+ *
+ * */
+
+#ifndef LS_STD_STATE_CONNECTION_HPP
+#define LS_STD_STATE_CONNECTION_HPP
+
+#include <memory>
+#include <atomic>
+#include "../base/Class.hpp"
+#include "State.hpp"
+
+namespace ls_std {
+  class StateConnection : public Class {
+    public:
+
+      explicit StateConnection(std::string _connectionId, std::shared_ptr<State> _state);
+      ~StateConnection() = default;
+
+      std::string getConnectionId();
+      std::shared_ptr<State> getState();
+      bool isPassable();
+      void updatePassCondition(bool _condition);
+
+    private:
+
+      std::atomic<bool> condition {};
+      std::string connectionId {};
+      std::shared_ptr<State> state {};
+  };
+}
+
+#endif

+ 52 - 0
test/cases/logic/StateConnectionTest.cpp

@@ -0,0 +1,52 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-09-10
+ * Changed:         2020-09-10
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include "../../../source/logic/StateConnection.hpp"
+
+namespace {
+  class StateConnectionTest : public ::testing::Test {
+    protected:
+
+      StateConnectionTest() = default;
+      ~StateConnectionTest() override = default;
+
+      void SetUp() override {}
+      void TearDown() override {}
+  };
+
+  TEST_F(StateConnectionTest, getConnectionId)
+  {
+    ls_std::StateConnection connection {"AB", std::make_shared<ls_std::State>("B")};
+    ASSERT_STREQ("AB", connection.getConnectionId().c_str());
+  }
+
+  TEST_F(StateConnectionTest, getState)
+  {
+    ls_std::StateConnection connection {"AB", std::make_shared<ls_std::State>("B")};
+
+    ASSERT_TRUE(connection.getState() != nullptr);
+    ASSERT_STREQ("B", connection.getState()->getId().c_str());
+  }
+
+  TEST_F(StateConnectionTest, isPassable)
+  {
+    ls_std::StateConnection connection {"AB", std::make_shared<ls_std::State>("B")};
+    ASSERT_FALSE(connection.isPassable());
+  }
+
+  TEST_F(StateConnectionTest, updatePassCondition)
+  {
+    ls_std::StateConnection connection {"AB", std::make_shared<ls_std::State>("B")};
+
+    ASSERT_FALSE(connection.isPassable());
+    connection.updatePassCondition(true);
+    ASSERT_TRUE(connection.isPassable());
+  }
+}