Changeset View
Changeset View
Standalone View
Standalone View
src/test/util_tests.cpp
Show First 20 Lines • Show All 2,191 Lines • ▼ Show 20 Lines | |||||
BOOST_AUTO_TEST_CASE(test_spanparsing) { | BOOST_AUTO_TEST_CASE(test_spanparsing) { | ||||
using namespace spanparsing; | using namespace spanparsing; | ||||
std::string input; | std::string input; | ||||
Span<const char> sp; | Span<const char> sp; | ||||
bool success; | bool success; | ||||
// Const(...): parse a constant, update span to skip it if successful | // Const(...): parse a constant, update span to skip it if successful | ||||
input = "MilkToastHoney"; | input = "MilkToastHoney"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
success = Const("", sp); // empty | success = Const("", sp); // empty | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), "MilkToastHoney"); | BOOST_CHECK_EQUAL(SpanToStr(sp), "MilkToastHoney"); | ||||
success = Const("Milk", sp); | success = Const("Milk", sp); | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), "ToastHoney"); | BOOST_CHECK_EQUAL(SpanToStr(sp), "ToastHoney"); | ||||
success = Const("Bread", sp); | success = Const("Bread", sp); | ||||
BOOST_CHECK(!success); | BOOST_CHECK(!success); | ||||
success = Const("Toast", sp); | success = Const("Toast", sp); | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), "Honey"); | BOOST_CHECK_EQUAL(SpanToStr(sp), "Honey"); | ||||
success = Const("Honeybadger", sp); | success = Const("Honeybadger", sp); | ||||
BOOST_CHECK(!success); | BOOST_CHECK(!success); | ||||
success = Const("Honey", sp); | success = Const("Honey", sp); | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ""); | BOOST_CHECK_EQUAL(SpanToStr(sp), ""); | ||||
// Func(...): parse a function call, update span to argument if successful | // Func(...): parse a function call, update span to argument if successful | ||||
input = "Foo(Bar(xy,z()))"; | input = "Foo(Bar(xy,z()))"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
success = Func("FooBar", sp); | success = Func("FooBar", sp); | ||||
BOOST_CHECK(!success); | BOOST_CHECK(!success); | ||||
success = Func("Foo(", sp); | success = Func("Foo(", sp); | ||||
BOOST_CHECK(!success); | BOOST_CHECK(!success); | ||||
success = Func("Foo", sp); | success = Func("Foo", sp); | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), "Bar(xy,z())"); | BOOST_CHECK_EQUAL(SpanToStr(sp), "Bar(xy,z())"); | ||||
success = Func("Bar", sp); | success = Func("Bar", sp); | ||||
BOOST_CHECK(success); | BOOST_CHECK(success); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), "xy,z()"); | BOOST_CHECK_EQUAL(SpanToStr(sp), "xy,z()"); | ||||
success = Func("xy", sp); | success = Func("xy", sp); | ||||
BOOST_CHECK(!success); | BOOST_CHECK(!success); | ||||
// Expr(...): return expression that span begins with, update span to skip | // Expr(...): return expression that span begins with, update span to skip | ||||
// it | // it | ||||
Span<const char> result; | Span<const char> result; | ||||
input = "(n*(n-1))/2"; | input = "(n*(n-1))/2"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
result = Expr(sp); | result = Expr(sp); | ||||
BOOST_CHECK_EQUAL(SpanToStr(result), "(n*(n-1))/2"); | BOOST_CHECK_EQUAL(SpanToStr(result), "(n*(n-1))/2"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ""); | BOOST_CHECK_EQUAL(SpanToStr(sp), ""); | ||||
input = "foo,bar"; | input = "foo,bar"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
result = Expr(sp); | result = Expr(sp); | ||||
BOOST_CHECK_EQUAL(SpanToStr(result), "foo"); | BOOST_CHECK_EQUAL(SpanToStr(result), "foo"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ",bar"); | BOOST_CHECK_EQUAL(SpanToStr(sp), ",bar"); | ||||
input = "(aaaaa,bbbbb()),c"; | input = "(aaaaa,bbbbb()),c"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
result = Expr(sp); | result = Expr(sp); | ||||
BOOST_CHECK_EQUAL(SpanToStr(result), "(aaaaa,bbbbb())"); | BOOST_CHECK_EQUAL(SpanToStr(result), "(aaaaa,bbbbb())"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ",c"); | BOOST_CHECK_EQUAL(SpanToStr(sp), ",c"); | ||||
input = "xyz)foo"; | input = "xyz)foo"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
result = Expr(sp); | result = Expr(sp); | ||||
BOOST_CHECK_EQUAL(SpanToStr(result), "xyz"); | BOOST_CHECK_EQUAL(SpanToStr(result), "xyz"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ")foo"); | BOOST_CHECK_EQUAL(SpanToStr(sp), ")foo"); | ||||
input = "((a),(b),(c)),xxx"; | input = "((a),(b),(c)),xxx"; | ||||
sp = MakeSpan(input); | sp = input; | ||||
result = Expr(sp); | result = Expr(sp); | ||||
BOOST_CHECK_EQUAL(SpanToStr(result), "((a),(b),(c))"); | BOOST_CHECK_EQUAL(SpanToStr(result), "((a),(b),(c))"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(sp), ",xxx"); | BOOST_CHECK_EQUAL(SpanToStr(sp), ",xxx"); | ||||
// Split(...): split a string on every instance of sep, return vector | // Split(...): split a string on every instance of sep, return vector | ||||
std::vector<Span<const char>> results; | std::vector<Span<const char>> results; | ||||
input = "xxx"; | input = "xxx"; | ||||
results = Split(MakeSpan(input), 'x'); | results = Split(input, 'x'); | ||||
BOOST_CHECK_EQUAL(results.size(), 4); | BOOST_CHECK_EQUAL(results.size(), 4); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[0]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[0]), ""); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[1]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[1]), ""); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[2]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[2]), ""); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[3]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[3]), ""); | ||||
input = "one#two#three"; | input = "one#two#three"; | ||||
results = Split(MakeSpan(input), '-'); | results = Split(input, '-'); | ||||
BOOST_CHECK_EQUAL(results.size(), 1); | BOOST_CHECK_EQUAL(results.size(), 1); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[0]), "one#two#three"); | BOOST_CHECK_EQUAL(SpanToStr(results[0]), "one#two#three"); | ||||
input = "one#two#three"; | input = "one#two#three"; | ||||
results = Split(MakeSpan(input), '#'); | results = Split(input, '#'); | ||||
BOOST_CHECK_EQUAL(results.size(), 3); | BOOST_CHECK_EQUAL(results.size(), 3); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[0]), "one"); | BOOST_CHECK_EQUAL(SpanToStr(results[0]), "one"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[1]), "two"); | BOOST_CHECK_EQUAL(SpanToStr(results[1]), "two"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[2]), "three"); | BOOST_CHECK_EQUAL(SpanToStr(results[2]), "three"); | ||||
input = "*foo*bar*"; | input = "*foo*bar*"; | ||||
results = Split(MakeSpan(input), '*'); | results = Split(input, '*'); | ||||
BOOST_CHECK_EQUAL(results.size(), 4); | BOOST_CHECK_EQUAL(results.size(), 4); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[0]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[0]), ""); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[1]), "foo"); | BOOST_CHECK_EQUAL(SpanToStr(results[1]), "foo"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[2]), "bar"); | BOOST_CHECK_EQUAL(SpanToStr(results[2]), "bar"); | ||||
BOOST_CHECK_EQUAL(SpanToStr(results[3]), ""); | BOOST_CHECK_EQUAL(SpanToStr(results[3]), ""); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(test_LogEscapeMessage) { | BOOST_AUTO_TEST_CASE(test_LogEscapeMessage) { | ||||
▲ Show 20 Lines • Show All 217 Lines • Show Last 20 Lines |