Go to the documentation of this file.00001
00002
00003
00004 #include <wibble/test.h>
00005 #include <wibble/regexp.h>
00006
00007 namespace {
00008
00009 using namespace std;
00010 using namespace wibble;
00011
00012 struct TestRegexp {
00013
00014 Test basicMatch() {
00015 Regexp re("^fo\\+bar()$");
00016 assert(re.match("fobar()"));
00017 assert(re.match("foobar()"));
00018 assert(re.match("fooobar()"));
00019 assert(!re.match("fbar()"));
00020 assert(!re.match(" foobar()"));
00021 assert(!re.match("foobar() "));
00022 }
00023
00024 Test extendedMatch() {
00025 ERegexp re("^fo+bar()$");
00026 assert(re.match("fobar"));
00027 assert(re.match("foobar"));
00028 assert(re.match("fooobar"));
00029 assert(!re.match("fbar"));
00030 assert(!re.match(" foobar"));
00031 assert(!re.match("foobar "));
00032 }
00033
00034 Test capture() {
00035 ERegexp re("^f(o+)bar([0-9]*)$", 3);
00036 assert(re.match("fobar"));
00037 assert_eq(re[0], string("fobar"));
00038 assert_eq(re[1], string("o"));
00039 assert_eq(re[2], string(""));
00040 assert_eq(re.matchStart(0), 0u);
00041 assert_eq(re.matchEnd(0), 5u);
00042 assert_eq(re.matchLength(0), 5u);
00043 assert_eq(re.matchStart(1), 1u);
00044 assert_eq(re.matchEnd(1), 2u);
00045 assert_eq(re.matchLength(1), 1u);
00046
00047 assert(re.match("foobar42"));
00048 assert_eq(re[0], string("foobar42"));
00049 assert_eq(re[1], string("oo"));
00050 assert_eq(re[2], string("42"));
00051 }
00052
00053 Test tokenize() {
00054 string str("antani blinda la supercazzola!");
00055 Tokenizer tok(str, "[a-z]+", REG_EXTENDED);
00056 Tokenizer::const_iterator i = tok.begin();
00057
00058 assert(i != tok.end());
00059 assert_eq(*i, "antani");
00060 ++i;
00061 assert(i != tok.end());
00062 assert_eq(*i, "blinda");
00063 ++i;
00064 assert(i != tok.end());
00065 assert_eq(*i, "la");
00066 ++i;
00067 assert(i != tok.end());
00068 assert_eq(*i, "supercazzola");
00069 ++i;
00070 assert(i == tok.end());
00071 }
00072
00073 Test splitter()
00074 {
00075 Splitter splitter("[ \t]+or[ \t]+", REG_EXTENDED | REG_ICASE);
00076 Splitter::const_iterator i = splitter.begin("a or b OR c or dadada");
00077 assert_eq(*i, "a");
00078 assert_eq(i->size(), 1u);
00079 ++i;
00080 assert_eq(*i, "b");
00081 assert_eq(i->size(), 1u);
00082 ++i;
00083 assert_eq(*i, "c");
00084 assert_eq(i->size(), 1u);
00085 ++i;
00086 assert_eq(*i, "dadada");
00087 assert_eq(i->size(), 6u);
00088 ++i;
00089 assert(i == splitter.end());
00090 }
00091
00092 Test emptySplitter()
00093 {
00094 Splitter splitter("Z*", REG_EXTENDED | REG_ICASE);
00095 Splitter::const_iterator i = splitter.begin("ciao");
00096 assert_eq(*i, "c");
00097 assert_eq(i->size(), 1u);
00098 ++i;
00099 assert_eq(*i, "i");
00100 assert_eq(i->size(), 1u);
00101 ++i;
00102 assert_eq(*i, "a");
00103 assert_eq(i->size(), 1u);
00104 ++i;
00105 assert_eq(*i, "o");
00106 assert_eq(i->size(), 1u);
00107 ++i;
00108 assert(i == splitter.end());
00109 }
00110
00111 };
00112
00113 }
00114
00115