use hyper64::{STANDARD, URL_SAFE_NO_PAD, decode, decode_in_place, encode};
const RFC_VECTORS: &[(&[u8], &str)] = &[
(b"", ""),
(b"f", "Zg=="),
(b"fo", "Zm8="),
(b"foo", "Zm9v"),
(b"foob", "Zm9vYg=="),
(b"fooba", "Zm9vYmE="),
(b"foobar", "Zm9vYmFy"),
];
#[test]
fn test_rfc4648_encoding() {
for &(input, expected) in RFC_VECTORS {
let encoded = encode(input);
assert_eq!(encoded, expected, "Encoding failed for {:?}", input);
}
}
#[test]
fn test_rfc4648_decoding() {
for &(expected, encoded) in RFC_VECTORS {
let decoded = decode(encoded).expect("Decoding failed");
assert_eq!(&decoded[..], expected, "Decoding mismatch for {}", encoded);
}
}
#[test]
fn test_rfc4648_in_place_decoding() {
for &(expected, encoded) in RFC_VECTORS {
let mut buf = encoded.as_bytes().to_vec();
let decoded = decode_in_place(&mut buf, &STANDARD).expect("In-place decoding failed");
assert_eq!(decoded, expected, "In-place mismatch for {}", encoded);
}
}
#[test]
fn test_url_safe_no_pad() {
let input = b"\xFB\xFF\xBF";
let encoded = hyper64::encode_config(input, &URL_SAFE_NO_PAD);
assert_eq!(encoded, "-_-_");
let decoded = hyper64::decode_config(&encoded, &URL_SAFE_NO_PAD).unwrap();
assert_eq!(&decoded[..], input);
}
#[test]
fn test_invalid_padding_rejected() {
let res = decode("Zh==");
assert!(res.is_err(), "Non-zero padding bits should be rejected");
}