wibble  1.1
regexp.test.h
Go to the documentation of this file.
1 /* -*- C++ -*- (c) 2007 Petr Rockai <me@mornfall.net>
2  (c) 2007 Enrico Zini <enrico@enricozini.org> */
3 
4 #include <wibble/test.h>
5 #include <wibble/regexp.h>
6 
7 namespace {
8 
9 using namespace std;
10 using namespace wibble;
11 
12 struct TestRegexp {
13 
14  Test basicMatch() {
15  Regexp re("^fo\\+bar()$");
16  assert(re.match("fobar()"));
17  assert(re.match("foobar()"));
18  assert(re.match("fooobar()"));
19  assert(!re.match("fbar()"));
20  assert(!re.match(" foobar()"));
21  assert(!re.match("foobar() "));
22  }
23 
24  Test extendedMatch() {
25  ERegexp re("^fo+bar()$");
26  assert(re.match("fobar"));
27  assert(re.match("foobar"));
28  assert(re.match("fooobar"));
29  assert(!re.match("fbar"));
30  assert(!re.match(" foobar"));
31  assert(!re.match("foobar "));
32  }
33 
34  Test capture() {
35  ERegexp re("^f(o+)bar([0-9]*)$", 3);
36  assert(re.match("fobar"));
37  assert_eq(re[0], string("fobar"));
38  assert_eq(re[1], string("o"));
39  assert_eq(re[2], string(""));
40  assert_eq(re.matchStart(0), 0u);
41  assert_eq(re.matchEnd(0), 5u);
42  assert_eq(re.matchLength(0), 5u);
43  assert_eq(re.matchStart(1), 1u);
44  assert_eq(re.matchEnd(1), 2u);
45  assert_eq(re.matchLength(1), 1u);
46 
47  assert(re.match("foobar42"));
48  assert_eq(re[0], string("foobar42"));
49  assert_eq(re[1], string("oo"));
50  assert_eq(re[2], string("42"));
51  }
52 
53  Test tokenize() {
54  string str("antani blinda la supercazzola!");
55  Tokenizer tok(str, "[a-z]+", REG_EXTENDED);
56  Tokenizer::const_iterator i = tok.begin();
57 
58  assert(i != tok.end());
59  assert_eq(*i, "antani");
60  ++i;
61  assert(i != tok.end());
62  assert_eq(*i, "blinda");
63  ++i;
64  assert(i != tok.end());
65  assert_eq(*i, "la");
66  ++i;
67  assert(i != tok.end());
68  assert_eq(*i, "supercazzola");
69  ++i;
70  assert(i == tok.end());
71  }
72 
73  Test splitter()
74  {
75  Splitter splitter("[ \t]+or[ \t]+", REG_EXTENDED | REG_ICASE);
76  Splitter::const_iterator i = splitter.begin("a or b OR c or dadada");
77  assert_eq(*i, "a");
78  assert_eq(i->size(), 1u);
79  ++i;
80  assert_eq(*i, "b");
81  assert_eq(i->size(), 1u);
82  ++i;
83  assert_eq(*i, "c");
84  assert_eq(i->size(), 1u);
85  ++i;
86  assert_eq(*i, "dadada");
87  assert_eq(i->size(), 6u);
88  ++i;
89  assert(i == splitter.end());
90  }
91 
92  Test emptySplitter()
93  {
94  Splitter splitter("Z*", REG_EXTENDED | REG_ICASE);
95  Splitter::const_iterator i = splitter.begin("ciao");
96  assert_eq(*i, "c");
97  assert_eq(i->size(), 1u);
98  ++i;
99  assert_eq(*i, "i");
100  assert_eq(i->size(), 1u);
101  ++i;
102  assert_eq(*i, "a");
103  assert_eq(i->size(), 1u);
104  ++i;
105  assert_eq(*i, "o");
106  assert_eq(i->size(), 1u);
107  ++i;
108  assert(i == splitter.end());
109  }
110 
111 };
112 
113 }
114 
115 // vim:set ts=4 sw=4:
void Test
Definition: test.h:178
Definition: regexp.h:95
Definition: regexp.h:82
Definition: regexp.h:89
#define assert_eq(x, y)
Definition: test.h:33
#define assert(x)
Definition: test.h:30
Definition: regexp.h:53
Warning: the various iterators reuse the Regexps and therefore only one iteration of a Splitter can b...
Definition: regexp.h:155
Definition: amorph.h:17
Split a string using a regular expression to match the token separators.
Definition: regexp.h:145