Go to the documentation of this file.
34 SBuf text(
"GET http://resource.com/path HTTP/1.1\r\n"
35 "Host: resource.com\r\n"
36 "Cookie: laijkpk3422r j1noin \r\n"
38 const CharacterSet alpha(
"alpha",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
47 const SBuf canary(
"This text should not be changed.");
61 CPPUNIT_ASSERT(!t.
prefix(s, all, 0));
63 CPPUNIT_ASSERT_EQUAL(canary, s);
65 CPPUNIT_ASSERT_EQUAL(before, t.
remaining());
69 CPPUNIT_ASSERT_EQUAL(
SBuf(
"GET"),s);
71 CPPUNIT_ASSERT_EQUAL(
SBuf(
" "),s);
75 CPPUNIT_ASSERT_EQUAL(
SBuf(
" "),s);
79 CPPUNIT_ASSERT_EQUAL(
SBuf(
"http"),s);
83 CPPUNIT_ASSERT_EQUAL(
SBuf(
"http"),s);
86 CPPUNIT_ASSERT(t.
prefix(s,all));
91 CPPUNIT_ASSERT(!t.
prefix(s, all));
93 CPPUNIT_ASSERT_EQUAL(canary, s);
105 CPPUNIT_ASSERT_EQUAL(
SBuf(
"GET"),s);
111 CPPUNIT_ASSERT_EQUAL(
SBuf(
"http"),s);
114 CPPUNIT_ASSERT(t.
skip(
SBuf(
"://")));
117 CPPUNIT_ASSERT_EQUAL(
SBuf(
"resource"),s);
121 CPPUNIT_ASSERT(!t.
skip(
SBuf(
"://")));
122 CPPUNIT_ASSERT(!t.
skip(
'a'));
125 CPPUNIT_ASSERT(t.
skip(
'.'));
138 CPPUNIT_ASSERT_EQUAL(
SBuf(
"GET"),s);
140 CPPUNIT_ASSERT_EQUAL(
SBuf(
"http://resource.com/path"),s);
142 CPPUNIT_ASSERT_EQUAL(
SBuf(
"HTTP/1.1"),s);
144 CPPUNIT_ASSERT_EQUAL(
SBuf(
"Host:"),s);
151 const SBuf canary(
"This text should not be changed.");
165 CPPUNIT_ASSERT(!t.
suffix(s, all, 0));
167 CPPUNIT_ASSERT_EQUAL(canary, s);
169 CPPUNIT_ASSERT_EQUAL(before, t.
remaining());
187 CPPUNIT_ASSERT_EQUAL(
SBuf(
"1"), s);
191 CPPUNIT_ASSERT_EQUAL(
SBuf(
"HTTP"), s);
193 CPPUNIT_ASSERT_EQUAL(
SBuf(
" "), s);
196 CPPUNIT_ASSERT(t.
suffix(s, all));
201 CPPUNIT_ASSERT(!t.
suffix(s, all));
202 CPPUNIT_ASSERT_EQUAL(canary, s);
215 const int64_t benchmark = 1234;
216 CPPUNIT_ASSERT(t.
int64(rv, 10));
217 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
225 const int64_t benchmark = 1234;
226 CPPUNIT_ASSERT(t.
int64(rv));
227 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
235 const int64_t benchmark = 01234;
236 CPPUNIT_ASSERT(t.
int64(rv));
237 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
245 const int64_t benchmark = 0x12f4;
246 CPPUNIT_ASSERT(t.
int64(rv));
247 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
268 CPPUNIT_ASSERT(!t.
int64(rv, 8));
269 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
276 CPPUNIT_ASSERT(!t.
int64(rv, 8,
false, 0));
277 CPPUNIT_ASSERT_EQUAL(
SBuf(
"7"), t.
buf());
284 const int64_t benchmark = 04;
285 CPPUNIT_ASSERT(t.
int64(rv, 8));
286 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
287 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
294 const int64_t benchmark = 04;
295 CPPUNIT_ASSERT(t.
int64(rv, 8,
false, 1));
296 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
297 CPPUNIT_ASSERT_EQUAL(
SBuf(
"6"), t.
buf());
304 CPPUNIT_ASSERT(!t.
int64(rv, 8));
305 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
312 CPPUNIT_ASSERT(!t.
int64(rv, 8,
false, 1));
313 CPPUNIT_ASSERT_EQUAL(
SBuf(
"80"), t.
buf());
322 const int64_t benchmark = 0;
323 CPPUNIT_ASSERT(t.
int64(rv, 8));
324 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
325 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
332 const int64_t benchmark = 0;
333 CPPUNIT_ASSERT(t.
int64(rv, 8,
false, 1));
334 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
335 CPPUNIT_ASSERT_EQUAL(
SBuf(
"7"), t.
buf());
342 const int64_t benchmark = 04;
343 CPPUNIT_ASSERT(t.
int64(rv, 8));
344 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
345 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
352 const int64_t benchmark = 04;
353 CPPUNIT_ASSERT(t.
int64(rv, 8,
false, 2));
354 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
355 CPPUNIT_ASSERT_EQUAL(
SBuf(
"6"), t.
buf());
362 const int64_t benchmark = 00;
363 CPPUNIT_ASSERT(t.
int64(rv, 8));
364 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
365 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
372 const int64_t benchmark = 00;
373 CPPUNIT_ASSERT(t.
int64(rv, 8,
false, 2));
374 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
375 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
390 const int64_t benchmark = 00;
391 CPPUNIT_ASSERT(t.
int64(rv, 0));
392 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
393 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
400 const int64_t benchmark = 0;
401 CPPUNIT_ASSERT(t.
int64(rv, 0,
false, 1));
402 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
403 CPPUNIT_ASSERT_EQUAL(
SBuf(
"7"), t.
buf());
410 const int64_t benchmark = 04;
411 CPPUNIT_ASSERT(t.
int64(rv, 0));
412 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
413 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
420 const int64_t benchmark = 04;
421 CPPUNIT_ASSERT(t.
int64(rv, 0,
false, 2));
422 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
423 CPPUNIT_ASSERT_EQUAL(
SBuf(
"6"), t.
buf());
430 const int64_t benchmark = 00;
431 CPPUNIT_ASSERT(t.
int64(rv, 0));
432 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
433 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
440 const int64_t benchmark = 00;
441 CPPUNIT_ASSERT(t.
int64(rv, 0,
false, 2));
442 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
443 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
452 const int64_t benchmark = 012;
453 CPPUNIT_ASSERT(t.
int64(rv, 0));
454 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
455 CPPUNIT_ASSERT_EQUAL(
SBuf(
"8"), t.
buf());
462 const int64_t benchmark = 00000000071;
463 CPPUNIT_ASSERT(t.
int64(rv));
464 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
465 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
472 const int64_t benchmark = 0;
473 CPPUNIT_ASSERT(t.
int64(rv, 8));
474 CPPUNIT_ASSERT_EQUAL(benchmark, rv);
475 CPPUNIT_ASSERT_EQUAL(
SBuf(
"x5"), t.
buf());
482 const int64_t benchmark = 1;
483 CPPUNIT_ASSERT(t.
int64(rv));
484 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
492 const int64_t benchmark = 0X1;
493 CPPUNIT_ASSERT(t.
int64(rv));
494 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
502 CPPUNIT_ASSERT(!t.
int64(rv));
503 CPPUNIT_ASSERT_EQUAL(
SBuf(
"0x"), t.
buf());
510 CPPUNIT_ASSERT(!t.
int64(rv, 16));
511 CPPUNIT_ASSERT_EQUAL(
SBuf(
"0x"), t.
buf());
518 CPPUNIT_ASSERT(!t.
int64(rv, 0,
true, 2));
519 CPPUNIT_ASSERT_EQUAL(
SBuf(
"0x2"), t.
buf());
526 CPPUNIT_ASSERT(!t.
int64(rv, 16,
false, 2));
527 CPPUNIT_ASSERT_EQUAL(
SBuf(
"0x3"), t.
buf());
534 CPPUNIT_ASSERT(!t.
int64(rv));
535 CPPUNIT_ASSERT_EQUAL(
SBuf(
" 1234"), t.
buf());
542 CPPUNIT_ASSERT(!t.
int64(rv));
543 CPPUNIT_ASSERT_EQUAL(
SBuf(
" 1234"), t.
buf());
550 const int64_t benchmark = 00;
551 CPPUNIT_ASSERT(t.
int64(rv));
552 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
553 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
560 const int64_t benchmark = +0;
561 CPPUNIT_ASSERT(t.
int64(rv));
562 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
563 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
570 const int64_t benchmark = -0;
571 CPPUNIT_ASSERT(t.
int64(rv));
572 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
573 CPPUNIT_ASSERT_EQUAL(
SBuf(
""), t.
buf());
580 const int64_t benchmark = 1234;
581 CPPUNIT_ASSERT(t.
int64(rv));
582 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
583 CPPUNIT_ASSERT_EQUAL(
SBuf(
" foo"), t.
buf());
590 const int64_t benchmark = 1234;
591 CPPUNIT_ASSERT(t.
int64(rv));
592 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
593 CPPUNIT_ASSERT_EQUAL(
SBuf(
"foo"), t.
buf());
600 const int64_t benchmark = 0x1234f;
601 CPPUNIT_ASSERT(t.
int64(rv));
602 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
603 CPPUNIT_ASSERT_EQUAL(
SBuf(
"oo"), t.
buf());
610 CPPUNIT_ASSERT(!t.
int64(rv));
611 CPPUNIT_ASSERT_EQUAL(
SBuf(
"1029397752385698678762234"), t.
buf());
617 SBuf base(
"1029397752385698678762234");
618 const int64_t benchmark = 22;
620 CPPUNIT_ASSERT_EQUAL(
SBuf(
"22"),t.
buf());
621 CPPUNIT_ASSERT(t.
int64(rv));
622 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
629 SBuf base(
"deadbeefrow");
630 const int64_t benchmark=0xdeadbeef;
632 CPPUNIT_ASSERT(t.
int64(rv,16));
633 CPPUNIT_ASSERT_EQUAL(benchmark,rv);
634 CPPUNIT_ASSERT_EQUAL(
SBuf(
"row"),t.
buf());
bool prefix(SBuf &returnedToken, const CharacterSet &tokenChars, SBuf::size_type limit=SBuf::npos)
SBuf::size_type skipAll(const CharacterSet &discardables)
bool skipOneTrailing(const CharacterSet &discardables)
void testTokenizerToken()
SBuf buf() const
yet unparsed data
bool token(SBuf &returnedToken, const CharacterSet &delimiters)
CPPUNIT_TEST_SUITE(TestTokenizer)
implements test program's main() function while enabling customization
bool skip(const SBuf &tokenToSkip)
bool startsWith(const SBuf &S, const SBufCaseSensitive isCaseSensitive=caseSensitive) const
CPPUNIT_TEST(testTokenizerPrefix)
CharacterSet & add(const unsigned char c)
add a given character to the character set
SBuf substr(size_type pos, size_type n=npos) const
int run(int argc, char *argv[])
void testTokenizerSuffix()
CPPUNIT_TEST_SUITE_REGISTRATION(TestTokenizer)
void testTokenizerPrefix()
const SBuf & remaining() const
the remaining unprocessed section of buffer
MemBlob::size_type size_type
SBuf text("GET http://resource.com/path HTTP/1.1\r\n" "Host: resource.com\r\n" "Cookie: laijkpk3422r j1noin \r\n" "\r\n")
const CharacterSet whitespace("whitespace"," \r\n")
const CharacterSet alpha("alpha","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
const CharacterSet numbers("numbers","0123456789")
void testTokenizerInt64()
size_type length() const
Returns the number of bytes stored in SBuf.
size_type findLastOf(const CharacterSet &set, size_type endPos=npos) const
const CharacterSet tab("tab","\t")
static const size_type npos
int main(int argc, char *argv[])
bool int64(int64_t &result, int base=0, bool allowSign=true, SBuf::size_type limit=SBuf::npos)
bool skipOne(const CharacterSet &discardables)
bool skipSuffix(const SBuf &tokenToSkip)
optimized set of C chars, with quick membership test and merge support
bool suffix(SBuf &returnedToken, const CharacterSet &tokenChars, SBuf::size_type limit=SBuf::npos)
const CharacterSet crlf("crlf","\r\n")