ParameterizedStringParserTest.cc 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #include "ParameterizedStringParser.h"
  2. #include "PStringSelect.h"
  3. #include "PStringSegment.h"
  4. #include "PStringNumLoop.h"
  5. #include "FatalException.h"
  6. #include <iostream>
  7. #include <cppunit/extensions/HelperMacros.h>
  8. namespace aria2 {
  9. class ParameterizedStringParserTest:public CppUnit::TestFixture {
  10. CPPUNIT_TEST_SUITE(ParameterizedStringParserTest);
  11. CPPUNIT_TEST(testParse_select);
  12. CPPUNIT_TEST(testParse_select_empty);
  13. CPPUNIT_TEST(testParse_select_missingParen);
  14. CPPUNIT_TEST(testParse_segment);
  15. CPPUNIT_TEST(testParse_segment_select);
  16. CPPUNIT_TEST(testParse_loop);
  17. CPPUNIT_TEST(testParse_loop_empty);
  18. CPPUNIT_TEST(testParse_loop_missingParen);
  19. CPPUNIT_TEST(testParse_loop_missingStep);
  20. CPPUNIT_TEST(testParse_loop_missingRange);
  21. CPPUNIT_TEST(testParse_alphaLoop);
  22. CPPUNIT_TEST(testParse_loop_mixedChar);
  23. CPPUNIT_TEST(testParse_loop_mixedCase);
  24. CPPUNIT_TEST(testParse_segment_loop);
  25. CPPUNIT_TEST_SUITE_END();
  26. private:
  27. public:
  28. void setUp() {
  29. }
  30. void testParse_select();
  31. void testParse_select_empty();
  32. void testParse_select_missingParen();
  33. void testParse_segment();
  34. void testParse_segment_select();
  35. void testParse_loop();
  36. void testParse_loop_empty();
  37. void testParse_loop_missingParen();
  38. void testParse_loop_missingStep();
  39. void testParse_loop_missingRange();
  40. void testParse_alphaLoop();
  41. void testParse_loop_mixedChar();
  42. void testParse_loop_mixedCase();
  43. void testParse_segment_loop();
  44. };
  45. CPPUNIT_TEST_SUITE_REGISTRATION( ParameterizedStringParserTest );
  46. void ParameterizedStringParserTest::testParse_select()
  47. {
  48. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("{alpha, bravo, charlie}");
  49. SharedHandle<PStringSelect> select(dynamic_pointer_cast<PStringSelect>(ls));
  50. CPPUNIT_ASSERT(!select.isNull());
  51. std::deque<std::string> values = select->getValues();
  52. CPPUNIT_ASSERT_EQUAL((size_t)3, values.size());
  53. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), values[0]);
  54. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), values[1]);
  55. CPPUNIT_ASSERT_EQUAL(std::string("charlie"), values[2]);
  56. }
  57. void ParameterizedStringParserTest::testParse_select_empty()
  58. {
  59. try {
  60. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("{}");
  61. CPPUNIT_FAIL("exception must be thrown.");
  62. } catch(FatalException* e) {
  63. std::cerr << e->getMsg() << std::endl;
  64. delete e;
  65. } catch(...) {
  66. CPPUNIT_FAIL("unexpected exception thrown.");
  67. }
  68. }
  69. void ParameterizedStringParserTest::testParse_select_missingParen()
  70. {
  71. try {
  72. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("{alpha");
  73. CPPUNIT_FAIL("exception must be thrown.");
  74. } catch(FatalException* e) {
  75. std::cerr << e->getMsg() << std::endl;
  76. delete e;
  77. } catch(...) {
  78. CPPUNIT_FAIL("unexpected exception was thrown.");
  79. }
  80. }
  81. void ParameterizedStringParserTest::testParse_segment()
  82. {
  83. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("hello world");
  84. SharedHandle<PStringSegment> segment(dynamic_pointer_cast<PStringSegment>(ls));
  85. CPPUNIT_ASSERT(!segment.isNull());
  86. CPPUNIT_ASSERT_EQUAL(std::string("hello world"), segment->getValue());
  87. }
  88. void ParameterizedStringParserTest::testParse_segment_select()
  89. {
  90. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("file:///{alpha, bravo, charlie}/tango");
  91. SharedHandle<PStringSegment> segment1
  92. (dynamic_pointer_cast<PStringSegment>(ls));
  93. CPPUNIT_ASSERT(!segment1.isNull());
  94. CPPUNIT_ASSERT_EQUAL(std::string("file:///"), segment1->getValue());
  95. SharedHandle<PStringSelect> select1
  96. (dynamic_pointer_cast<PStringSelect>(segment1->getNext()));
  97. CPPUNIT_ASSERT(!select1.isNull());
  98. std::deque<std::string> selectValues = select1->getValues();
  99. CPPUNIT_ASSERT_EQUAL((size_t)3, selectValues.size());
  100. CPPUNIT_ASSERT_EQUAL(std::string("alpha"), selectValues[0]);
  101. CPPUNIT_ASSERT_EQUAL(std::string("bravo"), selectValues[1]);
  102. CPPUNIT_ASSERT_EQUAL(std::string("charlie"), selectValues[2]);
  103. SharedHandle<PStringSegment> segment2
  104. (dynamic_pointer_cast<PStringSegment>(select1->getNext()));
  105. CPPUNIT_ASSERT(!segment2.isNull());
  106. CPPUNIT_ASSERT_EQUAL(std::string("/tango"), segment2->getValue());
  107. }
  108. void ParameterizedStringParserTest::testParse_loop()
  109. {
  110. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[1-10:2]");
  111. SharedHandle<PStringNumLoop> loop1(dynamic_pointer_cast<PStringNumLoop>(ls));
  112. CPPUNIT_ASSERT(!loop1.isNull());
  113. CPPUNIT_ASSERT_EQUAL(1U, loop1->getStartValue());
  114. CPPUNIT_ASSERT_EQUAL(10U, loop1->getEndValue());
  115. CPPUNIT_ASSERT_EQUAL(2U, loop1->getStep());
  116. }
  117. void ParameterizedStringParserTest::testParse_loop_empty()
  118. {
  119. try {
  120. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[]");
  121. CPPUNIT_FAIL("exception must be thrown.");
  122. } catch(FatalException* e) {
  123. std::cerr << e->getMsg() << std::endl;
  124. delete e;
  125. } catch(...) {
  126. CPPUNIT_FAIL("unexpected exception was thrown.");
  127. }
  128. }
  129. void ParameterizedStringParserTest::testParse_loop_missingParen()
  130. {
  131. try {
  132. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[");
  133. CPPUNIT_FAIL("exception must be thrown.");
  134. } catch(FatalException* e) {
  135. std::cerr << e->getMsg() << std::endl;
  136. delete e;
  137. } catch(...) {
  138. CPPUNIT_FAIL("unexpected exception was thrown.");
  139. }
  140. }
  141. void ParameterizedStringParserTest::testParse_loop_missingStep()
  142. {
  143. try {
  144. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[1-10:]");
  145. CPPUNIT_FAIL("exception must be thrown.");
  146. } catch(FatalException* e) {
  147. std::cerr << e->getMsg() << std::endl;
  148. delete e;
  149. } catch(...) {
  150. CPPUNIT_FAIL("unexpected exception was thrown.");
  151. }
  152. }
  153. void ParameterizedStringParserTest::testParse_loop_missingRange()
  154. {
  155. try {
  156. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[1-]");
  157. CPPUNIT_FAIL("exception must be thrown.");
  158. } catch(FatalException* e) {
  159. std::cerr << e->getMsg() << std::endl;
  160. delete e;
  161. } catch(...) {
  162. CPPUNIT_FAIL("unexpected exception was thrown.");
  163. }
  164. }
  165. void ParameterizedStringParserTest::testParse_alphaLoop()
  166. {
  167. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[a-z:2]");
  168. SharedHandle<PStringNumLoop> loop1(dynamic_pointer_cast<PStringNumLoop>(ls));
  169. CPPUNIT_ASSERT(!loop1.isNull());
  170. CPPUNIT_ASSERT_EQUAL(0U, loop1->getStartValue());
  171. CPPUNIT_ASSERT_EQUAL(25U, loop1->getEndValue());
  172. CPPUNIT_ASSERT_EQUAL(2U, loop1->getStep());
  173. }
  174. void ParameterizedStringParserTest::testParse_loop_mixedChar()
  175. {
  176. try {
  177. ParameterizedStringParser().parse("[1-z:2]");
  178. CPPUNIT_FAIL("exception must be thrown.");
  179. } catch(FatalException* e) {
  180. std::cerr << e->getMsg() << std::endl;
  181. delete e;
  182. } catch(...) {
  183. CPPUNIT_FAIL("FatalException must be thrown.");
  184. }
  185. }
  186. void ParameterizedStringParserTest::testParse_loop_mixedCase()
  187. {
  188. try {
  189. ParameterizedStringParser().parse("[a-Z:2]");
  190. CPPUNIT_FAIL("exception must be thrown.");
  191. } catch(FatalException* e) {
  192. std::cerr << e->getMsg() << std::endl;
  193. delete e;
  194. } catch(...) {
  195. CPPUNIT_FAIL("FatalException must be thrown.");
  196. }
  197. }
  198. void ParameterizedStringParserTest::testParse_segment_loop()
  199. {
  200. SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("http://server[1-3]/file");
  201. SharedHandle<PStringSegment> segment1(dynamic_pointer_cast<PStringSegment>(ls));
  202. CPPUNIT_ASSERT(!segment1.isNull());
  203. CPPUNIT_ASSERT_EQUAL(std::string("http://server"), segment1->getValue());
  204. SharedHandle<PStringNumLoop> loop1(dynamic_pointer_cast<PStringNumLoop>(segment1->getNext()));
  205. CPPUNIT_ASSERT(!loop1.isNull());
  206. CPPUNIT_ASSERT_EQUAL(1U, loop1->getStartValue());
  207. CPPUNIT_ASSERT_EQUAL(3U, loop1->getEndValue());
  208. CPPUNIT_ASSERT_EQUAL(1U, loop1->getStep());
  209. SharedHandle<PStringSegment> segment2(dynamic_pointer_cast<PStringSegment>(loop1->getNext()));
  210. CPPUNIT_ASSERT(!segment2.isNull());
  211. CPPUNIT_ASSERT_EQUAL(std::string("/file"), segment2->getValue());
  212. }
  213. } // namespace aria2