#include #include #include using namespace cpplask; TEST(UrlScanner, StaticMatch) { std::function func = []() { }; bool result = url_scan<>("/lightly-hopped", "/lightly-hopped", func); EXPECT_EQ(result, true); } TEST(UrlScanner, StaticNoMatch) { std::function func = []() { }; bool result = url_scan<>("hops", "barley", func); EXPECT_EQ(result, false); } TEST(UrlScanner, StaticNoMatchPatternTooLong) { std::function func = []() { }; bool result = url_scan<>("/malted-barley", "/malted", func); EXPECT_EQ(result, false); } TEST(UrlScanner, StaticNoMatchPathTooLong) { std::function func = []() { }; bool result = url_scan<>("/malted", "/malted-barley", func); EXPECT_EQ(result, false); } TEST(UrlScanner, OneNumber) { int value; std::function func = [&](int a) { value = a; }; bool result = url_scan("%", "1", func); EXPECT_EQ(result, true); EXPECT_EQ(value, 1); } TEST(UrlScanner, OneNumberNoMatch) { int value = -1; std::function func = [&](int a) { value = a; }; bool result = url_scan("/page/%", "/page/f", func); EXPECT_EQ(result, false); EXPECT_EQ(value, -1); } TEST(UrlScanner, ThreeNumber) { int va, vb, vc; std::function func = [&](int a, int b, int c) { va = a; vb = b, vc = c; }; bool result = url_scan("/%/%/%", "/1/2/3", func); EXPECT_EQ(result, true); EXPECT_EQ(va, 1); EXPECT_EQ(vb, 2); EXPECT_EQ(vc, 3); } TEST(UrlScanner, NoMatchAfterLastPercentSymbol) { int va = -1; int vb = -1; std::function func = [&](int a, int b) { va = a; vb = b; }; bool result = url_scan("/pages/%/data/%/info", "/pages/3/data/45/question", func); EXPECT_EQ(result, false); EXPECT_EQ(va, -1); EXPECT_EQ(vb, -1); } TEST(UrlScanner, OneString) { std::string value; std::function func = [&](std::string a) { value = a; }; bool result = url_scan("%", "astring", func); EXPECT_EQ(result, true); EXPECT_EQ(value, "astring"); } TEST(UrlScanner, OneStringPath) { std::string value; std::function func = [&](std::string a) { value = a; }; bool result = url_scan("/hops/%/yeast", "/hops/barley/yeast", func); EXPECT_EQ(result, true); EXPECT_EQ(value, "barley"); } TEST(UrlScanner, StringIntPath) { std::string va; int vb; std::function func = [&](std::string a, int b) { va = a; vb = b; }; bool result = url_scan("/%/%/", "/abv/5/", func); EXPECT_EQ(result, true); EXPECT_EQ(va, "abv"); EXPECT_EQ(vb, 5); }