OptionParserTest.cc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include "OptionParser.h"
  2. #include <cstring>
  3. #include <sstream>
  4. #include <cppunit/extensions/HelperMacros.h>
  5. #include "OptionHandlerImpl.h"
  6. #include "Exception.h"
  7. #include "util.h"
  8. #include "Option.h"
  9. #include "array_fun.h"
  10. #include "prefs.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(testParse);
  23. CPPUNIT_TEST_SUITE_END();
  24. private:
  25. SharedHandle<OptionParser> oparser_;
  26. public:
  27. void setUp()
  28. {
  29. oparser_.reset(new OptionParser());
  30. SharedHandle<OptionHandler> timeout
  31. (new DefaultOptionHandler(PREF_TIMEOUT, NO_DESCRIPTION, "ALPHA", "",
  32. OptionHandler::REQ_ARG, 'A'));
  33. timeout->addTag("apple");
  34. timeout->setEraseAfterParse(true);
  35. oparser_->addOptionHandler(timeout);
  36. SharedHandle<OptionHandler> dir(new DefaultOptionHandler(PREF_DIR));
  37. dir->addTag("apple");
  38. dir->addTag("orange");
  39. dir->addTag("pineapple");
  40. oparser_->addOptionHandler(dir);
  41. SharedHandle<DefaultOptionHandler> daemon
  42. (new DefaultOptionHandler(PREF_DAEMON, NO_DESCRIPTION, "CHARLIE", "",
  43. OptionHandler::REQ_ARG, 'C'));
  44. daemon->hide();
  45. daemon->addTag("pineapple");
  46. oparser_->addOptionHandler(daemon);
  47. SharedHandle<OptionHandler> out
  48. (new UnitNumberOptionHandler(PREF_OUT, NO_DESCRIPTION, "1M",
  49. -1, -1, 'D'));
  50. out->addTag("pineapple");
  51. oparser_->addOptionHandler(out);
  52. }
  53. void tearDown() {}
  54. void testFindAll();
  55. void testFindByNameSubstring();
  56. void testFindByTag();
  57. void testFindByName();
  58. void testFindByShortName();
  59. void testFindByID();
  60. void testParseDefaultValues();
  61. void testParseArg();
  62. void testParse();
  63. };
  64. CPPUNIT_TEST_SUITE_REGISTRATION(OptionParserTest);
  65. void OptionParserTest::testFindAll()
  66. {
  67. std::vector<SharedHandle<OptionHandler> > res = oparser_->findAll();
  68. CPPUNIT_ASSERT_EQUAL((size_t)3, res.size());
  69. CPPUNIT_ASSERT_EQUAL(std::string("timeout"), res[0]->getName());
  70. CPPUNIT_ASSERT_EQUAL(std::string("dir"), res[1]->getName());
  71. CPPUNIT_ASSERT_EQUAL(std::string("out"), res[2]->getName());
  72. }
  73. void OptionParserTest::testFindByNameSubstring()
  74. {
  75. std::vector<SharedHandle<OptionHandler> > res =
  76. oparser_->findByNameSubstring("i");
  77. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  78. CPPUNIT_ASSERT_EQUAL(std::string("timeout"), res[0]->getName());
  79. CPPUNIT_ASSERT_EQUAL(std::string("dir"), res[1]->getName());
  80. }
  81. void OptionParserTest::testFindByTag()
  82. {
  83. std::vector<SharedHandle<OptionHandler> > res =
  84. oparser_->findByTag("pineapple");
  85. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  86. CPPUNIT_ASSERT_EQUAL(std::string("dir"), res[0]->getName());
  87. CPPUNIT_ASSERT_EQUAL(std::string("out"), res[1]->getName());
  88. }
  89. void OptionParserTest::testFindByName()
  90. {
  91. SharedHandle<OptionHandler> dir = oparser_->findByName("dir");
  92. CPPUNIT_ASSERT(dir);
  93. CPPUNIT_ASSERT_EQUAL(std::string("dir"), dir->getName());
  94. SharedHandle<OptionHandler> daemon = oparser_->findByName("daemon");
  95. CPPUNIT_ASSERT(!daemon);
  96. SharedHandle<OptionHandler> timeout2 = oparser_->findByName("timeout2");
  97. CPPUNIT_ASSERT(!timeout2);
  98. }
  99. void OptionParserTest::testFindByShortName()
  100. {
  101. SharedHandle<OptionHandler> timeout = oparser_->findByShortName('A');
  102. CPPUNIT_ASSERT(timeout);
  103. CPPUNIT_ASSERT_EQUAL(std::string("timeout"), timeout->getName());
  104. CPPUNIT_ASSERT(!oparser_->findByShortName('C'));
  105. }
  106. void OptionParserTest::testFindByID()
  107. {
  108. SharedHandle<OptionHandler> timeout = oparser_->findByID(1);
  109. CPPUNIT_ASSERT(timeout);
  110. CPPUNIT_ASSERT_EQUAL(std::string("timeout"), timeout->getName());
  111. CPPUNIT_ASSERT(!oparser_->findByID(3));
  112. }
  113. void OptionParserTest::testParseDefaultValues()
  114. {
  115. Option option;
  116. oparser_->parseDefaultValues(option);
  117. CPPUNIT_ASSERT_EQUAL(std::string("ALPHA"), option.get(PREF_TIMEOUT));
  118. CPPUNIT_ASSERT_EQUAL(std::string("1048576"), option.get(PREF_OUT));
  119. CPPUNIT_ASSERT_EQUAL(std::string("CHARLIE"), option.get(PREF_DAEMON));
  120. CPPUNIT_ASSERT(!option.defined(PREF_DIR));
  121. }
  122. void OptionParserTest::testParseArg()
  123. {
  124. Option option;
  125. char prog[7];
  126. strncpy(prog, "aria2c", sizeof(prog));
  127. char optionTimeout[3];
  128. strncpy(optionTimeout, "-A", sizeof(optionTimeout));
  129. char argTimeout[6];
  130. strncpy(argTimeout, "ALPHA", sizeof(argTimeout));
  131. char optionDir[8];
  132. strncpy(optionDir, "--dir", sizeof(optionDir));
  133. char argDir[6];
  134. strncpy(argDir, "BRAVO", sizeof(argDir));
  135. char nonopt1[8];
  136. strncpy(nonopt1, "nonopt1", sizeof(nonopt1));
  137. char nonopt2[8];
  138. strncpy(nonopt2, "nonopt2", sizeof(nonopt2));
  139. char* argv[] = { prog, optionTimeout, argTimeout, optionDir, argDir,
  140. nonopt1, nonopt2 };
  141. int argc = A2_ARRAY_LEN(argv);
  142. std::stringstream s;
  143. std::vector<std::string> nonopts;
  144. oparser_->parseArg(s, nonopts, argc, argv);
  145. CPPUNIT_ASSERT_EQUAL(std::string("timeout=ALPHA\n"
  146. "dir=BRAVO\n"), s.str());
  147. CPPUNIT_ASSERT_EQUAL((size_t)2, nonopts.size());
  148. CPPUNIT_ASSERT_EQUAL(std::string("nonopt1"), nonopts[0]);
  149. CPPUNIT_ASSERT_EQUAL(std::string("nonopt2"), nonopts[1]);
  150. CPPUNIT_ASSERT_EQUAL(std::string("*****"), std::string(argTimeout));
  151. }
  152. void OptionParserTest::testParse()
  153. {
  154. Option option;
  155. std::istringstream in("timeout=Hello\n"
  156. "UNKNOWN=x\n"
  157. "\n"
  158. "dir=World");
  159. oparser_->parse(option, in);
  160. CPPUNIT_ASSERT_EQUAL(std::string("Hello"), option.get(PREF_TIMEOUT));
  161. CPPUNIT_ASSERT_EQUAL(std::string("World"), option.get(PREF_DIR));
  162. }
  163. } // namespace aria2