SerializableSectionPairRowSingleValueTest.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Co-Author: Claude Sonnet 4.6 (LLM)
  4. * Company: Lynar Studios
  5. * E-Mail: webmaster@lynarstudios.com
  6. * Created: 2023-02-11
  7. * Changed: 2026-06-23
  8. *
  9. * */
  10. #include <gtest/gtest.h>
  11. #include <ls-std/ls-std-core.hpp>
  12. #include <ls-std/ls-std-io.hpp>
  13. #include <memory>
  14. using ls::standard::core::IllegalArgumentException;
  15. using ls::standard::core::type::byte_field;
  16. using ls::standard::io::NewLine;
  17. using ls::standard::io::SectionPairRowSingleValue;
  18. using ls::standard::io::SerializableSectionPairParameter;
  19. using ls::standard::io::SerializableSectionPairRowSingleValue;
  20. using std::dynamic_pointer_cast;
  21. using std::make_shared;
  22. using std::shared_ptr;
  23. using std::string;
  24. using testing::Test;
  25. using testing::TestWithParam;
  26. using testing::Values;
  27. namespace
  28. {
  29. class SerializableSectionPairRowSingleValueTest : public Test
  30. {
  31. public:
  32. SerializableSectionPairRowSingleValueTest() = default;
  33. ~SerializableSectionPairRowSingleValueTest() override = default;
  34. };
  35. class SerializableSectionPairRowSingleValueTest_LineBreakTest : public TestWithParam<string>
  36. {
  37. public:
  38. SerializableSectionPairRowSingleValueTest_LineBreakTest() = default;
  39. ~SerializableSectionPairRowSingleValueTest_LineBreakTest() override = default;
  40. };
  41. TEST_F(SerializableSectionPairRowSingleValueTest, constructor_no_reference)
  42. {
  43. const SerializableSectionPairParameter parameter{};
  44. EXPECT_THROW(
  45. {
  46. try
  47. {
  48. SerializableSectionPairRowSingleValue serializable(parameter);
  49. }
  50. catch (const IllegalArgumentException &_exception)
  51. {
  52. throw;
  53. }
  54. },
  55. IllegalArgumentException);
  56. }
  57. TEST_F(SerializableSectionPairRowSingleValueTest, getClassName)
  58. {
  59. SerializableSectionPairParameter parameter{};
  60. parameter.setValue(make_shared<SectionPairRowSingleValue>("empty"));
  61. ASSERT_STREQ("SerializableSectionPairRowSingleValue", SerializableSectionPairRowSingleValue{parameter}.getClassName().c_str());
  62. }
  63. TEST_F(SerializableSectionPairRowSingleValueTest, getValue)
  64. {
  65. SerializableSectionPairParameter parameter{};
  66. const auto value = make_shared<SectionPairRowSingleValue>("empty");
  67. parameter.setValue(value);
  68. const SerializableSectionPairRowSingleValue serializable(parameter);
  69. ASSERT_TRUE(value == serializable.getValue());
  70. }
  71. TEST_P(SerializableSectionPairRowSingleValueTest_LineBreakTest, marshal)
  72. {
  73. const string& newLine = GetParam();
  74. SerializableSectionPairParameter parameter{};
  75. parameter.setValue(make_shared<SectionPairRowSingleValue>("empty"));
  76. parameter.setNewLine(newLine);
  77. SerializableSectionPairRowSingleValue serializable(parameter);
  78. const byte_field expected = "empty" + newLine;
  79. const byte_field actual = serializable.marshal();
  80. ASSERT_STREQ(expected.c_str(), actual.c_str());
  81. }
  82. TEST_F(SerializableSectionPairRowSingleValueTest, unmarshal)
  83. {
  84. SerializableSectionPairParameter parameter{};
  85. parameter.setValue(make_shared<SectionPairRowSingleValue>("empty"));
  86. SerializableSectionPairRowSingleValue serializable(parameter);
  87. serializable.unmarshal("blue");
  88. ASSERT_STREQ("blue", dynamic_pointer_cast<SectionPairRowSingleValue>(parameter.getValue())->get().c_str());
  89. }
  90. TEST_F(SerializableSectionPairRowSingleValueTest, unmarshal_empty_string)
  91. {
  92. SerializableSectionPairParameter parameter{};
  93. parameter.setValue(make_shared<SectionPairRowSingleValue>("empty"));
  94. SerializableSectionPairRowSingleValue serializable(parameter);
  95. EXPECT_THROW(
  96. {
  97. try
  98. {
  99. serializable.unmarshal("");
  100. }
  101. catch (const IllegalArgumentException &_exception)
  102. {
  103. throw;
  104. }
  105. },
  106. IllegalArgumentException);
  107. }
  108. INSTANTIATE_TEST_SUITE_P(LineBreakTest, SerializableSectionPairRowSingleValueTest_LineBreakTest, Values(NewLine::getUnixNewLine(), NewLine::getWindowsNewLine()));
  109. }