Bläddra i källkod

Introduce hints for status codes

Patrick-Christopher Mattulat 1 vecka sedan
förälder
incheckning
1af00a838f

+ 37 - 1
CMakeLists.txt

@@ -123,9 +123,44 @@ set(ATLANTIS_INTERFACE_SOURCES
 add_library(${MODULE_NAME_INTERFACE} SHARED ${ATLANTIS_INTERFACE_SOURCES})
 
 target_link_libraries(${MODULE_NAME_INTERFACE} PUBLIC
-        SDL3::SDL3
+    SDL3::SDL3
+    $<$<CONFIG:Debug>:ls-std::ls-std-core-d>
+    $<$<CONFIG:Release>:ls-std::ls-std-core>
+)
+
+################################
+# Test Files: Interface Module
+################################
+
+set(ATLANTIS_INTERFACE_TEST_SOURCES
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/mock/StatusCodeMock.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/AStatusCodeTest.cpp
+)
+
+################################
+# Test Case Creation: Interface Module
+################################
+
+add_executable(${MODULE_NAME_INTERFACE}-tests ${ATLANTIS_INTERFACE_TEST_SOURCES})
+
+target_link_libraries(${MODULE_NAME_INTERFACE}-tests PRIVATE
+    ${MODULE_NAME_INTERFACE}
+    GTest::gtest_main
 )
 
+gtest_discover_tests(${MODULE_NAME_INTERFACE}-tests DISCOVERY_MODE PRE_TEST)
+
+if (WIN32)
+    add_custom_command(TARGET ${MODULE_NAME_INTERFACE}-tests POST_BUILD
+        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_INTERFACE}-tests>
+            $<TARGET_RUNTIME_DLLS:${MODULE_NAME_INTERFACE}-tests>
+        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_INTERFACE}-tests>
+            "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
+            "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
+        COMMAND_EXPAND_LISTS
+    )
+endif ()
+
 ################################################################
 ################################################################
 # Module: Window
@@ -195,5 +230,6 @@ endif ()
 add_custom_target(ls-atlantis-tests
     DEPENDS
         ${MODULE_NAME_CORE}-tests
+        ${MODULE_NAME_INTERFACE}-tests
         ${MODULE_NAME_WINDOW}-tests
 )

+ 3 - 0
include/interface/AStatusCode.hpp

@@ -8,6 +8,7 @@
 
 #include <Export.hpp>
 #include <string>
+#include <vector>
 
 namespace ls::atlantis::interfaces
 {
@@ -18,11 +19,13 @@ namespace ls::atlantis::interfaces
       explicit AStatusCode(const uint16_t &_statusId, ::std::string _statusText);
       virtual ~AStatusCode();
 
+      virtual void addHint(const ::std::string &_hint);
       [[nodiscard]] virtual uint16_t getId() const;
       [[nodiscard]] virtual ::std::string getText() const;
 
     private:
 
+      ::std::vector<::std::string> statusHints{};
       uint16_t statusId{};
       ::std::string statusText{};
   };

+ 8 - 0
source/interface/AStatusCode.cpp

@@ -4,8 +4,10 @@
  */
 
 #include <interface/AStatusCode.hpp>
+#include <ls-std/core/evaluator/EmptyStringArgumentEvaluator.hpp>
 
 using ls::atlantis::interfaces::AStatusCode;
+using ls::std::core::EmptyStringArgumentEvaluator;
 using ::std::move;
 using ::std::string;
 
@@ -14,6 +16,12 @@ AStatusCode::AStatusCode(const uint16_t &_statusId, string _statusText) : status
 
 AStatusCode::~AStatusCode() = default;
 
+void AStatusCode::addHint(const string &_hint)
+{
+  EmptyStringArgumentEvaluator(_hint).evaluate();
+  this->statusHints.push_back(_hint);
+}
+
 uint16_t AStatusCode::getId() const
 {
   return this->statusId;

+ 28 - 0
test/interface/AStatusCodeTest.cpp

@@ -0,0 +1,28 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <gtest/gtest.h>
+#include <test/interface/mock/StatusCodeMock.hpp>
+#include <ls-std/core/exception/IllegalArgumentException.hpp>
+
+using ls::atlantis::interfaces::test::StatusCodeMock;
+using ls::std::core::IllegalArgumentException;
+using ::testing::Test;
+
+namespace
+{
+  class AStatusCodeTest : public Test
+  {
+    public:
+
+      AStatusCodeTest() = default;
+      ~AStatusCodeTest() override = default;
+  };
+
+  TEST_F(AStatusCodeTest, addHint_emptyString)
+  {
+    ASSERT_THROW(StatusCodeMock().addHint(""), IllegalArgumentException);
+  }
+}

+ 14 - 0
test/interface/mock/StatusCodeMock.cpp

@@ -0,0 +1,14 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <test/interface/mock/StatusCodeMock.hpp>
+
+using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::interfaces::test::StatusCodeMock;
+
+StatusCodeMock::StatusCodeMock() : AStatusCode(0, "mocked a code")
+{}
+
+StatusCodeMock::~StatusCodeMock() = default;

+ 22 - 0
test/interface/mock/StatusCodeMock.hpp

@@ -0,0 +1,22 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_INTERFACE_TEST_STATUS_CODE_MOCK_HPP
+#define LS_ATLANTIS_ENGINE_INTERFACE_TEST_STATUS_CODE_MOCK_HPP
+
+#include <interface/AStatusCode.hpp>
+
+namespace ls::atlantis::interfaces::test
+{
+  class StatusCodeMock : public ls::atlantis::interfaces::AStatusCode
+  {
+    public:
+
+      StatusCodeMock();
+      ~StatusCodeMock() override;
+  };
+}
+
+#endif

+ 2 - 2
test/window/mock/SdlApiMock.hpp

@@ -3,8 +3,8 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
-#ifndef LS_ATLANTIS_ENGINE_SDL_API_MOCK_HPP
-#define LS_ATLANTIS_ENGINE_SDL_API_MOCK_HPP
+#ifndef LS_ATLANTIS_ENGINE_WINDOW_TEST_SDL_API_MOCK_HPP
+#define LS_ATLANTIS_ENGINE_WINDOW_TEST_SDL_API_MOCK_HPP
 
 #include <gmock/gmock.h>
 #include <interface/ISdlApi.hpp>