use rsurl::Url;
#[test]
fn ipv6_literal_with_port() {
let u = Url::parse("http://[::1]:8080/path?q=1").expect("ipv6 url parses");
assert_eq!(u.scheme, "http");
assert_eq!(u.path, "/path?q=1");
assert!(
u.host.contains("::1"),
"host should retain ipv6 literal, got {:?}",
u.host,
);
}
#[test]
fn percent_encoded_path_passthrough() {
let u = Url::parse("http://example.com/foo%20bar/%2Fbaz?a=%26b").unwrap();
assert_eq!(u.scheme, "http");
assert_eq!(u.host, "example.com");
assert_eq!(u.path, "/foo%20bar/%2Fbaz?a=%26b");
}
#[test]
fn query_kept_fragment_stripped() {
let u = Url::parse("http://h/p?x=1&y=2#section").unwrap();
assert_eq!(u.path, "/p?x=1&y=2");
}
#[test]
fn missing_path_defaults_to_slash() {
let u = Url::parse("http://example.com").unwrap();
assert_eq!(u.path, "/");
assert_eq!(u.port, 80);
}
#[test]
fn default_https_port_and_explicit_override() {
assert_eq!(Url::parse("https://h/").unwrap().port, 443);
assert_eq!(Url::parse("https://h:8443/").unwrap().port, 8443);
}
#[test]
fn userinfo_with_password() {
let u = Url::parse("http://alice:s%3Acret@h/p").unwrap();
assert_eq!(u.userinfo.as_deref(), Some("alice:s%3Acret"));
assert_eq!(u.host, "h");
assert_eq!(u.path, "/p");
}
#[test]
fn rejects_empty_host() {
assert!(Url::parse("http:///path").is_err());
}
#[test]
fn rejects_bare_path() {
assert!(Url::parse("/just/a/path").is_err());
}