BDETest.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "BDE.h"
  2. #include <cstring>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. #include "Util.h"
  5. namespace aria2 {
  6. class BDETest:public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(BDETest);
  8. CPPUNIT_TEST(testString);
  9. CPPUNIT_TEST(testInteger);
  10. CPPUNIT_TEST(testDict);
  11. CPPUNIT_TEST(testDictIter);
  12. CPPUNIT_TEST(testList);
  13. CPPUNIT_TEST(testListIter);
  14. CPPUNIT_TEST_SUITE_END();
  15. private:
  16. public:
  17. void testString();
  18. void testInteger();
  19. void testDict();
  20. void testDictIter();
  21. void testList();
  22. void testListIter();
  23. void testDecode();
  24. void testEncode();
  25. };
  26. CPPUNIT_TEST_SUITE_REGISTRATION( BDETest );
  27. void BDETest::testString()
  28. {
  29. BDE s(std::string("aria2"));
  30. CPPUNIT_ASSERT_EQUAL(std::string("aria2"), s.s());
  31. unsigned char dataWithNull[] = { 0xf0, '\0', 0x0f };
  32. BDE sWithNull(dataWithNull, sizeof(dataWithNull));
  33. CPPUNIT_ASSERT(memcmp(dataWithNull, sWithNull.s().c_str(),
  34. sizeof(dataWithNull)) == 0);
  35. BDE zero("");
  36. CPPUNIT_ASSERT_EQUAL(std::string(""), zero.s());
  37. const unsigned char uc[] = { 0x08, 0x19, 0x2a, 0x3b };
  38. BDE data(uc, sizeof(uc));
  39. CPPUNIT_ASSERT_EQUAL(Util::toHex(uc, sizeof(uc)),
  40. Util::toHex(data.uc(), data.s().size()));
  41. }
  42. void BDETest::testInteger()
  43. {
  44. BDE integer(INT64_MAX);
  45. CPPUNIT_ASSERT_EQUAL(INT64_MAX, integer.i());
  46. }
  47. void BDETest::testDict()
  48. {
  49. BDE dict = BDE::dict();
  50. CPPUNIT_ASSERT(dict.empty());
  51. dict["ki"] = 7;
  52. dict["ks"] = std::string("abc");
  53. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), dict.size());
  54. CPPUNIT_ASSERT(dict.containsKey("ki"));
  55. CPPUNIT_ASSERT_EQUAL(static_cast<BDE::Integer>(7), dict["ki"].i());
  56. CPPUNIT_ASSERT(dict.containsKey("ks"));
  57. CPPUNIT_ASSERT_EQUAL(std::string("abc"), dict["ks"].s());
  58. CPPUNIT_ASSERT(dict["kn"].isNone()); // This adds kn key with default value.
  59. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), dict.size());
  60. CPPUNIT_ASSERT(dict.containsKey("kn"));
  61. const BDE& ref = dict;
  62. ref["kn2"]; // This doesn't add kn2 key.
  63. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), ref.size());
  64. CPPUNIT_ASSERT(!ref.containsKey("kn2"));
  65. dict.removeKey("kn");
  66. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), dict.size());
  67. CPPUNIT_ASSERT(!dict.containsKey("kn"));
  68. }
  69. void BDETest::testDictIter()
  70. {
  71. BDE dict = BDE::dict();
  72. dict["alpha2"] = std::string("alpha2");
  73. dict["charlie"] = std::string("charlie");
  74. dict["bravo"] = std::string("bravo");
  75. dict["alpha"] = std::string("alpha");
  76. BDE::Dict::iterator i = dict.dictBegin();
  77. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), (*i++).first);
  78. CPPUNIT_ASSERT_EQUAL(std::string("alpha2"), (*i++).first);
  79. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), (*i++).first);
  80. CPPUNIT_ASSERT_EQUAL(std::string("charlie"), (*i++).first);
  81. CPPUNIT_ASSERT(dict.dictEnd() == i);
  82. const BDE& ref = dict;
  83. BDE::Dict::const_iterator ci = ref.dictBegin();
  84. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), (*ci++).first);
  85. std::advance(ci, 3);
  86. CPPUNIT_ASSERT(ref.dictEnd() == ci);
  87. }
  88. void BDETest::testList()
  89. {
  90. BDE list = BDE::list();
  91. CPPUNIT_ASSERT(list.empty());
  92. list << 7;
  93. list << std::string("aria2");
  94. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), list.size());
  95. CPPUNIT_ASSERT_EQUAL(static_cast<BDE::Integer>(7), list[0].i());
  96. CPPUNIT_ASSERT_EQUAL(std::string("aria2"), list[1].s());
  97. const BDE& ref = list;
  98. CPPUNIT_ASSERT_EQUAL(static_cast<BDE::Integer>(7), ref[0].i());
  99. CPPUNIT_ASSERT_EQUAL(std::string("aria2"), ref[1].s());
  100. }
  101. void BDETest::testListIter()
  102. {
  103. BDE list = BDE::list();
  104. list << std::string("alpha2");
  105. list << std::string("charlie");
  106. list << std::string("bravo");
  107. list << std::string("alpha");
  108. BDE::List::iterator i = list.listBegin();
  109. CPPUNIT_ASSERT_EQUAL(std::string("alpha2"), (*i++).s());
  110. CPPUNIT_ASSERT_EQUAL(std::string("charlie"), (*i++).s());
  111. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), (*i++).s());
  112. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), (*i++).s());
  113. CPPUNIT_ASSERT(list.listEnd() == i);
  114. const BDE& ref = list;
  115. BDE::List::const_iterator ci = ref.listBegin();
  116. CPPUNIT_ASSERT_EQUAL(std::string("alpha2"), (*ci++).s());
  117. std::advance(ci, 3);
  118. CPPUNIT_ASSERT(ref.listEnd() == ci);
  119. }
  120. } // namespace aria2