2
0
mirror of https://github.com/boostorg/url.git synced 2026-02-15 13:32:14 +00:00
This commit is contained in:
Vinnie Falco
2021-09-11 18:43:28 -07:00
parent b57db1f14c
commit ad308be3fb
24 changed files with 1081 additions and 669 deletions

View File

@@ -122,7 +122,8 @@ public:
// null is reserved
opt.allow_null = true;
opt.non_normal_is_error = false;
good_decode_size(1, string_view("\0", 1), opt);
bad_decode_size(string_view("\0", 1), opt);
good_decode_size(1, string_view("\0", 1), opt, test_chars_null{});
good_decode_size(1, "%00", opt);
opt.allow_null = false;
bad_decode_size(string_view("\0", 1), opt);
@@ -134,12 +135,14 @@ public:
pct_decode_opts opt;
good_decode_size(1, "A", opt);
good_decode_size(2, "aA", opt);
good_decode_size(3, "ab%41", opt);
good_decode_size(1, "%41", opt);
bad_decode_size("ab%41", opt);
bad_decode_size("aA", opt);
opt.non_normal_is_error = true;
good_decode_size(1, "A", opt);
good_decode_size(2, "A%20", opt);
bad_decode_size("%41", opt);
opt.plus_to_space = true;
good_decode_size(2, "A+", opt);
opt.plus_to_space = false;
@@ -228,7 +231,8 @@ public:
opt.non_normal_is_error = false;
good_decode(
string_view("\0", 1),
string_view("\0", 1), opt);
string_view("\0", 1), opt,
test_chars_null{});
good_decode("%00",
string_view("\0", 1), opt);
opt.allow_null = false;
@@ -240,8 +244,9 @@ public:
pct_decode_opts opt;
good_decode("A", "A", opt);
good_decode("aA", "aA", opt);
good_decode("ab%41", "abA", opt);
good_decode("%42", "B", opt);
bad_decode("aA", opt);
bad_decode("ab%41", opt);
opt.non_normal_is_error = true;
good_decode("A", "A", opt);

View File

@@ -65,7 +65,7 @@ public:
if(BOOST_TEST(p.has_userinfo))
{
BOOST_TEST(p.userinfo.str == "x:y");
BOOST_TEST(p.userinfo.username.str == "x");
BOOST_TEST(p.userinfo.user.str == "x");
if(BOOST_TEST(p.userinfo.password.has_value()))
BOOST_TEST(p.userinfo.password->str == "y");
}

View File

@@ -37,7 +37,7 @@ public:
if(! BOOST_TEST(! ec))
return;
BOOST_TEST(p.str == s);
BOOST_TEST(p.username.str == s1);
BOOST_TEST(p.user.str == s1);
if(s2.has_value())
BOOST_TEST(
p.password.has_value() &&

View File

@@ -12,6 +12,7 @@
#include <boost/url/url_view.hpp>
#include "test_suite.hpp"
#include <iostream>
namespace boost {
namespace urls {
@@ -135,12 +136,12 @@ public:
{
url_view uv;
BOOST_TEST_NO_THROW( uv = parse_uri(
"http://username:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag"));
"http://user:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag"));
url_t u(uv);
BOOST_TEST(u.encoded_origin() ==
"http://username:pass@www.boost.org:8080");
"http://user:pass@www.boost.org:8080");
BOOST_TEST(u.scheme() == "http");
BOOST_TEST(u.username() == "username");
BOOST_TEST(u.user() == "user");
BOOST_TEST(u.password() == "pass");
BOOST_TEST(u.host() == "www.boost.org");
BOOST_TEST(u.port() == "8080");
@@ -149,11 +150,41 @@ public:
BOOST_TEST(u.encoded_fragment() == "frag");
}
void
testSetScheme()
{
{
url_t u;
u = parse_uri("http://www.example.com");
u.set_scheme("");
BOOST_TEST(u.str() == "//www.example.com");
}
{
url_t u;
u = parse_uri("http:live/wire");
u.set_scheme("");
BOOST_TEST(u.str() == "live/wire");
}
{
url_t u;
u = parse_uri("http:my:adidas");
u.set_scheme("");
BOOST_TEST(u.str() == "./my:adidas");
}
{
url_t u;
u = parse_uri("http:my:adidas/");
u.set_scheme("");
BOOST_TEST(u.str() == "./my:adidas/");
}
}
void
run()
{
testSpecial();
testParts();
testSetScheme();
}
};

View File

@@ -10,7 +10,7 @@
// Test that header file is self-contained.
#include <boost/url/url.hpp>
#include <boost/url/static_pool.hpp>
#include <boost/url/url_view.hpp>
#include "test_suite.hpp"
@@ -30,7 +30,7 @@ public:
log <<
"href : " << u.str() << "\n"
"scheme : " << u.scheme() << "\n"
"user : " << u.encoded_username() << "\n"
"user : " << u.encoded_user() << "\n"
"password : " << u.encoded_password() << "\n"
"hostname : " << u.encoded_host() << "\n"
"port : " << u.port() << "\n" <<
@@ -69,7 +69,7 @@ public:
BOOST_TEST(v.encoded_origin() == "http://user:pass@example.com:80");
BOOST_TEST(v.encoded_authority() == "user:pass@example.com:80");
BOOST_TEST(v.scheme() == "http");
BOOST_TEST(v.encoded_username() == "user");
BOOST_TEST(v.encoded_user() == "user");
BOOST_TEST(v.encoded_password() == "pass");
BOOST_TEST(v.encoded_userinfo() == "user:pass");
BOOST_TEST(v.encoded_host() == "example.com");
@@ -78,7 +78,7 @@ public:
BOOST_TEST(v.encoded_query() == "k1=v1&k2=v2");
BOOST_TEST(v.encoded_fragment() == "");
BOOST_TEST(v.username() == "user");
BOOST_TEST(v.user() == "user");
BOOST_TEST(v.password() == "pass");
BOOST_TEST(v.host() == "example.com");
BOOST_TEST(v.query() == "k1=v1&k2=v2");
@@ -94,24 +94,6 @@ public:
BOOST_TEST(url().str() == "");
}
void
testScheme()
{
BOOST_TEST(url().scheme() == "");
BOOST_TEST(url("http:").scheme() == "http");
BOOST_TEST(url("http:").str() == "http:");
BOOST_TEST(url("http:").set_scheme("").scheme() == "");
BOOST_TEST(url("http:").set_scheme("").str() == "");
BOOST_TEST(url("http:").set_scheme("ftp").str() == "ftp:");
BOOST_TEST(url("ws:").set_scheme("gopher").str() == "gopher:");
BOOST_TEST(url("http://example.com").set_scheme("ftp").str() == "ftp://example.com");
BOOST_TEST(url("ws://example.com").set_scheme("gopher").str() == "gopher://example.com");
BOOST_TEST_THROWS(url().set_scheme("c@t"), invalid_part);
BOOST_TEST_THROWS(url().set_scheme("1cat"), invalid_part);
BOOST_TEST_THROWS(url().set_scheme("http:s"), invalid_part);
}
void
testOrigin()
{
@@ -148,15 +130,15 @@ public:
void
testUsername()
{
BOOST_TEST(url().username() == "");
BOOST_TEST(url().encoded_username() == "");
BOOST_TEST(url().set_user("").username() == "");
BOOST_TEST(url().user() == "");
BOOST_TEST(url().encoded_user() == "");
BOOST_TEST(url().set_user("").user() == "");
BOOST_TEST(url().set_user("user").str() == "//user@");
BOOST_TEST(url().set_encoded_user("user%20name").str() == "//user%20name@");
BOOST_TEST(url().set_encoded_user("user%3Aname").str() == "//user%3Aname@");
BOOST_TEST(url().set_encoded_user("user%3Aname").username() == "user:name");
BOOST_TEST(url().set_encoded_user("user%3Aname").user() == "user:name");
BOOST_TEST(url().set_encoded_user("user%40name").str() == "//user%40name@");
BOOST_TEST(url().set_encoded_user("user%40name").username() == "user@name");
BOOST_TEST(url().set_encoded_user("user%40name").user() == "user@name");
BOOST_TEST(url("http:").set_encoded_user("").str() == "http:");
BOOST_TEST(url("http://@").set_encoded_user("").str() == "http://");
@@ -170,31 +152,6 @@ public:
BOOST_TEST_THROWS(url().set_encoded_user("user name"), invalid_part);
}
void
testPassword()
{
BOOST_TEST(url().password() == "");
BOOST_TEST(url().encoded_password() == "");
BOOST_TEST(url().set_encoded_password("").password() == "");
BOOST_TEST(url().set_password("pass").str() == "//:pass@");
BOOST_TEST(url().set_encoded_password("%40pass").str() == "//:%40pass@");
BOOST_TEST(url().set_encoded_password("pass%20word").str() == "//:pass%20word@");
BOOST_TEST(url().set_encoded_password("pass%42word").str() == "//:pass%42word@");
BOOST_TEST(url("http:").set_encoded_password("").str() == "http:");
BOOST_TEST(url("http://@").set_encoded_password("").str() == "http://");
BOOST_TEST(url("http://x@").set_encoded_password("").str() == "http://x@");
BOOST_TEST(url("http://x@").set_encoded_password("y").str() == "http://x:y@");
BOOST_TEST(url("http://:@").set_encoded_password("").str() == "http://");
BOOST_TEST(url("http://:y@").set_password("pass").str() == "http://:pass@");
BOOST_TEST(url("http://x:y@").set_password("pass").str() == "http://x:pass@");
BOOST_TEST(url("http://x:pass@").set_password("y").str() == "http://x:y@");
BOOST_TEST(url("http://x:pass@example.com").set_password("y").str() == "http://x:y@example.com");
BOOST_TEST_THROWS(url().set_encoded_password("pass word"), invalid_part);
BOOST_TEST_THROWS(url().set_encoded_password(":pass"), invalid_part);
}
//------------------------------------------------------
void
@@ -232,41 +189,6 @@ public:
BOOST_TEST(url("http://x:y@z.com/").set_encoded_userinfo("").str() == "http://z.com/");
}
void
testUser()
{
BOOST_TEST(url().username() == "");
BOOST_TEST(url("//x/").username() == "");
BOOST_TEST(url("//x@/").username() == "x");
BOOST_TEST(url("//x:@/").username() == "x");
BOOST_TEST(url("//x:y@/").username() == "x");
BOOST_TEST(url("//:y@/").username() == "");
BOOST_TEST(url("//:@/").username() == "");
BOOST_TEST(url("//@/").username() == "");
BOOST_TEST(url("//%3A@/").username() == ":");
BOOST_TEST(url().encoded_username() == "");
BOOST_TEST(url("//x/").encoded_username() == "");
BOOST_TEST(url("//x@/").encoded_username() == "x");
BOOST_TEST(url("//x:@/").encoded_username() == "x");
BOOST_TEST(url("//x:y@/").encoded_username() == "x");
BOOST_TEST(url("//:y@/").encoded_username() == "");
BOOST_TEST(url("//:@/").encoded_username() == "");
BOOST_TEST(url("//@/").encoded_username() == "");
BOOST_TEST(url("//%3A@/").encoded_username() == "%3A");
BOOST_TEST(url("").set_user("").str() == "");
BOOST_TEST(url("").set_user("x").str() == "//x@");
BOOST_TEST(url("").set_user("x:").str() == "//x%3A@");
BOOST_TEST(url("").set_user("x:y").str() == "//x%3Ay@");
BOOST_TEST(url("//yy@").set_user("x").str() == "//x@");
BOOST_TEST(url("//:@").set_user("x").str() == "//x:@");
BOOST_TEST(url("//:p@").set_user("x").str() == "//x:p@");
//BOOST_TEST(url("//yy@").set_user("").str() == "");
BOOST_TEST(url("//:p@").set_user("x").str() == "//x:p@");
BOOST_TEST(url("//yy:p@").set_user("x").str() == "//x:p@");
}
//------------------------------------------------------
void
@@ -862,9 +784,238 @@ public:
//------------------------------------------------------
#endif
//--------------------------------------------
void
testScheme()
{
{
url u;
u.reserve(40);
BOOST_TEST(
u.set_scheme("http").str() == "http:");
}
url u;
BOOST_TEST(u.set_scheme("").str() == "");
BOOST_TEST(u.set_scheme(scheme::none).str() == "");
BOOST_TEST(u.set_scheme("http").str() == "http:");
BOOST_TEST(u.scheme_id() == scheme::http);
BOOST_TEST_THROWS(
u.set_scheme("http:"), std::invalid_argument);
BOOST_TEST(u.str() == "http:");
BOOST_TEST(u.scheme_id() == scheme::http);
BOOST_TEST_THROWS(
u.set_scheme("1http"), std::invalid_argument);
BOOST_TEST_THROWS(
u.set_scheme(scheme::unknown), std::invalid_argument);
BOOST_TEST(u.scheme_id() == scheme::http);
BOOST_TEST(u.str() == "http:");
BOOST_TEST(u.scheme_id() == scheme::http);
BOOST_TEST(u.set_scheme("ftp").str() == "ftp:");
BOOST_TEST(u.scheme_id() == scheme::ftp);
BOOST_TEST(u.set_scheme(scheme::none).str() == "");
BOOST_TEST(u.scheme_id() == scheme::none);
BOOST_TEST(u.set_scheme(scheme::ws).str() == "ws:");
BOOST_TEST(u.scheme_id() == scheme::ws);
BOOST_TEST(u.set_scheme("").str() == "");
BOOST_TEST(u.scheme_id() == scheme::none);
BOOST_TEST(u.set_scheme("x").str() == "x:");
BOOST_TEST(u.scheme_id() == scheme::unknown);
u = parse_uri("http:/path/to/file.txt");
BOOST_TEST(u.set_scheme("").str() == "/path/to/file.txt");
}
//--------------------------------------------
void
testUser()
{
auto const clear = [](
string_view s1, string_view s2)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).clear_user().str() == s2);
else
BOOST_TEST(url(parse_uri(s1)
).clear_user().str() == s2);
};
auto const set = [](
string_view s1, string_view s2,
string_view s3)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).set_user(s2).str() == s3);
else
BOOST_TEST(url(parse_uri(s1)
).set_user(s2).str() == s3);
};
auto const enc = [](
string_view s1, string_view s2,
string_view s3)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).set_encoded_user(s2).str() == s3);
else
BOOST_TEST(url(parse_uri(s1)
).set_encoded_user(s2).str() == s3);
};
clear("", "");
clear("/x", "/x");
clear("//", "//");
clear("//x", "//x");
clear("//@", "//");
clear("//:@", "//:@");
clear("//x@", "//");
clear("//x@z", "//z");
clear("//x:@", "//:@");
clear("//x:y@", "//:y@");
clear("//x:y@z", "//:y@z");
clear("ws:", "ws:");
clear("ws:/x", "ws:/x");
clear("ws://", "ws://");
clear("ws://x", "ws://x");
clear("ws://@", "ws://");
clear("ws://:@", "ws://:@");
clear("ws://x@", "ws://");
clear("ws://x@z", "ws://z");
clear("ws://x:@", "ws://:@");
clear("ws://x:y@", "ws://:y@");
clear("ws://x:y@z", "ws://:y@z");
set("", "", "//@");
set("/y", "", "//@/y");
set("//", "", "//@");
set("//y", "", "//@y");
set("//@", "", "//@");
set("//:@", "", "//:@");
set("//y@", "", "//@");
set("//y@z", "", "//@z");
set("//y:@", "", "//:@");
set("//y:z@", "", "//:z@");
set("//a:b@c", "", "//:b@c");
set("ws:", "", "ws://@");
set("ws:/y", "", "ws://@/y");
set("ws://", "", "ws://@");
set("ws://y", "", "ws://@y");
set("ws://@", "", "ws://@");
set("ws://:@", "", "ws://:@");
set("ws://y@", "", "ws://@");
set("ws://y@z", "", "ws://@z");
set("ws://y:@", "", "ws://:@");
set("ws://y:z@", "", "ws://:z@");
set("ws://a:b@c", "", "ws://:b@c");
set("", "x", "//x@");
set("/y", "x", "//x@/y");
set("//", "x", "//x@");
set("//y", "x", "//x@y");
set("//@", "x", "//x@");
set("//:@", "x", "//x:@");
set("//y@", "x", "//x@");
set("//y@z", "x", "//x@z");
set("//y:@", "x", "//x:@");
set("//y:z@", "x", "//x:z@");
set("//a:b@c", "x", "//x:b@c");
set("ws:", "x", "ws://x@");
set("ws:/y", "x", "ws://x@/y");
set("ws://", "x", "ws://x@");
set("ws://y", "x", "ws://x@y");
set("ws://@", "x", "ws://x@");
set("ws://:@", "x", "ws://x:@");
set("ws://y@", "x", "ws://x@");
set("ws://y@z", "x", "ws://x@z");
set("ws://y:@", "x", "ws://x:@");
set("ws://y:z@", "x", "ws://x:z@");
set("ws://a:b@c", "x", "ws://x:b@c");
enc("", "%41", "//%41@");
enc("/y", "%41", "//%41@/y");
enc("//", "%41", "//%41@");
enc("//y", "%41", "//%41@y");
enc("//@", "%41", "//%41@");
enc("//:@", "%41", "//%41:@");
enc("//y@", "%41", "//%41@");
enc("//y@z", "%41", "//%41@z");
enc("//y:@", "%41", "//%41:@");
enc("//y:z@", "%41", "//%41:z@");
enc("//a:b@c", "%41", "//%41:b@c");
enc("ws:", "%41", "ws://%41@");
enc("ws:/y", "%41", "ws://%41@/y");
enc("ws://", "%41", "ws://%41@");
enc("ws://y", "%41", "ws://%41@y");
enc("ws://@", "%41", "ws://%41@");
enc("ws://:@", "%41", "ws://%41:@");
enc("ws://y@", "%41", "ws://%41@");
enc("ws://y@z", "%41", "ws://%41@z");
enc("ws://y:@", "%41", "ws://%41:@");
enc("ws://y:z@", "%41", "ws://%41:z@");
enc("ws://a:b@c", "%41", "ws://%41:b@c");
BOOST_TEST_THROWS(url().set_encoded_user(
"%2"), std::invalid_argument);
}
//--------------------------------------------
void
testPassword()
{
auto const clear = [](
string_view s1, string_view s2)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).clear_password().str() == s2);
else
BOOST_TEST(url(parse_uri(s1)
).clear_password().str() == s2);
};
auto const set = [](
string_view s1, string_view s2,
string_view s3)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).set_password(s2).str() == s3);
else
BOOST_TEST(url(parse_uri(s1)
).set_password(s2).str() == s3);
};
auto const enc = [](
string_view s1, string_view s2,
string_view s3)
{
if(s1.empty() || s1.starts_with('/'))
BOOST_TEST(url(parse_relative_ref(
s1)).set_encoded_password(s2).str() == s3);
else
BOOST_TEST(url(parse_uri(s1)
).set_encoded_password(s2).str() == s3);
};
}
//--------------------------------------------
void
run()
{
testScheme();
testUser();
testPassword();
#if 0
testObservers();
@@ -878,7 +1029,6 @@ public:
testPassword();
testUserinfo();
testUser();
testHostAndPort();
testHost();
testPort();

View File

@@ -36,14 +36,14 @@ public:
{
error_code ec;
auto const u = urls::parse_uri(
"http://username:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag",
"http://user:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag",
ec);
if(! BOOST_TEST(! ec))
return;
BOOST_TEST(u.encoded_origin() ==
"http://username:pass@www.boost.org:8080");
"http://user:pass@www.boost.org:8080");
BOOST_TEST(u.scheme() == "http");
BOOST_TEST(u.username() == "username");
BOOST_TEST(u.user() == "user");
BOOST_TEST(u.password() == "pass");
BOOST_TEST(u.host() == "www.boost.org");
BOOST_TEST(u.port() == "8080");
@@ -84,12 +84,24 @@ public:
"http://");
BOOST_TEST(u.has_scheme());
BOOST_TEST(u.scheme() == "http");
BOOST_TEST(
u.scheme_id() == scheme::http);
}
{
auto u = parse_uri(
"ou812://");
BOOST_TEST(u.has_scheme());
BOOST_TEST(u.scheme() == "ou812");
BOOST_TEST(
u.scheme_id() == scheme::unknown);
}
{
auto u = parse_relative_ref(
"/x");
BOOST_TEST(! u.has_scheme());
BOOST_TEST(u.scheme() == "");
BOOST_TEST(
u.scheme_id() == scheme::none);
}
}
@@ -187,8 +199,8 @@ public:
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == "");
BOOST_TEST(u.userinfo() == "");
BOOST_TEST(u.encoded_username() == "");
BOOST_TEST(u.username() == "");
BOOST_TEST(u.encoded_user() == "");
BOOST_TEST(u.user() == "");
BOOST_TEST(u.has_password() == false);
BOOST_TEST(u.encoded_password() == "");
BOOST_TEST(u.password() == "");
@@ -198,8 +210,8 @@ public:
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == ":");
BOOST_TEST(u.userinfo() == ":");
BOOST_TEST(u.encoded_username() == "");
BOOST_TEST(u.username() == "");
BOOST_TEST(u.encoded_user() == "");
BOOST_TEST(u.user() == "");
BOOST_TEST(u.has_password() == true);
BOOST_TEST(u.encoded_password() == "");
BOOST_TEST(u.password() == "");
@@ -208,8 +220,8 @@ public:
auto u = parse_uri("x://a%41:@");
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == "a%41:");
BOOST_TEST(u.encoded_username() == "a%41");
BOOST_TEST(u.username() == "aA");
BOOST_TEST(u.encoded_user() == "a%41");
BOOST_TEST(u.user() == "aA");
BOOST_TEST(u.has_password() == true);
BOOST_TEST(u.encoded_password() == "");
BOOST_TEST(u.password() == "");
@@ -218,8 +230,8 @@ public:
auto u = parse_uri("x://:b%42@");
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == ":b%42");
BOOST_TEST(u.encoded_username() == "");
BOOST_TEST(u.username() == "");
BOOST_TEST(u.encoded_user() == "");
BOOST_TEST(u.user() == "");
BOOST_TEST(u.has_password() == true);
BOOST_TEST(u.encoded_password() == "b%42");
BOOST_TEST(u.password() == "bB");
@@ -228,7 +240,7 @@ public:
auto u = parse_uri("x://a:b@");
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == "a:b");
BOOST_TEST(u.encoded_username() == "a");
BOOST_TEST(u.encoded_user() == "a");
BOOST_TEST(u.has_password() == true);
BOOST_TEST(u.encoded_password() == "b");
}
@@ -237,8 +249,8 @@ public:
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == "%3a:%3a");
BOOST_TEST(u.userinfo() == ":::");
BOOST_TEST(u.encoded_username() == "%3a");
BOOST_TEST(u.username() == ":");
BOOST_TEST(u.encoded_user() == "%3a");
BOOST_TEST(u.user() == ":");
BOOST_TEST(u.has_password() == true);
BOOST_TEST(u.encoded_password() == "%3a");
BOOST_TEST(u.password() == ":");
@@ -248,8 +260,8 @@ public:
BOOST_TEST(u.has_userinfo());
BOOST_TEST(u.encoded_userinfo() == "%2525");
BOOST_TEST(u.userinfo() == "%25");
BOOST_TEST(u.encoded_username() == "%2525");
BOOST_TEST(u.username() == "%25");
BOOST_TEST(u.encoded_user() == "%2525");
BOOST_TEST(u.user() == "%25");
BOOST_TEST(u.has_password() == false);
BOOST_TEST(u.encoded_password() == "");
BOOST_TEST(u.password() == "");
@@ -648,7 +660,7 @@ public:
testCollect()
{
string_view s =
"http://username:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag";
"http://user:pass@www.boost.org:8080/x/y/z?a=b&c=3#frag";
std::shared_ptr<url_view const> sp;
{
auto const u = urls::parse_uri(s);