OptionTest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "Option.h"
  2. #include <string>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. #include "prefs.h"
  5. namespace aria2 {
  6. class OptionTest : public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(OptionTest);
  8. CPPUNIT_TEST(testPutAndGet);
  9. CPPUNIT_TEST(testPutAndGetAsInt);
  10. CPPUNIT_TEST(testPutAndGetAsDouble);
  11. CPPUNIT_TEST(testDefined);
  12. CPPUNIT_TEST(testBlank);
  13. CPPUNIT_TEST(testMerge);
  14. CPPUNIT_TEST(testParent);
  15. CPPUNIT_TEST(testRemove);
  16. CPPUNIT_TEST_SUITE_END();
  17. private:
  18. public:
  19. void setUp() {}
  20. void testPutAndGet();
  21. void testPutAndGetAsInt();
  22. void testPutAndGetAsDouble();
  23. void testDefined();
  24. void testBlank();
  25. void testMerge();
  26. void testParent();
  27. void testRemove();
  28. };
  29. CPPUNIT_TEST_SUITE_REGISTRATION(OptionTest);
  30. void OptionTest::testPutAndGet()
  31. {
  32. Option op;
  33. op.put(PREF_TIMEOUT, "value");
  34. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  35. CPPUNIT_ASSERT_EQUAL(std::string("value"), op.get(PREF_TIMEOUT));
  36. }
  37. void OptionTest::testPutAndGetAsInt()
  38. {
  39. Option op;
  40. op.put(PREF_TIMEOUT, "1000");
  41. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  42. CPPUNIT_ASSERT_EQUAL((int32_t)1000, op.getAsInt(PREF_TIMEOUT));
  43. }
  44. void OptionTest::testPutAndGetAsDouble()
  45. {
  46. Option op;
  47. op.put(PREF_TIMEOUT, "10.0");
  48. CPPUNIT_ASSERT_EQUAL(10.0, op.getAsDouble(PREF_TIMEOUT));
  49. }
  50. void OptionTest::testDefined()
  51. {
  52. Option op;
  53. op.put(PREF_TIMEOUT, "v");
  54. op.put(PREF_DIR, "");
  55. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  56. CPPUNIT_ASSERT(op.defined(PREF_DIR));
  57. CPPUNIT_ASSERT(!op.defined(PREF_DAEMON));
  58. }
  59. void OptionTest::testBlank()
  60. {
  61. Option op;
  62. op.put(PREF_TIMEOUT, "v");
  63. op.put(PREF_DIR, "");
  64. CPPUNIT_ASSERT(!op.blank(PREF_TIMEOUT));
  65. CPPUNIT_ASSERT(op.blank(PREF_DIR));
  66. CPPUNIT_ASSERT(op.blank(PREF_DAEMON));
  67. }
  68. void OptionTest::testMerge()
  69. {
  70. Option src;
  71. src.put(PREF_TIMEOUT, "100");
  72. src.put(PREF_DAEMON, "true");
  73. Option dest;
  74. dest.put(PREF_DAEMON, "false");
  75. dest.put(PREF_DIR, "foo");
  76. dest.merge(src);
  77. CPPUNIT_ASSERT_EQUAL(100, dest.getAsInt(PREF_TIMEOUT));
  78. CPPUNIT_ASSERT(dest.getAsBool(PREF_DAEMON));
  79. CPPUNIT_ASSERT_EQUAL(std::string("foo"), dest.get(PREF_DIR));
  80. CPPUNIT_ASSERT(!dest.defined(PREF_OUT));
  81. }
  82. void OptionTest::testParent()
  83. {
  84. Option child;
  85. std::shared_ptr<Option> parent(new Option());
  86. parent->put(PREF_TIMEOUT, "100");
  87. child.put(PREF_DIR, "foo");
  88. CPPUNIT_ASSERT(!child.defined(PREF_TIMEOUT));
  89. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  90. child.setParent(parent);
  91. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  92. CPPUNIT_ASSERT_EQUAL(std::string("100"), child.get(PREF_TIMEOUT));
  93. CPPUNIT_ASSERT_EQUAL((int32_t)100, child.getAsInt(PREF_TIMEOUT));
  94. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  95. // blank
  96. CPPUNIT_ASSERT(!child.blank(PREF_DIR));
  97. child.put(PREF_DIR, "");
  98. CPPUNIT_ASSERT(child.blank(PREF_DIR));
  99. CPPUNIT_ASSERT(!child.blank(PREF_TIMEOUT));
  100. // override
  101. child.put(PREF_TIMEOUT, "200");
  102. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  103. CPPUNIT_ASSERT(child.definedLocal(PREF_TIMEOUT));
  104. CPPUNIT_ASSERT_EQUAL(std::string("200"), child.get(PREF_TIMEOUT));
  105. child.removeLocal(PREF_TIMEOUT);
  106. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  107. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  108. }
  109. void OptionTest::testRemove()
  110. {
  111. Option child;
  112. auto parent = std::make_shared<Option>();
  113. child.setParent(parent);
  114. child.put(PREF_DIR, "foo");
  115. child.put(PREF_TIMEOUT, "200");
  116. parent->put(PREF_DIR, "bar");
  117. parent->put(PREF_TIMEOUT, "400");
  118. child.remove(PREF_DIR);
  119. CPPUNIT_ASSERT(!child.defined(PREF_DIR));
  120. child.removeLocal(PREF_TIMEOUT);
  121. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  122. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  123. CPPUNIT_ASSERT(parent->defined(PREF_TIMEOUT));
  124. }
  125. } // namespace aria2