Kaynağa Gözat

Added XMLReaderMock class

- added XMLReaderMock class to wrap XMLReader class
for unit testing
- added tests for XMLReaderMock class
Patrick 3 yıl önce
ebeveyn
işleme
192de30052

+ 5 - 2
CMakeLists.txt

@@ -124,7 +124,9 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLReader.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLReader.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLParseMode.hpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLParseData.hpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLParseData.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLReaderMock.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/xml/XMLReaderMock.cpp)
 
 set(LIBRARY_SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/lib/tiny_xml_2/include/tinyxml2.h
@@ -172,7 +174,8 @@ set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/base/VersionTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLDeclarationTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLDocumentTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLReaderTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLReaderTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XMLReaderMockTest.cpp)
 
 ##########################################################
 # Build

+ 23 - 0
source/io/xml/XMLReaderMock.cpp

@@ -0,0 +1,23 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-10-18
+ * Changed:         2020-10-18
+ *
+ * */
+
+#include "XMLReaderMock.hpp"
+
+ls_std::XMLReaderMock::XMLReaderMock() : XMLReader(nullptr, "")
+{}
+
+std::pair<std::string, std::string> ls_std::XMLReaderMock::readAttribute(const ls_std::byte_field &_data)
+{
+  return ls_std::XMLReader::_readAttribute_(_data);
+}
+
+std::list<std::pair<std::string, std::string>> ls_std::XMLReaderMock::readAttributes(ls_std::byte_field _data)
+{
+  return ls_std::XMLReader::_readAttributes_(std::move(_data));
+}

+ 27 - 0
source/io/xml/XMLReaderMock.hpp

@@ -0,0 +1,27 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-10-18
+ * Changed:         2020-10-18
+ *
+ * */
+
+#ifndef LS_STD_XML_READER_MOCK_HPP
+#define LS_STD_XML_READER_MOCK_HPP
+
+#include "XMLReader.hpp"
+
+namespace ls_std {
+  class XMLReaderMock : public XMLReader {
+    public:
+
+      XMLReaderMock();
+      ~XMLReaderMock() = default;
+
+      static std::pair<std::string, std::string> readAttribute(const ls_std::byte_field &_data);
+      static std::list<std::pair<std::string, std::string>> readAttributes(ls_std::byte_field _data);
+  };
+}
+
+#endif

+ 63 - 0
test/cases/io/xml/XMLReaderMockTest.cpp

@@ -0,0 +1,63 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-10-18
+ * Changed:         2020-10-18
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include "../../../../source/io/xml/XMLReaderMock.hpp"
+
+namespace {
+  class XMLReaderMockTest : public ::testing::Test {
+    protected:
+
+      XMLReaderMockTest() = default;
+      ~XMLReaderMockTest() override = default;
+
+      void SetUp() override {}
+      void TearDown() override {}
+  };
+
+  TEST_F(XMLReaderMockTest, readAttribute)
+  {
+    std::pair<std::string, std::string> attribute = ls_std::XMLReaderMock::readAttribute(R"(name="tim")");
+    ASSERT_TRUE(attribute.first == "name");
+    ASSERT_TRUE(attribute.second == "tim");
+
+    attribute = ls_std::XMLReaderMock::readAttribute(R"(id="dialog_001")");
+    ASSERT_TRUE(attribute.first == "id");
+    ASSERT_TRUE(attribute.second == "dialog_001");
+  }
+
+  TEST_F(XMLReaderMockTest, readAttributes)
+  {
+    // first case
+
+    std::string tag = R"(<?xml version="1.0" encoding="UTF-8" ?>)";
+    std::list<std::pair<std::string, std::string>> attributes = ls_std::XMLReaderMock::readAttributes(tag);
+
+    ASSERT_EQ(2, attributes.size());
+
+    auto iterator = std::next(attributes.begin(), 0);
+    ASSERT_TRUE(iterator->first == "version");
+    ASSERT_TRUE(iterator->second == "1.0");
+
+    iterator = std::next(attributes.begin(), 1);
+    ASSERT_TRUE(iterator->first == "encoding");
+    ASSERT_TRUE(iterator->second == "UTF-8");
+
+    // second case
+
+    tag = R"(<stateMachine name="test_machine">)";
+    attributes = ls_std::XMLReaderMock::readAttributes(tag);
+
+    ASSERT_EQ(1, attributes.size());
+
+    iterator = std::next(attributes.begin(), 0);
+    ASSERT_TRUE(iterator->first == "name");
+    ASSERT_TRUE(iterator->second == "test_machine");
+  }
+}