summaryrefslogtreecommitdiff
path: root/test/ParameterizedStringParserTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-08-28 11:51:20 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-08-28 11:51:20 +0000
commit7fb4336d5e6dbffe64fc39f84bbedd76a12237e6 (patch)
tree2d21664786e49e776607446ef38b90600aeabd27 /test/ParameterizedStringParserTest.cc
parenteb335ef44ce2defda6988f6654f2d7314f5d8d89 (diff)
2007-08-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added parameterized URI support. * src/main.cc: -Z option added. * src/OptionHandlerFactory.cc * src/prefs.h: Added PREF_FORCE_SEQUENTIAL. * src/PStringDatum.h: New class. * src/PStringSegment.{h,cc}: New class. * src/PStringNumLoop.h: New class. * src/PStringSelect.h: New class. * src/NumberDecorator.h: New class. * src/FixedWidthNumberDecorator.h: New class. * src/AlphaNumberDecorator.h: New class. * src/PStringVisitor.h: New class. * src/PStringBuildVisitor.{h,cc}: New class. * src/ParameterizedStringParser.{h,cc}: New class. * src/Util.{h,cc} (isNumber): New function. (isLowercase): New function. (isUppercase): New function. (alphaToNum): New function. * test/ParameterizedStringParserTest.cc: New class. * test/AlphaNumberDecoratorTest.cc: New class. * test/PStringBuildVisitorTest.cc: New class. * test/UtilTest.cc (testIsNumber): New function. (testIsLowercase): New function. (testIsUppercase): New function. (testAlphaToNum): New function. Added '\n' after the error message * src/RequestInfo.h (printDownloadAbortMessage)
Diffstat (limited to 'test/ParameterizedStringParserTest.cc')
-rw-r--r--test/ParameterizedStringParserTest.cc237
1 files changed, 237 insertions, 0 deletions
diff --git a/test/ParameterizedStringParserTest.cc b/test/ParameterizedStringParserTest.cc
new file mode 100644
index 00000000..558674dd
--- /dev/null
+++ b/test/ParameterizedStringParserTest.cc
@@ -0,0 +1,237 @@
+#include "ParameterizedStringParser.h"
+#include "PStringSelect.h"
+#include "PStringSegment.h"
+#include "PStringNumLoop.h"
+#include "FatalException.h"
+#include <cppunit/extensions/HelperMacros.h>
+
+class ParameterizedStringParserTest:public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE(ParameterizedStringParserTest);
+ CPPUNIT_TEST(testParse_select);
+ CPPUNIT_TEST(testParse_select_empty);
+ CPPUNIT_TEST(testParse_select_missingParen);
+ CPPUNIT_TEST(testParse_segment);
+ CPPUNIT_TEST(testParse_segment_select);
+ CPPUNIT_TEST(testParse_loop);
+ CPPUNIT_TEST(testParse_loop_empty);
+ CPPUNIT_TEST(testParse_loop_missingParen);
+ CPPUNIT_TEST(testParse_loop_missingStep);
+ CPPUNIT_TEST(testParse_loop_missingRange);
+ CPPUNIT_TEST(testParse_alphaLoop);
+ CPPUNIT_TEST(testParse_loop_mixedChar);
+ CPPUNIT_TEST(testParse_loop_mixedCase);
+ CPPUNIT_TEST(testParse_segment_loop);
+ CPPUNIT_TEST_SUITE_END();
+private:
+
+public:
+ void setUp() {
+ }
+
+ void testParse_select();
+ void testParse_select_empty();
+ void testParse_select_missingParen();
+ void testParse_segment();
+ void testParse_segment_select();
+ void testParse_loop();
+ void testParse_loop_empty();
+ void testParse_loop_missingParen();
+ void testParse_loop_missingStep();
+ void testParse_loop_missingRange();
+ void testParse_alphaLoop();
+ void testParse_loop_mixedChar();
+ void testParse_loop_mixedCase();
+ void testParse_segment_loop();
+};
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ParameterizedStringParserTest );
+
+void ParameterizedStringParserTest::testParse_select()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("{alpha, bravo, charlie}");
+ PStringSelectHandle select = ls;
+ CPPUNIT_ASSERT(!select.isNull());
+
+ Strings values = select->getValues();
+ CPPUNIT_ASSERT_EQUAL((size_t)3, values.size());
+
+ CPPUNIT_ASSERT_EQUAL(string("alpha"), values[0]);
+ CPPUNIT_ASSERT_EQUAL(string("bravo"), values[1]);
+ CPPUNIT_ASSERT_EQUAL(string("charlie"), values[2]);
+}
+
+void ParameterizedStringParserTest::testParse_select_empty()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("{}");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_select_missingParen()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("{alpha");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception was thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_segment()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("hello world");
+ PStringSegmentHandle segment = ls;
+ CPPUNIT_ASSERT(!segment.isNull());
+ CPPUNIT_ASSERT_EQUAL(string("hello world"), segment->getValue());
+}
+
+void ParameterizedStringParserTest::testParse_segment_select()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("file:///{alpha, bravo, charlie}/tango");
+
+ PStringSegmentHandle segment1 = ls;
+ CPPUNIT_ASSERT(!segment1.isNull());
+ CPPUNIT_ASSERT_EQUAL(string("file:///"), segment1->getValue());
+
+ PStringSelectHandle select1 = segment1->getNext();
+ CPPUNIT_ASSERT(!select1.isNull());
+ Strings selectValues = select1->getValues();
+ CPPUNIT_ASSERT_EQUAL((size_t)3, selectValues.size());
+ CPPUNIT_ASSERT_EQUAL(string("alpha"), selectValues[0]);
+ CPPUNIT_ASSERT_EQUAL(string("bravo"), selectValues[1]);
+ CPPUNIT_ASSERT_EQUAL(string("charlie"), selectValues[2]);
+
+ PStringSegmentHandle segment2 = select1->getNext();
+ CPPUNIT_ASSERT(!segment2.isNull());
+ CPPUNIT_ASSERT_EQUAL(string("/tango"), segment2->getValue());
+}
+
+void ParameterizedStringParserTest::testParse_loop()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[1-10:2]");
+
+ PStringNumLoopHandle loop1 = ls;
+ CPPUNIT_ASSERT(!loop1.isNull());
+ CPPUNIT_ASSERT_EQUAL((int32_t)1, loop1->getStartValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)10, loop1->getEndValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)2, loop1->getStep());
+}
+
+void ParameterizedStringParserTest::testParse_loop_empty()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[]");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception was thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_loop_missingParen()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception was thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_loop_missingStep()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[1-10:]");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception was thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_loop_missingRange()
+{
+ try {
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[1-]");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("unexpected exception was thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_alphaLoop()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("[a-z:2]");
+
+ PStringNumLoopHandle loop1 = ls;
+ CPPUNIT_ASSERT(!loop1.isNull());
+ CPPUNIT_ASSERT_EQUAL((int32_t)0, loop1->getStartValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)25, loop1->getEndValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)2, loop1->getStep());
+}
+
+void ParameterizedStringParserTest::testParse_loop_mixedChar()
+{
+ try {
+ ParameterizedStringParser().parse("[1-z:2]");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("FatalException must be thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_loop_mixedCase()
+{
+ try {
+ ParameterizedStringParser().parse("[a-Z:2]");
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(FatalException* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ } catch(...) {
+ CPPUNIT_FAIL("FatalException must be thrown.");
+ }
+}
+
+void ParameterizedStringParserTest::testParse_segment_loop()
+{
+ PStringDatumHandle ls = ParameterizedStringParser().parse("http://server[1-3]/file");
+
+ PStringSegmentHandle segment1 = ls;
+ CPPUNIT_ASSERT(!segment1.isNull());
+ CPPUNIT_ASSERT_EQUAL(string("http://server"), segment1->getValue());
+
+ PStringNumLoopHandle loop1 = segment1->getNext();
+ CPPUNIT_ASSERT(!loop1.isNull());
+ CPPUNIT_ASSERT_EQUAL((int32_t)1, loop1->getStartValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)3, loop1->getEndValue());
+ CPPUNIT_ASSERT_EQUAL((int32_t)1, loop1->getStep());
+
+ PStringSegmentHandle segment2 = loop1->getNext();
+ CPPUNIT_ASSERT(!segment2.isNull());
+ CPPUNIT_ASSERT_EQUAL(string("/file"), segment2->getValue());
+}