OptionTest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. }
  21. void testPutAndGet();
  22. void testPutAndGetAsInt();
  23. void testPutAndGetAsDouble();
  24. void testDefined();
  25. void testBlank();
  26. void testMerge();
  27. void testParent();
  28. void testRemove();
  29. };
  30. CPPUNIT_TEST_SUITE_REGISTRATION( OptionTest );
  31. void OptionTest::testPutAndGet() {
  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. Option op;
  39. op.put(PREF_TIMEOUT, "1000");
  40. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  41. CPPUNIT_ASSERT_EQUAL((int32_t)1000, op.getAsInt(PREF_TIMEOUT));
  42. }
  43. void OptionTest::testPutAndGetAsDouble() {
  44. Option op;
  45. op.put(PREF_TIMEOUT, "10.0");
  46. CPPUNIT_ASSERT_EQUAL(10.0, op.getAsDouble(PREF_TIMEOUT));
  47. }
  48. void OptionTest::testDefined()
  49. {
  50. Option op;
  51. op.put(PREF_TIMEOUT, "v");
  52. op.put(PREF_DIR, "");
  53. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  54. CPPUNIT_ASSERT(op.defined(PREF_DIR));
  55. CPPUNIT_ASSERT(!op.defined(PREF_DAEMON));
  56. }
  57. void OptionTest::testBlank()
  58. {
  59. Option op;
  60. op.put(PREF_TIMEOUT, "v");
  61. op.put(PREF_DIR, "");
  62. CPPUNIT_ASSERT(!op.blank(PREF_TIMEOUT));
  63. CPPUNIT_ASSERT(op.blank(PREF_DIR));
  64. CPPUNIT_ASSERT(op.blank(PREF_DAEMON));
  65. }
  66. void OptionTest::testMerge()
  67. {
  68. Option src;
  69. src.put(PREF_TIMEOUT, "100");
  70. src.put(PREF_DAEMON, "true");
  71. Option dest;
  72. dest.put(PREF_DAEMON, "false");
  73. dest.put(PREF_DIR, "foo");
  74. dest.merge(src);
  75. CPPUNIT_ASSERT_EQUAL(100, dest.getAsInt(PREF_TIMEOUT));
  76. CPPUNIT_ASSERT(dest.getAsBool(PREF_DAEMON));
  77. CPPUNIT_ASSERT_EQUAL(std::string("foo"), dest.get(PREF_DIR));
  78. CPPUNIT_ASSERT(!dest.defined(PREF_OUT));
  79. }
  80. void OptionTest::testParent()
  81. {
  82. Option child;
  83. std::shared_ptr<Option> parent(new Option());
  84. parent->put(PREF_TIMEOUT, "100");
  85. child.put(PREF_DIR, "foo");
  86. CPPUNIT_ASSERT(!child.defined(PREF_TIMEOUT));
  87. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  88. child.setParent(parent);
  89. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  90. CPPUNIT_ASSERT_EQUAL(std::string("100"), child.get(PREF_TIMEOUT));
  91. CPPUNIT_ASSERT_EQUAL((int32_t)100, child.getAsInt(PREF_TIMEOUT));
  92. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  93. // blank
  94. CPPUNIT_ASSERT(!child.blank(PREF_DIR));
  95. child.put(PREF_DIR, "");
  96. CPPUNIT_ASSERT(child.blank(PREF_DIR));
  97. CPPUNIT_ASSERT(!child.blank(PREF_TIMEOUT));
  98. // override
  99. child.put(PREF_TIMEOUT, "200");
  100. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  101. CPPUNIT_ASSERT(child.definedLocal(PREF_TIMEOUT));
  102. CPPUNIT_ASSERT_EQUAL(std::string("200"), child.get(PREF_TIMEOUT));
  103. child.removeLocal(PREF_TIMEOUT);
  104. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  105. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  106. }
  107. void OptionTest::testRemove()
  108. {
  109. Option child;
  110. auto parent = std::make_shared<Option>();
  111. child.setParent(parent);
  112. child.put(PREF_DIR, "foo");
  113. child.put(PREF_TIMEOUT, "200");
  114. parent->put(PREF_DIR, "bar");
  115. parent->put(PREF_TIMEOUT, "400");
  116. child.remove(PREF_DIR);
  117. CPPUNIT_ASSERT(!child.defined(PREF_DIR));
  118. child.removeLocal(PREF_TIMEOUT);
  119. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  120. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  121. CPPUNIT_ASSERT(parent->defined(PREF_TIMEOUT));
  122. }
  123. } // namespace aria2