///|
test "uri validator accepts https absolute uri" {
assert_true(
validate_uri_reference("https://example.com/problems/x")
.unwrap()
.is_absolute(),
)
}
///|
test "uri validator accepts urn" {
assert_true(
validate_uri_reference("urn:example:problem").unwrap().is_absolute(),
)
}
///|
test "uri validator accepts tag uri" {
assert_true(
validate_uri_reference("tag:example.com,2026:error").unwrap().is_absolute(),
)
}
///|
test "uri validator accepts about blank" {
assert_true(validate_uri_reference("about:blank").unwrap().is_absolute())
}
///|
test "uri validator accepts absolute path reference" {
assert_true(
validate_uri_reference("/about/problem/123").unwrap().is_relative(),
)
}
///|
test "uri validator accepts empty reference" {
assert_true(validate_uri_reference("").unwrap().is_relative())
}
///|
test "uri validator rejects spaces" {
assert_true(
validate_uri_reference("bad uri")
is Err(ProblemError(_, InvalidUriReference, _, _)),
)
}
///|
test "uri validator rejects controls" {
assert_true(validate_uri_reference("x\n") is Err(_))
}
///|
test "uri validator rejects short percent encoding" {
assert_true(
validate_uri_reference("/x%2")
is Err(ProblemError(_, InvalidPercentEncoding, _, _)),
)
}
///|
test "uri validator rejects nonhex percent encoding" {
assert_true(validate_uri_reference("/x%zz") is Err(_))
}
///|
test "uri validator rejects a digit-starting scheme" {
assert_true(validate_uri_reference("1http:x") is Err(_))
}
///|
test "uri validator accepts scheme punctuation" {
assert_true(is_absolute_uri_reference("web+demo.test:x"))
}