@@ -183,51 +183,6 @@ impl Display for BlockParam {
183183 }
184184}
185185
186- #[ cfg( test) ]
187- mod tests {
188- use super :: * ;
189- use proptest:: prelude:: * ;
190- use rstest:: rstest;
191-
192- #[ rstest]
193- #[ case( "latest" , BlockParam :: Latest ) ]
194- #[ case( "pending" , BlockParam :: Pending ) ]
195- #[ case( "finalized" , BlockParam :: Finalized ) ]
196- #[ case( "0" , BlockParam :: BlockHeight ( 0 ) ) ]
197- #[ case( "42" , BlockParam :: BlockHeight ( 42 ) ) ]
198- #[ case( "999999999" , BlockParam :: BlockHeight ( 999_999_999 ) ) ]
199- fn from_str_valid ( #[ case] input : & str , #[ case] expected : BlockParam ) {
200- assert_eq ! ( BlockParam :: from_str( input) . unwrap( ) , expected) ;
201- }
202-
203- #[ rstest]
204- #[ case( "" ) ]
205- #[ case( "nonsense!@#" ) ]
206- #[ case( "LATEST" ) ]
207- fn from_str_invalid ( #[ case] input : & str ) {
208- assert ! ( BlockParam :: from_str( input) . is_err( ) ) ;
209- }
210-
211- proptest ! {
212- #[ test]
213- fn block_height_display_fromstr_roundtrip( height: u64 ) {
214- let param = BlockParam :: BlockHeight ( height) ;
215- let s = param. to_string( ) ;
216- let parsed = BlockParam :: from_str( & s) . unwrap( ) ;
217- prop_assert_eq!( parsed, BlockParam :: BlockHeight ( height) ) ;
218- }
219-
220- #[ test]
221- fn hash_display_fromstr_roundtrip( bytes in proptest:: collection:: vec( any:: <u8 >( ) , 32 ) ) {
222- let arr: [ u8 ; 32 ] = bytes. try_into( ) . unwrap( ) ;
223- let param = BlockParam :: Hash ( H256 ( arr) ) ;
224- let s = param. to_string( ) ;
225- let parsed = BlockParam :: from_str( & s) . unwrap( ) ;
226- prop_assert_eq!( parsed, param) ;
227- }
228- }
229- }
230-
231186// #[cfg(test)]
232187// mod tests {
233188// use crate::routes;
@@ -379,3 +334,53 @@ mod tests {
379334// Ok(())
380335// }
381336// }
337+
338+ #[ cfg( test) ]
339+ mod tests {
340+ use super :: * ;
341+ use proptest:: prelude:: * ;
342+
343+ proptest ! {
344+ #[ test]
345+ fn block_param_roundtrip_keywords( variant in prop_oneof![
346+ Just ( "latest" ) ,
347+ Just ( "pending" ) ,
348+ Just ( "finalized" ) ,
349+ ] ) {
350+ let parsed = BlockParam :: from_str( variant) . unwrap( ) ;
351+ let displayed = parsed. to_string( ) ;
352+ prop_assert_eq!( displayed. as_str( ) , variant) ;
353+
354+ let reparsed = BlockParam :: from_str( & displayed) . unwrap( ) ;
355+ prop_assert_eq!( reparsed, parsed) ;
356+ }
357+
358+ #[ test]
359+ fn block_param_roundtrip_height( height: u64 ) {
360+ let param = BlockParam :: BlockHeight ( height) ;
361+ let displayed = param. to_string( ) ;
362+ let reparsed = BlockParam :: from_str( & displayed) . unwrap( ) ;
363+ prop_assert_eq!( reparsed, param) ;
364+ }
365+
366+ #[ test]
367+ fn block_param_roundtrip_hash( bytes in proptest:: collection:: vec( any:: <u8 >( ) , 32 ) ) {
368+ let mut arr = [ 0_u8 ; 32 ] ;
369+ arr. copy_from_slice( & bytes) ;
370+ let param = BlockParam :: Hash ( H256 ( arr) ) ;
371+ let displayed = param. to_string( ) ;
372+ let reparsed = BlockParam :: from_str( & displayed) . unwrap( ) ;
373+ prop_assert_eq!( reparsed, param) ;
374+ }
375+
376+ #[ test]
377+ fn block_param_rejects_invalid_base58( s in "[^0-9a-zA-Z]+" ) {
378+ if s. parse:: <u64 >( ) . is_err( )
379+ && !matches!( s. as_str( ) , "latest" | "pending" | "finalized" )
380+ {
381+ let result = BlockParam :: from_str( & s) ;
382+ prop_assert!( result. is_err( ) ) ;
383+ }
384+ }
385+ }
386+ }
0 commit comments