use super::*; /// A 2x1 PNG: one opaque red pixel, one half-transparent blue one. Written /// out by hand so the test depends on no fixture file. fn tiny_png() -> Vec { let mut bytes = Vec::new(); let encoder = image::codecs::png::PngEncoder::new(&mut bytes); let pixels: [u8; 8] = [255, 0, 0, 255, 0, 0, 255, 128]; image::ImageEncoder::write_image(encoder, &pixels, 2, 1, image::ExtendedColorType::Rgba8) .expect("encodes"); bytes } #[test] fn decodes_png_to_straight_alpha_rgba() { let brush = decode_image(&tiny_png()).expect("decodes"); assert_eq!((brush.image.width, brush.image.height), (2, 1)); assert_eq!(brush.image.format, ImageFormat::Rgba8); // Straight, not premultiplied: the backends premultiply on their own // terms, and saying so wrongly would darken every translucent pixel. assert_eq!(brush.image.alpha_type, ImageAlphaType::Alpha); assert_eq!(brush.image.data.as_ref(), &[255, 0, 0, 255, 0, 0, 255, 128]); } #[test] fn garbage_is_an_error_not_a_panic() { let error = decode_image(b"not an image at all").expect_err("rejects"); assert!(!error.is_empty()); }