OptionHandlerTest.cc 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. #include "OptionHandlerImpl.h"
  2. #include "prefs.h"
  3. #include "Exception.h"
  4. #include <iostream>
  5. #include <cppunit/extensions/HelperMacros.h>
  6. namespace aria2 {
  7. class OptionHandlerTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(OptionHandlerTest);
  9. CPPUNIT_TEST(testNullOptionHandler);
  10. CPPUNIT_TEST(testBooleanOptionHandler);
  11. CPPUNIT_TEST(testNumberOptionHandler);
  12. CPPUNIT_TEST(testNumberOptionHandler_min);
  13. CPPUNIT_TEST(testNumberOptionHandler_max);
  14. CPPUNIT_TEST(testNumberOptionHandler_min_max);
  15. CPPUNIT_TEST(testUnitNumberOptionHandler);
  16. CPPUNIT_TEST(testParameterOptionHandler_1argInit);
  17. CPPUNIT_TEST(testParameterOptionHandler_2argsInit);
  18. CPPUNIT_TEST(testParameterOptionHandler_listInit);
  19. CPPUNIT_TEST(testDefaultOptionHandler);
  20. CPPUNIT_TEST(testFloatNumberOptionHandler);
  21. CPPUNIT_TEST(testFloatNumberOptionHandler_min);
  22. CPPUNIT_TEST(testFloatNumberOptionHandler_max);
  23. CPPUNIT_TEST(testFloatNumberOptionHandler_min_max);
  24. CPPUNIT_TEST(testLogOptionHandler);
  25. CPPUNIT_TEST(testHttpProxyOptionHandler);
  26. CPPUNIT_TEST_SUITE_END();
  27. public:
  28. void testNullOptionHandler();
  29. void testBooleanOptionHandler();
  30. void testNumberOptionHandler();
  31. void testNumberOptionHandler_min();
  32. void testNumberOptionHandler_max();
  33. void testNumberOptionHandler_min_max();
  34. void testUnitNumberOptionHandler();
  35. void testParameterOptionHandler_1argInit();
  36. void testParameterOptionHandler_2argsInit();
  37. void testParameterOptionHandler_listInit();
  38. void testDefaultOptionHandler();
  39. void testFloatNumberOptionHandler();
  40. void testFloatNumberOptionHandler_min();
  41. void testFloatNumberOptionHandler_max();
  42. void testFloatNumberOptionHandler_min_max();
  43. void testLogOptionHandler();
  44. void testHttpProxyOptionHandler();
  45. };
  46. CPPUNIT_TEST_SUITE_REGISTRATION( OptionHandlerTest );
  47. void OptionHandlerTest::testNullOptionHandler()
  48. {
  49. NullOptionHandler handler;
  50. CPPUNIT_ASSERT(handler.canHandle("foo"));
  51. handler.parse(0, "bar");
  52. }
  53. void OptionHandlerTest::testBooleanOptionHandler()
  54. {
  55. BooleanOptionHandler handler("foo");
  56. CPPUNIT_ASSERT(handler.canHandle("foo"));
  57. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  58. Option option;
  59. handler.parse(&option, V_TRUE);
  60. CPPUNIT_ASSERT_EQUAL(std::string(V_TRUE), option.get("foo"));
  61. handler.parse(&option, V_FALSE);
  62. CPPUNIT_ASSERT_EQUAL(std::string(V_FALSE), option.get("foo"));
  63. try {
  64. handler.parse(&option, "hello");
  65. CPPUNIT_FAIL("exception must be thrown.");
  66. } catch(Exception& e) {
  67. std::cerr << e.stackTrace() << std::endl;
  68. }
  69. }
  70. void OptionHandlerTest::testNumberOptionHandler()
  71. {
  72. NumberOptionHandler handler("foo");
  73. CPPUNIT_ASSERT(handler.canHandle("foo"));
  74. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  75. Option option;
  76. handler.parse(&option, "0");
  77. CPPUNIT_ASSERT_EQUAL(std::string("0"), option.get("foo"));
  78. }
  79. void OptionHandlerTest::testNumberOptionHandler_min()
  80. {
  81. NumberOptionHandler handler("foo", 1);
  82. Option option;
  83. handler.parse(&option, "1");
  84. CPPUNIT_ASSERT_EQUAL(std::string("1"), option.get("foo"));
  85. try {
  86. handler.parse(&option, "0");
  87. CPPUNIT_FAIL("exception must be thrown.");
  88. } catch(Exception& e) {
  89. std::cerr << e.stackTrace() << std::endl;
  90. }
  91. }
  92. void OptionHandlerTest::testNumberOptionHandler_max()
  93. {
  94. NumberOptionHandler handler("foo", -1, 100);
  95. Option option;
  96. handler.parse(&option, "100");
  97. CPPUNIT_ASSERT_EQUAL(std::string("100"), option.get("foo"));
  98. try {
  99. handler.parse(&option, "101");
  100. CPPUNIT_FAIL("exception must be thrown.");
  101. } catch(Exception& e) {
  102. std::cerr << e.stackTrace() << std::endl;
  103. }
  104. }
  105. void OptionHandlerTest::testNumberOptionHandler_min_max()
  106. {
  107. NumberOptionHandler handler("foo", 1, 100);
  108. Option option;
  109. handler.parse(&option, "1");
  110. CPPUNIT_ASSERT_EQUAL(std::string("1"), option.get("foo"));
  111. handler.parse(&option, "100");
  112. CPPUNIT_ASSERT_EQUAL(std::string("100"), option.get("foo"));
  113. try {
  114. handler.parse(&option, "0");
  115. CPPUNIT_FAIL("exception must be thrown.");
  116. } catch(Exception& e) {
  117. std::cerr << e.stackTrace() << std::endl;
  118. }
  119. try {
  120. handler.parse(&option, "101");
  121. CPPUNIT_FAIL("exception must be thrown.");
  122. } catch(Exception& e) {
  123. std::cerr << e.stackTrace() << std::endl;
  124. }
  125. }
  126. void OptionHandlerTest::testUnitNumberOptionHandler()
  127. {
  128. UnitNumberOptionHandler handler("foo");
  129. CPPUNIT_ASSERT(handler.canHandle("foo"));
  130. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  131. Option option;
  132. handler.parse(&option, "4294967296");
  133. CPPUNIT_ASSERT_EQUAL(std::string("4294967296"), option.get("foo"));
  134. handler.parse(&option, "4096M");
  135. CPPUNIT_ASSERT_EQUAL(std::string("4294967296"), option.get("foo"));
  136. handler.parse(&option, "4096K");
  137. CPPUNIT_ASSERT_EQUAL(std::string("4194304"), option.get("foo"));
  138. try {
  139. handler.parse(&option, "K");
  140. CPPUNIT_FAIL("exception must be thrown.");
  141. } catch(Exception& e) {
  142. std::cerr << e.stackTrace();
  143. }
  144. try {
  145. handler.parse(&option, "M");
  146. } catch(Exception& e) {
  147. std::cerr << e.stackTrace();
  148. }
  149. try {
  150. handler.parse(&option, "");
  151. CPPUNIT_FAIL("exception must be thrown.");
  152. } catch(Exception& e) {
  153. std::cerr << e.stackTrace();
  154. }
  155. }
  156. void OptionHandlerTest::testParameterOptionHandler_1argInit()
  157. {
  158. ParameterOptionHandler handler("foo", "value1");
  159. CPPUNIT_ASSERT(handler.canHandle("foo"));
  160. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  161. Option option;
  162. handler.parse(&option, "value1");
  163. CPPUNIT_ASSERT_EQUAL(std::string("value1"), option.get("foo"));
  164. try {
  165. handler.parse(&option, "value3");
  166. CPPUNIT_FAIL("exception must be thrown.");
  167. } catch(Exception& e) {
  168. std::cerr << e.stackTrace() << std::endl;
  169. }
  170. }
  171. void OptionHandlerTest::testParameterOptionHandler_2argsInit()
  172. {
  173. ParameterOptionHandler handler("foo", "value1", "value2");
  174. CPPUNIT_ASSERT(handler.canHandle("foo"));
  175. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  176. Option option;
  177. handler.parse(&option, "value1");
  178. CPPUNIT_ASSERT_EQUAL(std::string("value1"), option.get("foo"));
  179. handler.parse(&option, "value2");
  180. CPPUNIT_ASSERT_EQUAL(std::string("value2"), option.get("foo"));
  181. try {
  182. handler.parse(&option, "value3");
  183. CPPUNIT_FAIL("exception must be thrown.");
  184. } catch(Exception& e) {
  185. std::cerr << e.stackTrace() << std::endl;
  186. }
  187. }
  188. void OptionHandlerTest::testParameterOptionHandler_listInit()
  189. {
  190. std::deque<std::string> validValues;
  191. validValues.push_back("value1");
  192. validValues.push_back("value2");
  193. ParameterOptionHandler handler("foo", validValues);
  194. CPPUNIT_ASSERT(handler.canHandle("foo"));
  195. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  196. Option option;
  197. handler.parse(&option, "value1");
  198. CPPUNIT_ASSERT_EQUAL(std::string("value1"), option.get("foo"));
  199. handler.parse(&option, "value2");
  200. CPPUNIT_ASSERT_EQUAL(std::string("value2"), option.get("foo"));
  201. try {
  202. handler.parse(&option, "value3");
  203. CPPUNIT_FAIL("exception must be thrown.");
  204. } catch(Exception& e) {
  205. std::cerr << e.stackTrace() << std::endl;
  206. }
  207. }
  208. void OptionHandlerTest::testDefaultOptionHandler()
  209. {
  210. DefaultOptionHandler handler("foo");
  211. CPPUNIT_ASSERT(handler.canHandle("foo"));
  212. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  213. Option option;
  214. handler.parse(&option, "bar");
  215. CPPUNIT_ASSERT_EQUAL(std::string("bar"), option.get("foo"));
  216. handler.parse(&option, "");
  217. CPPUNIT_ASSERT_EQUAL(std::string(""), option.get("foo"));
  218. }
  219. void OptionHandlerTest::testFloatNumberOptionHandler()
  220. {
  221. FloatNumberOptionHandler handler("foo");
  222. CPPUNIT_ASSERT(handler.canHandle("foo"));
  223. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  224. Option option;
  225. handler.parse(&option, "1.0");
  226. CPPUNIT_ASSERT_EQUAL(std::string("1.0"), option.get("foo"));
  227. }
  228. void OptionHandlerTest::testFloatNumberOptionHandler_min()
  229. {
  230. FloatNumberOptionHandler handler("foo", 0.0);
  231. Option option;
  232. handler.parse(&option, "0.0");
  233. CPPUNIT_ASSERT_EQUAL(std::string("0.0"), option.get("foo"));
  234. try {
  235. handler.parse(&option, "-0.1");
  236. CPPUNIT_FAIL("exception must be thrown.");
  237. } catch(Exception& e) {
  238. std::cerr << e.stackTrace() << std::endl;
  239. }
  240. }
  241. void OptionHandlerTest::testFloatNumberOptionHandler_max()
  242. {
  243. FloatNumberOptionHandler handler("foo", -1, 10.0);
  244. Option option;
  245. handler.parse(&option, "10.0");
  246. CPPUNIT_ASSERT_EQUAL(std::string("10.0"), option.get("foo"));
  247. try {
  248. handler.parse(&option, "10.1");
  249. CPPUNIT_FAIL("exception must be thrown.");
  250. } catch(Exception& e) {
  251. std::cerr << e.stackTrace() << std::endl;
  252. }
  253. }
  254. void OptionHandlerTest::testFloatNumberOptionHandler_min_max()
  255. {
  256. FloatNumberOptionHandler handler("foo", 0.0, 10.0);
  257. Option option;
  258. handler.parse(&option, "0.0");
  259. CPPUNIT_ASSERT_EQUAL(std::string("0.0"), option.get("foo"));
  260. handler.parse(&option, "10.0");
  261. CPPUNIT_ASSERT_EQUAL(std::string("10.0"), option.get("foo"));
  262. try {
  263. handler.parse(&option, "-0.1");
  264. CPPUNIT_FAIL("exception must be thrown.");
  265. } catch(Exception& e) {
  266. std::cerr << e.stackTrace() << std::endl;
  267. }
  268. try {
  269. handler.parse(&option, "10.1");
  270. CPPUNIT_FAIL("exception must be thrown.");
  271. } catch(Exception& e) {
  272. std::cerr << e.stackTrace() << std::endl;
  273. }
  274. }
  275. void OptionHandlerTest::testLogOptionHandler()
  276. {
  277. LogOptionHandler handler("foo");
  278. CPPUNIT_ASSERT(handler.canHandle("foo"));
  279. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  280. Option option;
  281. handler.parse(&option, "/tmp/log.txt");
  282. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/log.txt"), option.get(PREF_LOG));
  283. CPPUNIT_ASSERT_EQUAL(std::string(""), option.get(PREF_STDOUT_LOG));
  284. option.clear();
  285. handler.parse(&option, "-");
  286. CPPUNIT_ASSERT_EQUAL(std::string(""), option.get(PREF_LOG));
  287. CPPUNIT_ASSERT_EQUAL(std::string(V_TRUE), option.get(PREF_STDOUT_LOG));
  288. }
  289. void OptionHandlerTest::testHttpProxyOptionHandler()
  290. {
  291. HttpProxyOptionHandler handler(PREF_HTTP_PROXY,
  292. PREF_HTTP_PROXY_HOST,
  293. PREF_HTTP_PROXY_PORT);
  294. CPPUNIT_ASSERT(handler.canHandle(PREF_HTTP_PROXY));
  295. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  296. Option option;
  297. handler.parse(&option, "bar:80");
  298. CPPUNIT_ASSERT_EQUAL(std::string("bar:80"), option.get(PREF_HTTP_PROXY));
  299. CPPUNIT_ASSERT_EQUAL(std::string("bar"), option.get(PREF_HTTP_PROXY_HOST));
  300. CPPUNIT_ASSERT_EQUAL(std::string("80"), option.get(PREF_HTTP_PROXY_PORT));
  301. CPPUNIT_ASSERT_EQUAL(std::string(V_TRUE), option.get(PREF_HTTP_PROXY_ENABLED));
  302. try {
  303. handler.parse(&option, "bar");
  304. CPPUNIT_FAIL("exception must be thrown.");
  305. } catch(Exception& e) {
  306. std::cerr << e.stackTrace() << std::endl;
  307. }
  308. try {
  309. handler.parse(&option, "bar:");
  310. CPPUNIT_FAIL("exception must be thrown.");
  311. } catch(Exception& e) {
  312. std::cerr << e.stackTrace() << std::endl;
  313. }
  314. try {
  315. handler.parse(&option, ":");
  316. CPPUNIT_FAIL("exception must be thrown.");
  317. } catch(Exception& e) {
  318. std::cerr << e.stackTrace() << std::endl;
  319. }
  320. try {
  321. handler.parse(&option, ":80");
  322. CPPUNIT_FAIL("exception must be thrown.");
  323. } catch(Exception& e) {
  324. std::cerr << e.stackTrace() << std::endl;
  325. }
  326. try {
  327. handler.parse(&option, "foo:bar");
  328. CPPUNIT_FAIL("exception must be thrown.");
  329. } catch(Exception& e) {
  330. std::cerr << e.stackTrace() << std::endl;
  331. }
  332. }
  333. } // namespace aria2