libarc-uri/arc/uri/uri.test.cxx

334 lines
8.1 KiB
C++
Raw Normal View History

2024-09-03 00:31:22 +00:00
#include <arc/validate/main.hxx>
#include <arc/validate/asserts.hxx>
#define ARC_VALIDATE_UNPREFIXED_MACROS
#include <arc/validate/test.hxx>
#include <arc/uri/uri.hxx>
#include <functional>
#include <memory>
#include <iostream>
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);
}