11use super :: * ;
22
3+ #[ cfg( feature = "png-optimize" ) ]
34fn fixture ( ) -> Vec < u8 > {
45 let mut out = Vec :: new ( ) ;
56 {
@@ -23,6 +24,7 @@ fn fixture() -> Vec<u8> {
2324 out
2425}
2526
27+ #[ cfg( feature = "png-optimize" ) ]
2628fn decoded ( bytes : & [ u8 ] ) -> Vec < u8 > {
2729 let mut reader = :: png:: Decoder :: new ( std:: io:: Cursor :: new ( bytes) )
2830 . read_info ( )
@@ -33,6 +35,7 @@ fn decoded(bytes: &[u8]) -> Vec<u8> {
3335 pixels
3436}
3537
38+ #[ cfg( feature = "png-optimize" ) ]
3639#[ test]
3740fn png_derivative_is_smaller_preserves_hidden_rgb_and_metadata_and_original ( ) {
3841 let original = fixture ( ) ;
@@ -55,6 +58,7 @@ fn png_derivative_is_smaller_preserves_hidden_rgb_and_metadata_and_original() {
5558 assert ! ( optimize_png_lossless( & optimized) . is_none( ) ) ;
5659}
5760
61+ #[ cfg( feature = "png-optimize" ) ]
5862#[ test]
5963fn animation_malformed_non_png_and_excessive_dimensions_are_skipped ( ) {
6064 assert ! ( optimize_png_lossless( b"jpeg" ) . is_none( ) ) ;
@@ -77,3 +81,26 @@ fn animation_malformed_non_png_and_excessive_dimensions_are_skipped() {
7781 giant[ 16 ..20 ] . copy_from_slice ( & u32:: MAX . to_be_bytes ( ) ) ;
7882 assert ! ( optimize_png_lossless( & giant) . is_none( ) ) ;
7983}
84+
85+ #[ test]
86+ fn non_png_input_is_skipped_in_every_configuration ( ) {
87+ assert ! ( optimize_png_lossless( b"jpeg" ) . is_none( ) ) ;
88+ assert ! ( optimize_png_lossless( b"\x89 PNG\r \n \x1a \n " ) . is_none( ) ) ;
89+ }
90+
91+ // Without `png-optimize` the helper is a passthrough signal: `None` even for a
92+ // valid, compressible PNG, so callers keep (and size-check) the original.
93+ #[ cfg( not( feature = "png-optimize" ) ) ]
94+ #[ test]
95+ fn valid_png_is_passed_through_without_the_feature ( ) {
96+ let mut out = Vec :: new ( ) ;
97+ {
98+ let mut encoder = :: png:: Encoder :: new ( & mut out, 64 , 64 ) ;
99+ encoder. set_color ( :: png:: ColorType :: Rgba ) ;
100+ encoder. set_depth ( :: png:: BitDepth :: Eight ) ;
101+ encoder. set_compression ( :: png:: Compression :: Fast ) ;
102+ let mut writer = encoder. write_header ( ) . unwrap ( ) ;
103+ writer. write_image_data ( & vec ! [ 0u8 ; 64 * 64 * 4 ] ) . unwrap ( ) ;
104+ }
105+ assert ! ( optimize_png_lossless( & out) . is_none( ) ) ;
106+ }
0 commit comments