use super::{assert_origin_form, parse_graceful, parse_strict};
use crate::uri::{Component, ParseError, UriInner};
#[test]
fn asterisk_only_graceful() {
let u = parse_graceful("*").unwrap();
assert!(matches!(u.inner, UriInner::Asterisk));
}
#[test]
fn asterisk_only_strict() {
let u = parse_strict("*").unwrap();
assert!(matches!(u.inner, UriInner::Asterisk));
}
#[test]
fn asterisk_only_matches_exactly() {
let r = parse_graceful("*foo");
assert!(matches!(
r,
Err(ParseError::InvalidComponent(Component::Scheme))
));
}
#[test]
fn path_only() {
let u = parse_graceful("/foo").unwrap();
assert_origin_form(&u, "/foo", None, None);
}
#[test]
fn root_only() {
let u = parse_graceful("/").unwrap();
assert_origin_form(&u, "/", None, None);
}
#[test]
fn multi_segment_path() {
let u = parse_graceful("/a/b/c").unwrap();
assert_origin_form(&u, "/a/b/c", None, None);
}
#[test]
fn path_with_query() {
let u = parse_graceful("/foo?bar=baz").unwrap();
assert_origin_form(&u, "/foo", Some("bar=baz"), None);
}
#[test]
fn path_with_fragment() {
let u = parse_graceful("/foo#section").unwrap();
assert_origin_form(&u, "/foo", None, Some("section"));
}
#[test]
fn path_with_query_and_fragment() {
let u = parse_graceful("/foo?bar=baz#frag").unwrap();
assert_origin_form(&u, "/foo", Some("bar=baz"), Some("frag"));
}
#[test]
fn empty_query_distinct_from_none() {
let with = parse_graceful("/foo?").unwrap();
assert_origin_form(&with, "/foo", Some(""), None);
let without = parse_graceful("/foo").unwrap();
assert_origin_form(&without, "/foo", None, None);
}
#[test]
fn empty_fragment_distinct_from_none() {
let with = parse_graceful("/foo#").unwrap();
assert_origin_form(&with, "/foo", None, Some(""));
let without = parse_graceful("/foo").unwrap();
assert_origin_form(&without, "/foo", None, None);
}
#[test]
fn empty_query_and_empty_fragment() {
let u = parse_graceful("/foo?#").unwrap();
assert_origin_form(&u, "/foo", Some(""), Some(""));
}
#[test]
fn only_first_question_mark_ends_path() {
let u = parse_graceful("/foo?a=b?c=d").unwrap();
assert_origin_form(&u, "/foo", Some("a=b?c=d"), None);
}
#[test]
fn fragment_containing_question_mark() {
let u = parse_graceful("/foo#frag?x").unwrap();
assert_origin_form(&u, "/foo", None, Some("frag?x"));
}
#[test]
fn hash_inside_query_starts_fragment() {
let u = parse_graceful("/p?q#f").unwrap();
assert_origin_form(&u, "/p", Some("q"), Some("f"));
}
#[test]
fn dot_segments_preserved_literally() {
for s in ["/.", "/..", "/a/./b", "/a/../b", "/./", "/../"] {
let u = parse_graceful(s).unwrap();
assert_origin_form(&u, s, None, None);
}
}
#[test]
fn empty_segments_preserved() {
let u = parse_graceful("/foo//bar").unwrap();
assert_origin_form(&u, "/foo//bar", None, None);
}
#[test]
fn trailing_slash_preserved() {
let u = parse_graceful("/foo/").unwrap();
assert_origin_form(&u, "/foo/", None, None);
}