@@ -3399,6 +3399,56 @@ fn stream_decoder_write_failure_preserves_pending_input() {
33993399 assert_eq ! ( decoder. get_ref( ) . output, b"hi" ) ;
34003400}
34013401
3402+ #[ cfg( feature = "stream" ) ]
3403+ #[ test]
3404+ fn stream_decoder_direct_write_processes_multiple_quads ( ) {
3405+ let mut decoder = Decoder :: new ( Vec :: new ( ) , STANDARD ) ;
3406+
3407+ let written = decoder. write ( b"aGVsbG8=" ) . unwrap ( ) ;
3408+ assert_eq ! ( written, 8 ) ;
3409+ assert_eq ! ( decoder. buffered_output_len( ) , 5 ) ;
3410+ assert ! ( decoder. has_terminal_padding( ) ) ;
3411+
3412+ let decoded = decoder. finish ( ) . unwrap ( ) ;
3413+ assert_eq ! ( decoded, b"hello" ) ;
3414+ }
3415+
3416+ #[ cfg( feature = "stream" ) ]
3417+ #[ test]
3418+ fn stream_decoder_direct_write_continues_after_pending_quad ( ) {
3419+ let mut decoder = Decoder :: new ( Vec :: new ( ) , STANDARD ) ;
3420+
3421+ assert_eq ! ( decoder. write( b"a" ) . unwrap( ) , 1 ) ;
3422+ assert_eq ! ( decoder. pending_len( ) , 1 ) ;
3423+
3424+ let written = decoder. write ( b"GVsbG8=" ) . unwrap ( ) ;
3425+ assert_eq ! ( written, 7 ) ;
3426+ assert_eq ! ( decoder. pending_len( ) , 0 ) ;
3427+ assert_eq ! ( decoder. buffered_output_len( ) , 5 ) ;
3428+ assert ! ( decoder. has_terminal_padding( ) ) ;
3429+
3430+ let decoded = decoder. finish ( ) . unwrap ( ) ;
3431+ assert_eq ! ( decoded, b"hello" ) ;
3432+ }
3433+
3434+ #[ cfg( feature = "stream" ) ]
3435+ #[ test]
3436+ fn stream_decoder_direct_write_reports_partial_progress_for_large_input ( ) {
3437+ let input = vec ! [ b'a' ; 1500 ] ;
3438+ let encoded = STANDARD . encode_vec ( & input) . unwrap ( ) ;
3439+ let mut decoder = Decoder :: new ( Vec :: new ( ) , STANDARD ) ;
3440+
3441+ let written = decoder. write ( & encoded) . unwrap ( ) ;
3442+ assert_eq ! ( written, 1364 ) ;
3443+ assert_eq ! ( decoder. buffered_output_len( ) , 1023 ) ;
3444+ assert_eq ! ( decoder. pending_len( ) , 0 ) ;
3445+ assert ! ( decoder. has_buffered_output( ) ) ;
3446+
3447+ decoder. write_all ( & encoded[ written..] ) . unwrap ( ) ;
3448+ let decoded = decoder. finish ( ) . unwrap ( ) ;
3449+ assert_eq ! ( decoded, input) ;
3450+ }
3451+
34023452#[ cfg( feature = "stream" ) ]
34033453#[ test]
34043454fn stream_decoder_direct_write_reports_partial_progress ( ) {
0 commit comments