mod common;
use common::WEBP;
use image::{ExtendedColorType, ImageEncoder};
use webp::WebpEncoder;
#[test]
fn encode_rejects_wrong_length_buffer() {
let mut out = Vec::new();
let encoder = WebpEncoder::new(&mut out);
let result = encoder.write_image(&[0, 0, 0], 1, 1, ExtendedColorType::Rgba8);
assert!(result.is_err(), "wrong-length buffer should be rejected");
}
#[test]
fn encode_rejects_zero_dimensions() {
let mut out = Vec::new();
let encoder = WebpEncoder::new(&mut out);
let result = encoder.write_image(&[], 0, 0, ExtendedColorType::Rgb8);
assert!(result.is_err(), "zero dimensions should be rejected");
}
#[test]
fn encode_rejects_unsupported_color_type() {
let mut out = Vec::new();
let encoder = WebpEncoder::new(&mut out);
let result = encoder.write_image(&[0; 6], 1, 1, ExtendedColorType::Rgb16);
assert!(result.is_err(), "16-bit input should be rejected");
}
#[test]
fn decode_rejects_empty_input() {
assert!(webp::decode(&[]).is_err(), "empty input should not decode");
}
#[test]
fn decode_rejects_garbage_input() {
assert!(
webp::decode(b"this is definitely not a webp file").is_err(),
"non-WebP bytes should not decode"
);
}
#[test]
fn probe_rejects_truncated_webp() {
let bytes = std::fs::read(WEBP).expect("read assets/image.webp");
let truncated = &bytes[..16];
assert!(webp::probe(truncated).is_err(), "truncated WebP should fail to probe");
}