OptionTest.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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_SUITE_END();
  16. private:
  17. public:
  18. void setUp() {
  19. }
  20. void testPutAndGet();
  21. void testPutAndGetAsInt();
  22. void testPutAndGetAsDouble();
  23. void testDefined();
  24. void testBlank();
  25. void testMerge();
  26. void testParent();
  27. };
  28. CPPUNIT_TEST_SUITE_REGISTRATION( OptionTest );
  29. void OptionTest::testPutAndGet() {
  30. Option op;
  31. op.put(PREF_TIMEOUT, "value");
  32. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  33. CPPUNIT_ASSERT_EQUAL(std::string("value"), op.get(PREF_TIMEOUT));
  34. }
  35. void OptionTest::testPutAndGetAsInt() {
  36. Option op;
  37. op.put(PREF_TIMEOUT, "1000");
  38. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  39. CPPUNIT_ASSERT_EQUAL((int32_t)1000, op.getAsInt(PREF_TIMEOUT));
  40. }
  41. void OptionTest::testPutAndGetAsDouble() {
  42. Option op;
  43. op.put(PREF_TIMEOUT, "10.0");
  44. CPPUNIT_ASSERT_EQUAL(10.0, op.getAsDouble(PREF_TIMEOUT));
  45. }
  46. void OptionTest::testDefined()
  47. {
  48. Option op;
  49. op.put(PREF_TIMEOUT, "v");
  50. op.put(PREF_DIR, "");
  51. CPPUNIT_ASSERT(op.defined(PREF_TIMEOUT));
  52. CPPUNIT_ASSERT(op.defined(PREF_DIR));
  53. CPPUNIT_ASSERT(!op.defined(PREF_DAEMON));
  54. }
  55. void OptionTest::testBlank()
  56. {
  57. Option op;
  58. op.put(PREF_TIMEOUT, "v");
  59. op.put(PREF_DIR, "");
  60. CPPUNIT_ASSERT(!op.blank(PREF_TIMEOUT));
  61. CPPUNIT_ASSERT(op.blank(PREF_DIR));
  62. CPPUNIT_ASSERT(op.blank(PREF_DAEMON));
  63. }
  64. void OptionTest::testMerge()
  65. {
  66. Option src;
  67. src.put(PREF_TIMEOUT, "100");
  68. src.put(PREF_DAEMON, "true");
  69. Option dest;
  70. dest.put(PREF_DAEMON, "false");
  71. dest.put(PREF_DIR, "foo");
  72. dest.merge(src);
  73. CPPUNIT_ASSERT_EQUAL(100, dest.getAsInt(PREF_TIMEOUT));
  74. CPPUNIT_ASSERT(dest.getAsBool(PREF_DAEMON));
  75. CPPUNIT_ASSERT_EQUAL(std::string("foo"), dest.get(PREF_DIR));
  76. CPPUNIT_ASSERT(!dest.defined(PREF_OUT));
  77. }
  78. void OptionTest::testParent()
  79. {
  80. Option child;
  81. std::shared_ptr<Option> parent(new Option());
  82. parent->put(PREF_TIMEOUT, "100");
  83. child.put(PREF_DIR, "foo");
  84. CPPUNIT_ASSERT(!child.defined(PREF_TIMEOUT));
  85. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  86. child.setParent(parent);
  87. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  88. CPPUNIT_ASSERT_EQUAL(std::string("100"), child.get(PREF_TIMEOUT));
  89. CPPUNIT_ASSERT_EQUAL((int32_t)100, child.getAsInt(PREF_TIMEOUT));
  90. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  91. // blank
  92. CPPUNIT_ASSERT(!child.blank(PREF_DIR));
  93. child.put(PREF_DIR, "");
  94. CPPUNIT_ASSERT(child.blank(PREF_DIR));
  95. CPPUNIT_ASSERT(!child.blank(PREF_TIMEOUT));
  96. // override
  97. child.put(PREF_TIMEOUT, "200");
  98. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  99. CPPUNIT_ASSERT(child.definedLocal(PREF_TIMEOUT));
  100. CPPUNIT_ASSERT_EQUAL(std::string("200"), child.get(PREF_TIMEOUT));
  101. child.remove(PREF_TIMEOUT);
  102. CPPUNIT_ASSERT(child.defined(PREF_TIMEOUT));
  103. CPPUNIT_ASSERT(!child.definedLocal(PREF_TIMEOUT));
  104. }
  105. } // namespace aria2