瀏覽代碼

Add ExceptionMessage class

This class can convert a string to a char array.
Patrick-Christopher Mattulat 2 年之前
父節點
當前提交
fb668e84ea

+ 2 - 0
CMakeLists.txt

@@ -129,6 +129,7 @@ set(SOURCE_FILES_BOXING
 set(SOURCE_FILES_CORE
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/EventNotHandledException.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/EventNotSubscribedException.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/ExceptionMessage.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileNotFoundException.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileOperationException.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IllegalArgumentException.cpp
@@ -205,6 +206,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
     set(TEST_FILES_CORE
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/EventNotHandledExceptionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/EventNotSubscribedExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/ExceptionMessageTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileNotFoundExceptionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileOperationExceptionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IllegalArgumentExceptionTest.cpp

+ 33 - 0
include/ls-std/core/exception/ExceptionMessage.hpp

@@ -0,0 +1,33 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-07
+* Changed:         2023-02-07
+*
+* */
+
+#ifndef LS_STD_EXCEPTION_MESSAGE_HPP
+#define LS_STD_EXCEPTION_MESSAGE_HPP
+
+#include <ls-std/os/dynamic-goal.hpp>
+#include <string>
+
+namespace LS_STD_DYNAMIC_GOAL ls::std::core
+{
+  class ExceptionMessage
+  {
+    public:
+
+      explicit ExceptionMessage(::std::string _message);
+      ~ExceptionMessage();
+
+      char *toCharacterPointer();
+
+    private:
+
+      ::std::string message{};
+  };
+}
+
+#endif

+ 1 - 3
include/ls-std/core/exception/FileNotFoundException.hpp

@@ -22,7 +22,7 @@ namespace ls::std::core
     public:
 
       FileNotFoundException();
-      explicit FileNotFoundException(::std::string   _message);
+      explicit FileNotFoundException(::std::string _message);
       ~FileNotFoundException() override;
 
       [[nodiscard]] const char *what() const noexcept override;
@@ -30,8 +30,6 @@ namespace ls::std::core
     private:
 
       ::std::string message{};
-
-      static char* _mapMessageToRawPointer(const ::std::string& _message);
   };
 }
 

+ 2 - 1
include/ls-std/ls-std-core.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-13
- * Changed:         2023-02-06
+ * Changed:         2023-02-07
  *
  * */
 
@@ -12,6 +12,7 @@
 
 #include <ls-std/core/exception/EventNotHandledException.hpp>
 #include <ls-std/core/exception/EventNotSubscribedException.hpp>
+#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/FileNotFoundException.hpp>
 #include <ls-std/core/exception/FileOperationException.hpp>
 #include <ls-std/core/exception/IllegalArgumentException.hpp>

+ 30 - 0
source/ls-std/core/exception/ExceptionMessage.cpp

@@ -0,0 +1,30 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-07
+* Changed:         2023-02-07
+*
+* */
+
+#include <cstring>
+#include <ls-std/core/exception/ExceptionMessage.hpp>
+
+ls::std::core::ExceptionMessage::ExceptionMessage(::std::string _message) : message(::std::move(_message))
+{}
+
+ls::std::core::ExceptionMessage::~ExceptionMessage() = default;
+
+char *ls::std::core::ExceptionMessage::toCharacterPointer()
+{
+  char *rawPointerMessage{};
+
+  if (!this->message.empty())
+  {
+    rawPointerMessage = new char[this->message.size() + 1];
+    strcpy(rawPointerMessage, this->message.c_str());
+    rawPointerMessage[this->message.size()] = '\0';
+  }
+
+  return rawPointerMessage;
+}

+ 2 - 11
source/ls-std/core/exception/FileNotFoundException.cpp

@@ -7,8 +7,8 @@
  *
  * */
 
+#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/FileNotFoundException.hpp>
-#include <utility>
 
 ls::std::core::FileNotFoundException::FileNotFoundException() = default;
 
@@ -30,14 +30,5 @@ const char *ls::std::core::FileNotFoundException::what() const noexcept
     concatenatedMessage = concatenatedMessage + this->message;
   }
 
-  return ls::std::core::FileNotFoundException::_mapMessageToRawPointer(concatenatedMessage);
-}
-
-char *ls::std::core::FileNotFoundException::_mapMessageToRawPointer(const ::std::string &_message)
-{
-  char *rawPointerMessage = new char[_message.size() + 1];
-  strcpy(rawPointerMessage, _message.c_str());
-  rawPointerMessage[_message.size()] = '\0';
-
-  return rawPointerMessage;
+  return ExceptionMessage{concatenatedMessage}.toCharacterPointer();
 }

+ 47 - 0
test/cases/core/exception/ExceptionMessageTest.cpp

@@ -0,0 +1,47 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-07
+* Changed:         2023-02-07
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-core.hpp>
+
+using namespace ls::std::core;
+
+namespace
+{
+  class ExceptionMessageTest : public ::testing::Test
+  {
+    protected:
+
+      ExceptionMessageTest() = default;
+      ~ExceptionMessageTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(ExceptionMessageTest, toCharacterPointer)
+  {
+    ::std::string text = "hello!";
+
+    ExceptionMessage message{text};
+    char *characterPointer = message.toCharacterPointer();
+    ASSERT_STREQ(text.c_str(), characterPointer);
+
+    delete[] characterPointer;
+  }
+
+  TEST_F(ExceptionMessageTest, toCharacterPointer_empty)
+  {
+    ExceptionMessage message{""};
+    ASSERT_TRUE(message.toCharacterPointer() == nullptr);
+  }
+}