Browse Source

Add SectionPairRowValueValidator class

This validator checks whether a given value contains valid characters.
Patrick-Christopher Mattulat 2 years ago
parent
commit
4bf2e3269f

+ 2 - 0
CMakeLists.txt

@@ -174,6 +174,7 @@ set(SOURCE_FILES_IO
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairIdentifierArgumentEvaluator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairIdentifierValidator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairRow.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairRowValueValidator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlAttribute.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDeclaration.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDocument.cpp
@@ -258,6 +259,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairIdentifierArgumentEvaluatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairIdentifierValidatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairRowTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairRowValueValidatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlAttributeTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDeclarationTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDocumentTest.cpp

+ 34 - 0
include/ls-std/io/section-pair/SectionPairRowValueValidator.hpp

@@ -0,0 +1,34 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-09
+* Changed:         2023-02-09
+*
+* */
+
+#ifndef LS_STD_SECTION_PAIR_ROW_VALUE_VALIDATOR_HPP
+#define LS_STD_SECTION_PAIR_ROW_VALUE_VALIDATOR_HPP
+
+#include <ls-std/core/Class.hpp>
+#include <ls-std/core/interface/IValidator.hpp>
+#include <string>
+
+namespace ls::std::io
+{
+  class SectionPairRowValueValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator
+  {
+    public:
+
+      explicit SectionPairRowValueValidator(::std::string _value);
+      ~SectionPairRowValueValidator() override;
+
+      bool isValid() override;
+
+    private:
+
+      ::std::string value{};
+  };
+}
+
+#endif

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

@@ -24,6 +24,7 @@
 #include <ls-std/io/section-pair/SectionPairIdentifierValidator.hpp>
 #include <ls-std/io/section-pair/SectionPairRow.hpp>
 #include <ls-std/io/section-pair/SectionPairRowEnumType.hpp>
+#include <ls-std/io/section-pair/SectionPairRowValueValidator.hpp>
 
 #include <ls-std/io/xml/XmlAttribute.hpp>
 #include <ls-std/io/xml/XmlDeclaration.hpp>

+ 21 - 0
source/ls-std/io/section-pair/SectionPairRowValueValidator.cpp

@@ -0,0 +1,21 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-09
+* Changed:         2023-02-09
+*
+* */
+
+#include <ls-std/io/section-pair/SectionPairRowValueValidator.hpp>
+
+ls::std::io::SectionPairRowValueValidator::SectionPairRowValueValidator(::std::string _value) : ls::std::core::Class("SectionPairRowValueValidator"), value(::std::move(_value))
+{}
+
+ls::std::io::SectionPairRowValueValidator::~SectionPairRowValueValidator() = default;
+
+bool ls::std::io::SectionPairRowValueValidator::isValid()
+{
+  size_t foundPosition = this->value.find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789_#![]{}()/$ۤ%?<>+:;., *\"");
+  return foundPosition == ::std::string::npos;
+}

+ 52 - 0
test/cases/io/section-pair/SectionPairRowValueValidatorTest.cpp

@@ -0,0 +1,52 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-09
+* Changed:         2023-02-09
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std/ls-std-core.hpp>
+#include <ls-std/ls-std-io.hpp>
+
+using namespace ls::std::core;
+using namespace ls::std::io;
+using namespace ::std;
+
+namespace
+{
+  class SectionPairRowValueValidatorTest : public ::testing::Test
+  {
+    protected:
+
+      SectionPairRowValueValidatorTest() = default;
+      ~SectionPairRowValueValidatorTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(SectionPairRowValueValidatorTest, getClassName)
+  {
+    ASSERT_STREQ("SectionPairRowValueValidator", SectionPairRowValueValidator{"any value"}.getClassName().c_str());
+  }
+
+  TEST_F(SectionPairRowValueValidatorTest, isValid)
+  {
+    ASSERT_TRUE(SectionPairRowValueValidator{"blue is my favourite color!"}.isValid());
+    ASSERT_TRUE(SectionPairRowValueValidator{"Age"}.isValid());
+    ASSERT_TRUE(SectionPairRowValueValidator{"Tom"}.isValid());
+    ASSERT_TRUE(SectionPairRowValueValidator{"\"Tom\""}.isValid());
+  }
+
+  TEST_F(SectionPairRowValueValidatorTest, isValid_not_valid)
+  {
+    ASSERT_FALSE(SectionPairRowValueValidator{"1+2=3"}.isValid());
+    ASSERT_FALSE(SectionPairRowValueValidator{"\\escape"}.isValid());
+  }
+}