///|
test "parse known Content-Range" {
assert_str_eq(
serialize_content_range(parse_content_range("bytes 0-499/1234").unwrap()),
"bytes 0-499/1234",
)
}
///|
test "parse second Content-Range example" {
assert_str_eq(
serialize_content_range(parse_content_range("bytes 500-999/1234").unwrap()),
"bytes 500-999/1234",
)
}
///|
test "parse unknown complete length" {
assert_str_eq(
serialize_content_range(parse_content_range("bytes 42-1233/*").unwrap()),
"bytes 42-1233/*",
)
}
///|
test "parse unsatisfied Content-Range" {
assert_str_eq(
serialize_content_range(parse_content_range("bytes */1234").unwrap()),
"bytes */1234",
)
}
///|
test "Content-Range unit is case insensitive" {
assert_str_eq(
serialize_content_range(parse_content_range("BYTES 0-0/1").unwrap()),
"bytes 0-0/1",
)
}
///|
test "Content-Range rejects last before first" {
assert_true(
parse_content_range("bytes 10-9/20")
is Err(RangeError(_, LastBeforeFirst, _, _)),
)
}
///|
test "Content-Range rejects too small complete length" {
assert_true(
parse_content_range("bytes 0-499/499")
is Err(RangeError(_, InvalidCompleteLength, _, _)),
)
}
///|
test "Content-Range allows exact containing length" {
assert_true(parse_content_range("bytes 0-499/500") is Ok(_))
}
///|
test "unsatisfied Content-Range requires known length" {
assert_true(parse_content_range("bytes */*") is Err(_))
}
///|
test "unknown Content-Range unit preserves response" {
assert_str_eq(
serialize_content_range(parse_content_range("items 1-2/10").unwrap()),
"items 1-2/10",
)
}
///|
test "416 helper creates bytes unsatisfied value" {
assert_str_eq(
serialize_content_range(unsatisfied_content_range(1234L).unwrap()),
"bytes */1234",
)
}
///|
test "416 helper rejects negative length" {
assert_true(unsatisfied_content_range(-1L) is Err(_))
}
///|
test "Content-Range rejects missing slash" {
assert_true(parse_content_range("bytes 0-1") is Err(_))
}
///|
test "Content-Range rejects overflow" {
assert_true(
parse_content_range("bytes 0-9223372036854775808/*")
is Err(RangeError(_, IntegerOverflow, _, _)),
)
}