OptionHandlerTest.cc 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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.parseArg(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.parseArg(&option, V_TRUE);
  58. CPPUNIT_ASSERT_EQUAL(string(V_TRUE), option.get("foo"));
  59. handler.parseArg(&option, V_FALSE);
  60. CPPUNIT_ASSERT_EQUAL(string(V_FALSE), option.get("foo"));
  61. try {
  62. handler.parseArg(&option, "hello");
  63. CPPUNIT_FAIL("exception must be threw.");
  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.parseArg(&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.parseArg(&option, "1");
  83. CPPUNIT_ASSERT_EQUAL(string("1"), option.get("foo"));
  84. try {
  85. handler.parseArg(&option, "0");
  86. CPPUNIT_FAIL("exception must be threw.");
  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.parseArg(&option, "100");
  97. CPPUNIT_ASSERT_EQUAL(string("100"), option.get("foo"));
  98. try {
  99. handler.parseArg(&option, "101");
  100. CPPUNIT_FAIL("exception must be threw.");
  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.parseArg(&option, "1");
  111. CPPUNIT_ASSERT_EQUAL(string("1"), option.get("foo"));
  112. handler.parseArg(&option, "100");
  113. CPPUNIT_ASSERT_EQUAL(string("100"), option.get("foo"));
  114. try {
  115. handler.parseArg(&option, "0");
  116. CPPUNIT_FAIL("exception must be threw.");
  117. } catch(Exception* e) {
  118. cerr << e->getMsg() << endl;
  119. delete e;
  120. }
  121. try {
  122. handler.parseArg(&option, "101");
  123. CPPUNIT_FAIL("exception must be threw.");
  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.parseArg(&option, "4294967296");
  136. CPPUNIT_ASSERT_EQUAL(string("4294967296"), option.get("foo"));
  137. handler.parseArg(&option, "4096M");
  138. CPPUNIT_ASSERT_EQUAL(string("4294967296"), option.get("foo"));
  139. handler.parseArg(&option, "4096K");
  140. CPPUNIT_ASSERT_EQUAL(string("4194304"), option.get("foo"));
  141. handler.parseArg(&option, "K");
  142. CPPUNIT_ASSERT_EQUAL(string("0"), option.get("foo"));
  143. handler.parseArg(&option, "M");
  144. CPPUNIT_ASSERT_EQUAL(string("0"), option.get("foo"));
  145. handler.parseArg(&option, "");
  146. CPPUNIT_ASSERT_EQUAL(string("0"), option.get("foo"));
  147. }
  148. void OptionHandlerTest::testParameterOptionHandler_1argInit()
  149. {
  150. ParameterOptionHandler handler("foo", "value1");
  151. CPPUNIT_ASSERT(handler.canHandle("foo"));
  152. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  153. Option option;
  154. handler.parseArg(&option, "value1");
  155. CPPUNIT_ASSERT_EQUAL(string("value1"), option.get("foo"));
  156. try {
  157. handler.parseArg(&option, "value3");
  158. CPPUNIT_FAIL("exception must be threw.");
  159. } catch(Exception* e) {
  160. cerr << e->getMsg() << endl;
  161. delete e;
  162. }
  163. }
  164. void OptionHandlerTest::testParameterOptionHandler_2argsInit()
  165. {
  166. ParameterOptionHandler handler("foo", "value1", "value2");
  167. CPPUNIT_ASSERT(handler.canHandle("foo"));
  168. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  169. Option option;
  170. handler.parseArg(&option, "value1");
  171. CPPUNIT_ASSERT_EQUAL(string("value1"), option.get("foo"));
  172. handler.parseArg(&option, "value2");
  173. CPPUNIT_ASSERT_EQUAL(string("value2"), option.get("foo"));
  174. try {
  175. handler.parseArg(&option, "value3");
  176. CPPUNIT_FAIL("exception must be threw.");
  177. } catch(Exception* e) {
  178. cerr << e->getMsg() << endl;
  179. delete e;
  180. }
  181. }
  182. void OptionHandlerTest::testParameterOptionHandler_listInit()
  183. {
  184. Strings validValues;
  185. validValues.push_back("value1");
  186. validValues.push_back("value2");
  187. ParameterOptionHandler handler("foo", validValues);
  188. CPPUNIT_ASSERT(handler.canHandle("foo"));
  189. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  190. Option option;
  191. handler.parseArg(&option, "value1");
  192. CPPUNIT_ASSERT_EQUAL(string("value1"), option.get("foo"));
  193. handler.parseArg(&option, "value2");
  194. CPPUNIT_ASSERT_EQUAL(string("value2"), option.get("foo"));
  195. try {
  196. handler.parseArg(&option, "value3");
  197. CPPUNIT_FAIL("exception must be threw.");
  198. } catch(Exception* e) {
  199. cerr << e->getMsg() << endl;
  200. delete e;
  201. }
  202. }
  203. void OptionHandlerTest::testDefaultOptionHandler()
  204. {
  205. DefaultOptionHandler handler("foo");
  206. CPPUNIT_ASSERT(handler.canHandle("foo"));
  207. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  208. Option option;
  209. handler.parseArg(&option, "bar");
  210. CPPUNIT_ASSERT_EQUAL(string("bar"), option.get("foo"));
  211. handler.parseArg(&option, "");
  212. CPPUNIT_ASSERT_EQUAL(string(""), option.get("foo"));
  213. }
  214. void OptionHandlerTest::testFloatNumberOptionHandler()
  215. {
  216. FloatNumberOptionHandler handler("foo");
  217. CPPUNIT_ASSERT(handler.canHandle("foo"));
  218. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  219. Option option;
  220. handler.parseArg(&option, "1.0");
  221. CPPUNIT_ASSERT_EQUAL(string("1.0"), option.get("foo"));
  222. }
  223. void OptionHandlerTest::testFloatNumberOptionHandler_min()
  224. {
  225. FloatNumberOptionHandler handler("foo", 0.0);
  226. Option option;
  227. handler.parseArg(&option, "0.0");
  228. CPPUNIT_ASSERT_EQUAL(string("0.0"), option.get("foo"));
  229. try {
  230. handler.parseArg(&option, "-0.1");
  231. CPPUNIT_FAIL("exception must be threw.");
  232. } catch(Exception* e) {
  233. cerr << e->getMsg() << endl;
  234. delete e;
  235. }
  236. }
  237. void OptionHandlerTest::testFloatNumberOptionHandler_max()
  238. {
  239. FloatNumberOptionHandler handler("foo", -1, 10.0);
  240. Option option;
  241. handler.parseArg(&option, "10.0");
  242. CPPUNIT_ASSERT_EQUAL(string("10.0"), option.get("foo"));
  243. try {
  244. handler.parseArg(&option, "10.1");
  245. CPPUNIT_FAIL("exception must be threw.");
  246. } catch(Exception* e) {
  247. cerr << e->getMsg() << endl;
  248. delete e;
  249. }
  250. }
  251. void OptionHandlerTest::testFloatNumberOptionHandler_min_max()
  252. {
  253. FloatNumberOptionHandler handler("foo", 0.0, 10.0);
  254. Option option;
  255. handler.parseArg(&option, "0.0");
  256. CPPUNIT_ASSERT_EQUAL(string("0.0"), option.get("foo"));
  257. handler.parseArg(&option, "10.0");
  258. CPPUNIT_ASSERT_EQUAL(string("10.0"), option.get("foo"));
  259. try {
  260. handler.parseArg(&option, "-0.1");
  261. CPPUNIT_FAIL("exception must be threw.");
  262. } catch(Exception* e) {
  263. cerr << e->getMsg() << endl;
  264. delete e;
  265. }
  266. try {
  267. handler.parseArg(&option, "10.1");
  268. CPPUNIT_FAIL("exception must be threw.");
  269. } catch(Exception* e) {
  270. cerr << e->getMsg() << endl;
  271. delete e;
  272. }
  273. }
  274. void OptionHandlerTest::testLogOptionHandler()
  275. {
  276. LogOptionHandler handler("foo");
  277. CPPUNIT_ASSERT(handler.canHandle("foo"));
  278. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  279. Option option;
  280. handler.parseArg(&option, "/tmp/log.txt");
  281. CPPUNIT_ASSERT_EQUAL(string("/tmp/log.txt"), option.get(PREF_LOG));
  282. CPPUNIT_ASSERT_EQUAL(string(""), option.get(PREF_STDOUT_LOG));
  283. option.clear();
  284. handler.parseArg(&option, "-");
  285. CPPUNIT_ASSERT_EQUAL(string(""), option.get(PREF_LOG));
  286. CPPUNIT_ASSERT_EQUAL(string(V_TRUE), option.get(PREF_STDOUT_LOG));
  287. }
  288. void OptionHandlerTest::testHttpProxyOptionHandler()
  289. {
  290. HttpProxyOptionHandler handler("foo");
  291. CPPUNIT_ASSERT(handler.canHandle("foo"));
  292. CPPUNIT_ASSERT(!handler.canHandle("foobar"));
  293. Option option;
  294. handler.parseArg(&option, "bar:80");
  295. CPPUNIT_ASSERT_EQUAL(string("bar:80"), option.get(PREF_HTTP_PROXY));
  296. CPPUNIT_ASSERT_EQUAL(string("bar"), option.get(PREF_HTTP_PROXY_HOST));
  297. CPPUNIT_ASSERT_EQUAL(string("80"), option.get(PREF_HTTP_PROXY_PORT));
  298. CPPUNIT_ASSERT_EQUAL(string(V_TRUE), option.get(PREF_HTTP_PROXY_ENABLED));
  299. try {
  300. handler.parseArg(&option, "bar");
  301. CPPUNIT_FAIL("exception must be threw.");
  302. } catch(Exception* e) {
  303. cerr << e->getMsg() << endl;
  304. delete e;
  305. }
  306. try {
  307. handler.parseArg(&option, "bar:");
  308. CPPUNIT_FAIL("exception must be threw.");
  309. } catch(Exception* e) {
  310. cerr << e->getMsg() << endl;
  311. delete e;
  312. }
  313. try {
  314. handler.parseArg(&option, ":");
  315. CPPUNIT_FAIL("exception must be threw.");
  316. } catch(Exception* e) {
  317. cerr << e->getMsg() << endl;
  318. delete e;
  319. }
  320. try {
  321. handler.parseArg(&option, ":80");
  322. CPPUNIT_FAIL("exception must be threw.");
  323. } catch(Exception* e) {
  324. cerr << e->getMsg() << endl;
  325. delete e;
  326. }
  327. try {
  328. handler.parseArg(&option, "foo:bar");
  329. CPPUNIT_FAIL("exception must be threw.");
  330. } catch(Exception* e) {
  331. cerr << e->getMsg() << endl;
  332. delete e;
  333. }
  334. }