Bläddra i källkod

Add argument evaluator for section pair single value row

Patrick-Christopher Mattulat 2 år sedan
förälder
incheckning
9d7da36010

+ 2 - 0
CMakeLists.txt

@@ -171,6 +171,7 @@ set(SOURCE_FILES_IO
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/Logger.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/LogLevel.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairDocument.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRow.cpp
@@ -270,6 +271,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LoggerTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LogLevelTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairValueArgumentEvaluatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairIdentifierValidatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowSingleValueValidatorTest.cpp

+ 35 - 0
include/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.hpp

@@ -0,0 +1,35 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-19
+* Changed:         2023-02-19
+*
+* */
+
+#ifndef LS_STD_SECTION_PAIR_ROW_SINGLE_VALUE_ARGUMENT_EVALUATOR_HPP
+#define LS_STD_SECTION_PAIR_ROW_SINGLE_VALUE_ARGUMENT_EVALUATOR_HPP
+
+#include <ls-std/core/Class.hpp>
+#include <ls-std/core/interface/IEvaluator.hpp>
+#include <ls-std/os/dynamic-goal.hpp>
+#include <string>
+
+namespace ls::std::io
+{
+  class LS_STD_DYNAMIC_GOAL SectionPairRowSingleValueArgumentEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator
+  {
+    public:
+
+      explicit SectionPairRowSingleValueArgumentEvaluator(::std::string _singleValueRow);
+      ~SectionPairRowSingleValueArgumentEvaluator() override;
+
+      void evaluate() override;
+
+    private:
+
+      ::std::string singleValueRow{};
+  };
+}
+
+#endif

+ 1 - 0
include/ls-std/ls-std-io.hpp

@@ -17,6 +17,7 @@
 #include <ls-std/io/section-pair/SectionPairRowEnumType.hpp>
 #include <ls-std/io/section-pair/SectionPairTypes.hpp>
 #include <ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.hpp>
+#include <ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.hpp>
 #include <ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.hpp>
 #include <ls-std/io/section-pair/model/SectionPairDocument.hpp>
 #include <ls-std/io/section-pair/model/SectionPairRow.hpp>

+ 26 - 0
source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp

@@ -0,0 +1,26 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-19
+* Changed:         2023-02-19
+*
+* */
+
+#include <ls-std/core/exception/IllegalArgumentException.hpp>
+#include <ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.hpp>
+#include <ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.hpp>
+
+ls::std::io::SectionPairRowSingleValueArgumentEvaluator::SectionPairRowSingleValueArgumentEvaluator(::std::string _singleValueRow) : ls::std::core::Class("SectionPairRowSingleValueArgumentEvaluator"), singleValueRow(::std::move(_singleValueRow))
+{}
+
+ls::std::io::SectionPairRowSingleValueArgumentEvaluator::~SectionPairRowSingleValueArgumentEvaluator() = default;
+
+void ls::std::io::SectionPairRowSingleValueArgumentEvaluator::evaluate()
+{
+  if (!ls::std::io::SectionPairRowSingleValueValidator{this->singleValueRow}.isValid())
+  {
+    ::std::string message = "\"" + this->singleValueRow + "\" is not a valid section pair single value row!";
+    throw ls::std::core::IllegalArgumentException{message};
+  }
+}

+ 1 - 1
source/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.cpp

@@ -31,5 +31,5 @@ bool ls::std::io::SectionPairRowSingleValueValidator::isValid()
   ::std::string identifierRegex = ls::std::io::SectionPairIdentifierValidator::getValidationRegex();
   ::std::string valueRegex = ls::std::io::SectionPairValueValidator::getValidationRegex();
 
-  return "(" + identifierRegex + R"(={1})" + valueRegex + ")";
+  return "((" + identifierRegex + R"()={1}()" + valueRegex + "))";
 }

+ 70 - 0
test/cases/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluatorTest.cpp

@@ -0,0 +1,70 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-19
+* Changed:         2023-02-19
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-core.hpp>
+#include <ls-std/ls-std-io.hpp>
+#include <string>
+
+using namespace ls::std::core;
+using namespace ls::std::io;
+using namespace ::std;
+
+namespace
+{
+  class SectionPairRowSingleValueArgumentEvaluatorTest : public ::testing::Test
+  {
+    protected:
+
+      SectionPairRowSingleValueArgumentEvaluatorTest() = default;
+      ~SectionPairRowSingleValueArgumentEvaluatorTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  class SectionPairRowSingleValueArgumentEvaluatorNotValidTest : public ::testing::TestWithParam<string>
+  {
+    protected:
+
+      SectionPairRowSingleValueArgumentEvaluatorNotValidTest() = default;
+      ~SectionPairRowSingleValueArgumentEvaluatorNotValidTest() override = default;
+  };
+
+  TEST_F(SectionPairRowSingleValueArgumentEvaluatorTest, getClassName)
+  {
+    shared_ptr<SectionPairRowSingleValueArgumentEvaluator> evaluator = make_shared<SectionPairRowSingleValueArgumentEvaluator>("color=blue");
+    ASSERT_STREQ("SectionPairRowSingleValueArgumentEvaluator", evaluator->getClassName().c_str());
+  }
+
+  TEST_P(SectionPairRowSingleValueArgumentEvaluatorNotValidTest, evaluate)
+  {
+    EXPECT_THROW(
+        {
+          try
+          {
+            SectionPairRowSingleValueArgumentEvaluator(GetParam()).evaluate();
+          }
+          catch (const IllegalArgumentException &_exception)
+          {
+            ::std::string actual = _exception.what();
+            ::std::string expected = "IllegalArgumentException thrown - \"" + GetParam() + "\" is not a valid section pair single value row!";
+
+            ASSERT_STREQ(expected.c_str(), actual.c_str());
+            throw;
+          }
+        },
+        IllegalArgumentException);
+  }
+
+  INSTANTIATE_TEST_SUITE_P(SectionPairRowSingleValueArgumentEvaluatorTest, SectionPairRowSingleValueArgumentEvaluatorNotValidTest, ::testing::Values("favourite-color", "a value\n"));
+}

+ 1 - 1
test/cases/io/section-pair/validator/SectionPairRowSingleValueValidatorTest.cpp

@@ -64,5 +64,5 @@ namespace
   }
 
   INSTANTIATE_TEST_SUITE_P(SectionPairRowSingleValueValidatorTest, SectionPairRowSingleValueValidatorIsValidTest, ::testing::Values("favourite-color=blue" + NewLine::getUnixNewLine(), "hair-color=red" + NewLine::getWindowsNewLine(), "height=167"));
-  INSTANTIATE_TEST_SUITE_P(SectionPairRowSingleValueValidatorTest, SectionPairRowSingleValueValidatorNotValidTest, ::testing::Values("color blue"));
+  INSTANTIATE_TEST_SUITE_P(SectionPairRowSingleValueValidatorTest, SectionPairRowSingleValueValidatorNotValidTest, ::testing::Values("color blue", "a value\n"));
 }