wibble 0.1.28
|
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: