Browse Source

Add SectionPairIdentifierValidator

This validator will check whether a given identifier is valid.
Patrick-Christopher Mattulat 2 năm trước cách đây
mục cha
commit
9284f67025

+ 2 - 0
CMakeLists.txt

@@ -172,6 +172,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/SectionPairRow.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairRowIdentifierValidator.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
@@ -253,6 +254,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/kv/KvParserTest.cpp
             ${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/SectionPairRowIdentifierValidatorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairRowTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlAttributeTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDeclarationTest.cpp

+ 34 - 0
include/ls-std/io/section-pair/SectionPairIdentifierValidator.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_IDENTIFIER_VALIDATOR_HPP
+#define LS_STD_SECTION_PAIR_IDENTIFIER_VALIDATOR_HPP
+
+#include <ls-std/core/Class.hpp>
+#include <ls-std/core/interface/IValidator.hpp>
+#include <string>
+
+namespace ls::std::io
+{
+  class SectionPairIdentifierValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator
+  {
+    public:
+
+      explicit SectionPairIdentifierValidator(::std::string _identifier);
+      ~SectionPairIdentifierValidator() override;
+
+      bool isValid() override;
+
+    private:
+
+      ::std::string identifier{};
+  };
+}
+
+#endif

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

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-14
- * Changed:         2023-02-08
+ * Changed:         2023-02-09
  *
  * */
 
@@ -20,6 +20,7 @@
 #include <ls-std/io/logging/LogLevelValue.hpp>
 #include <ls-std/io/logging/Logger.hpp>
 
+#include <ls-std/io/section-pair/SectionPairIdentifierValidator.hpp>
 #include <ls-std/io/section-pair/SectionPairRow.hpp>
 #include <ls-std/io/section-pair/SectionPairRowEnumType.hpp>
 

+ 30 - 0
source/ls-std/io/section-pair/SectionPairIdentifierValidator.cpp

@@ -0,0 +1,30 @@
+/*
+* 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/SectionPairIdentifierValidator.hpp>
+
+ls::std::io::SectionPairIdentifierValidator::SectionPairIdentifierValidator(::std::string _identifier) : ls::std::core::Class("SectionPairIdentifierValidator"), identifier(::std::move(_identifier))
+{}
+
+ls::std::io::SectionPairIdentifierValidator::~SectionPairIdentifierValidator() = default;
+
+bool ls::std::io::SectionPairIdentifierValidator::isValid()
+{
+  bool startsWithValidCharacter{}, containsValidCharacters{}, doesNotExceedMaxSize{};
+
+  if (!this->identifier.empty())
+  {
+    size_t foundPosition = this->identifier.find_first_not_of("abcdefghijklmnopqrstuvwxyz-0123456789");
+    startsWithValidCharacter = ::std::string{this->identifier[0]}.find_first_not_of("abcdefghijklmnopqrstuvwxyz") == ::std::string::npos;
+    containsValidCharacters = foundPosition == ::std::string::npos;
+    doesNotExceedMaxSize = this->identifier.size() <= 16;
+  }
+
+  return startsWithValidCharacter && containsValidCharacters && doesNotExceedMaxSize;
+}

+ 56 - 0
test/cases/io/section-pair/SectionPairIdentifierValidatorTest.cpp

@@ -0,0 +1,56 @@
+/*
+* 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 SectionPairIdentifierValidatorTest : public ::testing::Test
+  {
+    protected:
+
+      SectionPairIdentifierValidatorTest() = default;
+      ~SectionPairIdentifierValidatorTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(SectionPairIdentifierValidatorTest, getClassName)
+  {
+    ASSERT_STREQ("SectionPairIdentifierValidator", SectionPairIdentifierValidator{"tmp-key"}.getClassName().c_str());
+  }
+
+  TEST_F(SectionPairIdentifierValidatorTest, isValid)
+  {
+    ASSERT_TRUE(SectionPairIdentifierValidator{"color"}.isValid());
+    ASSERT_TRUE(SectionPairIdentifierValidator{"favourite-color"}.isValid());
+    ASSERT_TRUE(SectionPairIdentifierValidator{"age"}.isValid());
+    ASSERT_TRUE(SectionPairIdentifierValidator{"name"}.isValid());
+  }
+
+  TEST_F(SectionPairIdentifierValidatorTest, isValid_not_valid)
+  {
+    ASSERT_FALSE(SectionPairIdentifierValidator{"_color"}.isValid());
+    ASSERT_FALSE(SectionPairIdentifierValidator{"8color"}.isValid());
+    ASSERT_FALSE(SectionPairIdentifierValidator{"colOr"}.isValid());
+    ASSERT_FALSE(SectionPairIdentifierValidator{"color:"}.isValid());
+    ASSERT_FALSE(SectionPairIdentifierValidator{"-color"}.isValid());
+    ASSERT_FALSE(SectionPairIdentifierValidator{"color-is-valid-but-too-long"}.isValid());
+  }
+}