ParameterizedStringParserTest.cc 7.1 KB

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