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
7namespace {
8
9using namespace std;
10using namespace wibble;
11
12struct TestRegexp {
13
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
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
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
93 {
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:
Definition regexp.h:83
Definition regexp.h:54
Warning: the various iterators reuse the Regexps and therefore only one iteration of a Splitter can b...
Definition regexp.h:156
Split a string using a regular expression to match the token separators.
Definition regexp.h:146
Definition regexp.h:96
Definition regexp.h:90
Definition amorph.h:17
Definition amorph.h:30
#define assert_eq(x, y)
Definition test.h:33
#define assert(x)
Definition test.h:30