SerializableSectionPairRowListValueTest.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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::io::NewLine;
  16. using ls::standard::io::SectionPairRowListValue;
  17. using ls::standard::io::SerializableSectionPairParameter;
  18. using ls::standard::io::SerializableSectionPairRowListValue;
  19. using std::make_shared;
  20. using std::shared_ptr;
  21. using std::string;
  22. using testing::Test;
  23. using testing::TestWithParam;
  24. using testing::Values;
  25. namespace
  26. {
  27. class SerializableSectionPairRowListValueTest : public Test
  28. {
  29. public:
  30. SerializableSectionPairRowListValueTest() = default;
  31. ~SerializableSectionPairRowListValueTest() override = default;
  32. };
  33. class SerializableSectionPairRowListValueTest_LineBreakTest : public TestWithParam<string>
  34. {
  35. public:
  36. SerializableSectionPairRowListValueTest_LineBreakTest() = default;
  37. ~SerializableSectionPairRowListValueTest_LineBreakTest() override = default;
  38. };
  39. TEST_F(SerializableSectionPairRowListValueTest, constructor_no_reference)
  40. {
  41. SerializableSectionPairParameter parameter{};
  42. EXPECT_THROW(
  43. {
  44. try
  45. {
  46. SerializableSectionPairRowListValue serializable(parameter);
  47. }
  48. catch (const IllegalArgumentException &_exception)
  49. {
  50. throw;
  51. }
  52. },
  53. IllegalArgumentException);
  54. }
  55. TEST_F(SerializableSectionPairRowListValueTest, getClassName)
  56. {
  57. SerializableSectionPairParameter parameter{};
  58. parameter.setValue(make_shared<SectionPairRowListValue>());
  59. ASSERT_STREQ("SerializableSectionPairRowListValue", SerializableSectionPairRowListValue{parameter}.getClassName().c_str());
  60. }
  61. TEST_F(SerializableSectionPairRowListValueTest, getValue)
  62. {
  63. SerializableSectionPairParameter parameter{};
  64. const auto value = make_shared<SectionPairRowListValue>();
  65. parameter.setValue(value);
  66. const SerializableSectionPairRowListValue serializable(parameter);
  67. ASSERT_TRUE(value == serializable.getValue());
  68. }
  69. TEST_P(SerializableSectionPairRowListValueTest_LineBreakTest, marshal)
  70. {
  71. SerializableSectionPairParameter parameter{};
  72. const auto value = make_shared<SectionPairRowListValue>();
  73. value->add("Drumming");
  74. value->add("Reading");
  75. value->add("Coding");
  76. parameter.setValue(value);
  77. const string& newLine = GetParam();
  78. parameter.setNewLine(newLine);
  79. SerializableSectionPairRowListValue serializable(parameter);
  80. const string expected = " Drumming" + newLine + " Reading" + newLine + " Coding" + newLine;
  81. ASSERT_STREQ(expected.c_str(), serializable.marshal().c_str());
  82. }
  83. TEST_P(SerializableSectionPairRowListValueTest_LineBreakTest, unmarshal)
  84. {
  85. SerializableSectionPairParameter parameter{};
  86. const auto value = make_shared<SectionPairRowListValue>();
  87. parameter.setValue(value);
  88. const string& newLine = GetParam();
  89. parameter.setNewLine(newLine);
  90. SerializableSectionPairRowListValue serializable(parameter);
  91. const string serializedListValue = " Drumming" + newLine + " Reading" + newLine + " Coding" + newLine;
  92. serializable.unmarshal(serializedListValue);
  93. ASSERT_EQ(3, value->getSize());
  94. ASSERT_STREQ("Drumming", value->get(0).c_str());
  95. ASSERT_STREQ("Reading", value->get(1).c_str());
  96. ASSERT_STREQ("Coding", value->get(2).c_str());
  97. }
  98. TEST_F(SerializableSectionPairRowListValueTest, unmarshal_empty_string)
  99. {
  100. SerializableSectionPairParameter parameter{};
  101. parameter.setValue(make_shared<SectionPairRowListValue>());
  102. SerializableSectionPairRowListValue serializable(parameter);
  103. EXPECT_THROW(
  104. {
  105. try
  106. {
  107. serializable.unmarshal("");
  108. }
  109. catch (const IllegalArgumentException &_exception)
  110. {
  111. throw;
  112. }
  113. },
  114. IllegalArgumentException);
  115. }
  116. INSTANTIATE_TEST_SUITE_P(LineBreakTest, SerializableSectionPairRowListValueTest_LineBreakTest, Values(NewLine::getUnixNewLine(), NewLine::getWindowsNewLine()));
  117. }