OptionHandlerTest.cc 11 KB

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