• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

regexp.test.h

Go to the documentation of this file.
00001 /* -*- C++ -*- (c) 2007 Petr Rockai <me@mornfall.net>
00002                (c) 2007 Enrico Zini <enrico@enricozini.org> */
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 // vim:set ts=4 sw=4:

Generated on Sun Feb 17 2013 02:35:46 for wibble by  doxygen 1.7.1