#include #include #define ARC_VALIDATE_UNPREFIXED_MACROS #include #include #include #include #include using namespace arc::validate::asserts; DEFINE_TEST(test_01) { auto opt_uri = arc::uri::try_parse(""); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_false((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_false((bool)uri.host()); assert_false((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_true(uri.path_str().empty()); } DEFINE_TEST(test_02) { auto opt_uri = arc::uri::try_parse("http:///index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), true); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), true); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), false); assert_equal((bool)uri.fragment(), false); assert_equal(uri.scheme_str(), "http"); assert_equal(uri.host_str(), ""); assert_equal(uri.path_str(), "/index.html"); } DEFINE_TEST(test_03) { auto opt_uri = arc::uri::try_parse("http://host.domain./index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_true((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_false((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.scheme_str(), "http"); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.path_str(), "/index.html"); } DEFINE_TEST(test_04) { auto opt_uri = arc::uri::try_parse("https://host.domain.:8443/index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_true((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_true((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.scheme_str(), "https"); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.port_str(), "8443"); assert_equal(uri.path_str(), "/index.html"); } DEFINE_TEST(test_05) { auto opt_uri = arc::uri::try_parse("https://host.domain.:8443/search?q=hamsters"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_true((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_true((bool)uri.port()); assert_true((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.scheme_str(), "https"); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.port_str(), "8443"); assert_equal(uri.path_str(), "/search"); assert_equal(uri.query_str(), "q=hamsters"); } DEFINE_TEST(test_06) { auto opt_uri = arc::uri::try_parse("https://host.domain.:8443/search?q=hamsters#results"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_true((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_true((bool)uri.port()); assert_true((bool)uri.query()); assert_true((bool)uri.fragment()); assert_equal(uri.scheme_str(), "https"); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.port_str(), "8443"); assert_equal(uri.path_str(), "/search"); assert_equal(uri.query_str(), "q=hamsters"); assert_equal(uri.fragment_str(), "results"); } DEFINE_TEST(test_07) { auto opt_uri = arc::uri::try_parse( "https://admin:qwerty@host.domain.:8443/search?q=hamsters#results" ); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_true((bool)uri.scheme()); assert_true((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_true((bool)uri.port()); assert_true((bool)uri.query()); assert_true((bool)uri.fragment()); assert_equal(uri.scheme_str(), "https"); assert_equal(uri.userinfo_str(), "admin:qwerty"); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.port_str(), "8443"); assert_equal(uri.path_str(), "/search"); assert_equal(uri.query_str(), "q=hamsters"); assert_equal(uri.fragment_str(), "results"); } DEFINE_TEST(test_08) { auto opt_uri = arc::uri::try_parse("//host.domain./index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_false((bool)uri.scheme()); assert_false((bool)uri.userinfo()); assert_true((bool)uri.host()); assert_false((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.host_str(), "host.domain."); assert_equal(uri.path_str(), "/index.html"); } DEFINE_TEST(test_09) { auto opt_uri = arc::uri::try_parse("/index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_false((bool)uri.userinfo()); assert_false((bool)uri.host()); assert_false((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.path_str(), "/index.html"); } DEFINE_TEST(test_10) { auto opt_uri = arc::uri::try_parse("index.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_false((bool)uri.userinfo()); assert_false((bool)uri.host()); assert_false((bool)uri.port()); assert_false((bool)uri.query()); assert_false((bool)uri.fragment()); assert_equal(uri.path_str(), "index.html"); } DEFINE_TEST(test_11) { auto opt_uri = arc::uri::try_parse("/files/index:1.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), false); assert_equal((bool)uri.fragment(), false); assert_equal(uri.path_str(), "/files/index:1.html"); } DEFINE_TEST(test_12) { auto opt_uri = arc::uri::try_parse("files/index:1.html"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), false); assert_equal((bool)uri.fragment(), false); assert_equal(uri.path_str(), "files/index:1.html"); } DEFINE_TEST(test_13) { auto opt_uri = arc::uri::try_parse("?q=hamsters"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), true); assert_equal((bool)uri.fragment(), false); assert_equal(uri.query_str(), "q=hamsters"); } DEFINE_TEST(test_14) { auto opt_uri = arc::uri::try_parse("?q=hamsters#results"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), true); assert_equal((bool)uri.fragment(), true); assert_equal(uri.query_str(), "q=hamsters"); assert_equal(uri.fragment_str(), "results"); } DEFINE_TEST(test_15) { auto opt_uri = arc::uri::try_parse("#results"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), false); assert_equal((bool)uri.fragment(), true); assert_equal(uri.fragment_str(), "results"); } DEFINE_TEST(test_16) { auto opt_uri = arc::uri::try_parse("#results?gui-sort=asc"); assert_true((bool)opt_uri); auto uri = *opt_uri; assert_equal((bool)uri.scheme(), false); assert_equal((bool)uri.userinfo(), false); assert_equal((bool)uri.host(), false); assert_equal((bool)uri.port(), false); assert_equal((bool)uri.query(), false); assert_equal((bool)uri.fragment(), true); assert_equal(uri.fragment_str(), "results?gui-sort=asc"); } int main(int argc, char* argv[]) { return arc::validate::main(argc, argv); }