Parcourir la source

Add initial cli module

This module contains a first version of the Command class.
Patrick-Christopher Mattulat il y a 7 mois
Parent
commit
57775287ca

+ 51 - 0
CMakeLists.txt

@@ -14,6 +14,7 @@ cmake_minimum_required(VERSION 3.17)
 project(ls-std VERSION 2023.3.0)
 
 set(MODULE_NAME_BOXING ls-std-boxing)
+set(MODULE_NAME_CLI ls-std-cli)
 set(MODULE_NAME_CORE ls-std-core)
 set(MODULE_NAME_ENCODING ls-std-encoding)
 set(MODULE_NAME_EVENT ls-std-event)
@@ -162,6 +163,9 @@ set(SOURCE_FILES_BOXING
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Long.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/String.cpp)
 
+set(SOURCE_FILES_CLI
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/cli/Command.cpp)
+
 set(SOURCE_FILES_CORE
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/EmptyStringArgumentEvaluator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.cpp
@@ -304,6 +308,9 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/LongTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/StringTest.cpp)
 
+    set(UNIT_TEST_FILES_CLI
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/cli/CommandTest.cpp)
+
     set(UNIT_TEST_FILES_CORE
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/EmptyStringArgumentEvaluatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/IndexOutOfBoundsEvaluatorTest.cpp
@@ -438,6 +445,15 @@ if (${LS_STD_BUILD_WITH_TESTS})
     add_executable(${MODULE_NAME_BOXING}-unit-test ${UNIT_TEST_FILES_BOXING})
 endif ()
 
+##########################################################
+# Unit Build Tests (cli)
+##########################################################
+
+if (${LS_STD_BUILD_WITH_TESTS})
+    message("${MODULE_NAME_CLI}: Building unit tests...")
+    add_executable(${MODULE_NAME_CLI}-unit-test ${UNIT_TEST_FILES_CLI})
+endif ()
+
 ##########################################################
 # Unit Build Tests (core)
 ##########################################################
@@ -502,6 +518,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
                 ${UNIT_TEST_FILES_BOXING}
+                ${UNIT_TEST_FILES_CLI}
                 ${UNIT_TEST_FILES_CORE}
                 ${UNIT_TEST_FILES_CORE_JNI}
                 ${UNIT_TEST_FILES_ENCODING}
@@ -515,6 +532,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
                 ${UNIT_TEST_FILES_BOXING}
+                ${UNIT_TEST_FILES_CLI}
                 ${UNIT_TEST_FILES_CORE}
                 ${UNIT_TEST_FILES_ENCODING}
                 ${UNIT_TEST_FILES_EVENT}
@@ -572,6 +590,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
                 ${UNIT_TEST_FILES_BOXING}
+                ${UNIT_TEST_FILES_CLI}
                 ${UNIT_TEST_FILES_CORE}
                 ${UNIT_TEST_FILES_CORE_JNI}
                 ${UNIT_TEST_FILES_ENCODING}
@@ -586,6 +605,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
                 ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
                 ${UNIT_TEST_FILES_BOXING}
+                ${UNIT_TEST_FILES_CLI}
                 ${UNIT_TEST_FILES_CORE}
                 ${UNIT_TEST_FILES_ENCODING}
                 ${UNIT_TEST_FILES_EVENT}
@@ -621,6 +641,22 @@ if (${LS_STD_BUILD_SHARED})
     set_target_properties("${MODULE_NAME_BOXING}" PROPERTIES DEBUG_POSTFIX "-d")
 endif ()
 
+##########################################################
+# Build Library (cli)
+##########################################################
+
+message("${PROJECT_NAME}: Building ${MODULE_NAME_CLI} library version ${PROJECT_VERSION}...")
+
+if (${LS_STD_BUILD_STATIC})
+    add_library("${MODULE_NAME_CLI}" STATIC ${SOURCE_FILES_CLI})
+    set_target_properties("${MODULE_NAME_CLI}" PROPERTIES DEBUG_POSTFIX "-d")
+endif ()
+
+if (${LS_STD_BUILD_SHARED})
+    add_library("${MODULE_NAME_CLI}" SHARED ${SOURCE_FILES_CLI})
+    set_target_properties("${MODULE_NAME_CLI}" PROPERTIES DEBUG_POSTFIX "-d")
+endif ()
+
 ##########################################################
 # Build Library (core)
 ##########################################################
@@ -744,6 +780,19 @@ if (${LS_STD_BUILD_WITH_TESTS})
             "${MODULE_NAME_CORE}")
 endif ()
 
+##########################################################
+# Unit Linking (cli)
+##########################################################
+
+if (${LS_STD_BUILD_WITH_TESTS})
+    message("${MODULE_NAME_CLI}: Linking libraries for unit test application...")
+    target_link_libraries(${MODULE_NAME_CLI}-unit-test
+            gtest
+            gmock
+            gtest_main
+            "${MODULE_NAME_CLI}")
+endif ()
+
 ##########################################################
 # Unit Linking (core)
 ##########################################################
@@ -822,6 +871,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
             gmock
             gtest_main
             "${MODULE_NAME_BOXING}"
+            "${MODULE_NAME_CLI}"
             "${MODULE_NAME_ENCODING}"
             "${MODULE_NAME_EVENT}"
             "${MODULE_NAME_IO}"
@@ -865,6 +915,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
             gmock
             gtest_main
             "${MODULE_NAME_BOXING}"
+            "${MODULE_NAME_CLI}"
             "${MODULE_NAME_ENCODING}"
             "${MODULE_NAME_EVENT}"
             "${MODULE_NAME_IO}"

+ 33 - 0
include/ls-std/cli/Command.hpp

@@ -0,0 +1,33 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2023-09-24
+ * Changed:         2023-09-24
+ *
+ * */
+
+#ifndef LS_STD_COMMAND_HPP
+#define LS_STD_COMMAND_HPP
+
+#include <string>
+
+namespace ls::std::cli
+{
+  class Command
+  {
+    public:
+
+      Command();
+      ~Command();
+
+      [[nodiscard]] ::std::string getName() const;
+      void setName(::std::string_view _name);
+
+    private:
+
+      ::std::string name{};
+  };
+}
+
+#endif

+ 15 - 0
include/ls-std/ls-std-cli.hpp

@@ -0,0 +1,15 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2023-09-24
+ * Changed:         2023-09-24
+ *
+ * */
+
+#ifndef LS_STD_LS_STD_CLI_HPP
+#define LS_STD_LS_STD_CLI_HPP
+
+#include <ls-std/cli/Command.hpp>
+
+#endif

+ 28 - 0
source/ls-std/cli/Command.cpp

@@ -0,0 +1,28 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2023-09-24
+ * Changed:         2023-09-24
+ *
+ * */
+
+#include <ls-std/cli/Command.hpp>
+
+using ls::std::cli::Command;
+using std::string;
+using std::string_view;
+
+Command::Command() = default;
+
+Command::~Command() = default;
+
+string Command::getName() const
+{
+  return this->name;
+}
+
+void Command::setName(string_view _name)
+{
+  this->name = _name;
+}

+ 43 - 0
test/cases/cli/CommandTest.cpp

@@ -0,0 +1,43 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2023-09-24
+ * Changed:         2023-09-24
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-cli.hpp>
+#include <string>
+
+using ls::std::cli::Command;
+using std::string;
+using testing::Test;
+
+namespace
+{
+  class CommandTest : public Test
+  {
+    public:
+
+      CommandTest() = default;
+      ~CommandTest() override = default;
+  };
+
+  TEST_F(CommandTest, getName)
+  {
+    Command command{};
+    ASSERT_TRUE(command.getName().empty());
+  }
+
+  TEST_F(CommandTest, setName)
+  {
+    Command command{};
+    string commandName = "ecm";
+    ASSERT_TRUE(command.getName().empty());
+
+    command.setName(commandName);
+    ASSERT_STREQ(commandName.c_str(), command.getName().c_str());
+  }
+}