OptionParserTest.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include "OptionParser.h"
  2. #include <cstring>
  3. #include <sstream>
  4. #include <deque>
  5. #include <cppunit/extensions/HelperMacros.h>
  6. #include "OptionHandlerImpl.h"
  7. #include "Exception.h"
  8. #include "Util.h"
  9. #include "Option.h"
  10. #include "array_fun.h"
  11. namespace aria2 {
  12. class OptionParserTest:public CppUnit::TestFixture {
  13. CPPUNIT_TEST_SUITE(OptionParserTest);
  14. CPPUNIT_TEST(testFindAll);
  15. CPPUNIT_TEST(testFindByNameSubstring);
  16. CPPUNIT_TEST(testFindByTag);
  17. CPPUNIT_TEST(testFindByName);
  18. CPPUNIT_TEST(testFindByShortName);
  19. CPPUNIT_TEST(testFindByID);
  20. CPPUNIT_TEST(testParseDefaultValues);
  21. CPPUNIT_TEST(testParseArg);
  22. CPPUNIT_TEST_SUITE_END();
  23. private:
  24. SharedHandle<OptionParser> _oparser;
  25. public:
  26. void setUp()
  27. {
  28. _oparser.reset(new OptionParser());
  29. SharedHandle<OptionHandler> alpha
  30. (new DefaultOptionHandler("alpha", NO_DESCRIPTION, "ALPHA", "",
  31. OptionHandler::REQ_ARG, 'A'));
  32. alpha->addTag("apple");
  33. _oparser->addOptionHandler(alpha);
  34. SharedHandle<OptionHandler> bravo(new DefaultOptionHandler("bravo"));
  35. bravo->addTag("apple");
  36. bravo->addTag("orange");
  37. bravo->addTag("pineapple");
  38. _oparser->addOptionHandler(bravo);
  39. SharedHandle<DefaultOptionHandler> charlie
  40. (new DefaultOptionHandler("charlie", NO_DESCRIPTION, "CHARLIE", "",
  41. OptionHandler::REQ_ARG, 'C'));
  42. charlie->hide();
  43. charlie->addTag("pineapple");
  44. _oparser->addOptionHandler(charlie);
  45. SharedHandle<OptionHandler> delta
  46. (new UnitNumberOptionHandler("delta", NO_DESCRIPTION, "1M", -1, -1, 'D'));
  47. delta->addTag("pineapple");
  48. _oparser->addOptionHandler(delta);
  49. }
  50. void tearDown() {}
  51. void testFindAll();
  52. void testFindByNameSubstring();
  53. void testFindByTag();
  54. void testFindByName();
  55. void testFindByShortName();
  56. void testFindByID();
  57. void testParseDefaultValues();
  58. void testParseArg();
  59. };
  60. CPPUNIT_TEST_SUITE_REGISTRATION(OptionParserTest);
  61. void OptionParserTest::testFindAll()
  62. {
  63. std::deque<SharedHandle<OptionHandler> > res = _oparser->findAll();
  64. CPPUNIT_ASSERT_EQUAL((size_t)3, res.size());
  65. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), res[0]->getName());
  66. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), res[1]->getName());
  67. CPPUNIT_ASSERT_EQUAL(std::string("delta"), res[2]->getName());
  68. }
  69. void OptionParserTest::testFindByNameSubstring()
  70. {
  71. std::deque<SharedHandle<OptionHandler> > res =
  72. _oparser->findByNameSubstring("l");
  73. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  74. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), res[0]->getName());
  75. CPPUNIT_ASSERT_EQUAL(std::string("delta"), res[1]->getName());
  76. }
  77. void OptionParserTest::testFindByTag()
  78. {
  79. std::deque<SharedHandle<OptionHandler> > res =
  80. _oparser->findByTag("pineapple");
  81. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  82. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), res[0]->getName());
  83. CPPUNIT_ASSERT_EQUAL(std::string("delta"), res[1]->getName());
  84. }
  85. void OptionParserTest::testFindByName()
  86. {
  87. SharedHandle<OptionHandler> bravo = _oparser->findByName("bravo");
  88. CPPUNIT_ASSERT(!bravo.isNull());
  89. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), bravo->getName());
  90. SharedHandle<OptionHandler> charlie = _oparser->findByName("charlie");
  91. CPPUNIT_ASSERT(charlie.isNull());
  92. }
  93. void OptionParserTest::testFindByShortName()
  94. {
  95. SharedHandle<OptionHandler> alpha = _oparser->findByShortName('A');
  96. CPPUNIT_ASSERT(!alpha.isNull());
  97. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), alpha->getName());
  98. CPPUNIT_ASSERT(_oparser->findByShortName('C').isNull());
  99. }
  100. void OptionParserTest::testFindByID()
  101. {
  102. SharedHandle<OptionHandler> alpha = _oparser->findByID(1);
  103. CPPUNIT_ASSERT(!alpha.isNull());
  104. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), alpha->getName());
  105. CPPUNIT_ASSERT(_oparser->findByID(3).isNull());
  106. }
  107. void OptionParserTest::testParseDefaultValues()
  108. {
  109. Option option;
  110. _oparser->parseDefaultValues(option);
  111. CPPUNIT_ASSERT_EQUAL(std::string("ALPHA"), option.get("alpha"));
  112. CPPUNIT_ASSERT_EQUAL(std::string("1048576"), option.get("delta"));
  113. CPPUNIT_ASSERT_EQUAL(std::string("CHARLIE"), option.get("charlie"));
  114. CPPUNIT_ASSERT(!option.defined("bravo"));
  115. }
  116. void OptionParserTest::testParseArg()
  117. {
  118. Option option;
  119. char prog[7];
  120. strncpy(prog, "aria2c", sizeof(prog));
  121. char optionAlpha[3];
  122. strncpy(optionAlpha, "-A", sizeof(optionAlpha));
  123. char argAlpha[6];
  124. strncpy(argAlpha, "ALPHA", sizeof(argAlpha));
  125. char optionBravo[8];
  126. strncpy(optionBravo, "--bravo", sizeof(optionBravo));
  127. char argBravo[6];
  128. strncpy(argBravo, "BRAVO", sizeof(argBravo));
  129. char nonopt1[8];
  130. strncpy(nonopt1, "nonopt1", sizeof(nonopt1));
  131. char nonopt2[8];
  132. strncpy(nonopt2, "nonopt2", sizeof(nonopt2));
  133. char* const argv[] = { prog, optionAlpha, argAlpha, optionBravo, argBravo,
  134. nonopt1, nonopt2 };
  135. int argc = arrayLength(argv);
  136. std::stringstream s;
  137. std::deque<std::string> nonopts;
  138. _oparser->parseArg(s, nonopts, argc, argv);
  139. CPPUNIT_ASSERT_EQUAL(std::string("alpha=ALPHA\n"
  140. "bravo=BRAVO\n"), s.str());
  141. CPPUNIT_ASSERT_EQUAL((size_t)2, nonopts.size());
  142. CPPUNIT_ASSERT_EQUAL(std::string("nonopt1"), nonopts[0]);
  143. CPPUNIT_ASSERT_EQUAL(std::string("nonopt2"), nonopts[1]);
  144. }
  145. } // namespace aria2