@@ -3741,3 +3741,119 @@ Transaction successfully executed.
37413741
37423742"# ] ] ) ;
37433743} ) ;
3744+
3745+ // Tests for negative number argument parsing
3746+ // Ensures that negative numbers in function arguments are properly parsed
3747+ // instead of being treated as command flags
3748+
3749+ // Test that cast call accepts negative numbers as function arguments
3750+ casttest ! ( cast_call_negative_numbers, |_prj, cmd| {
3751+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3752+ // Test with negative int parameter - should not treat -456789 as a flag
3753+ cmd. args( [
3754+ "call" ,
3755+ "0xAbCdEf1234567890aBcDeF1234567890aBcDeF12" ,
3756+ "processValue(int128)" ,
3757+ "-456789" ,
3758+ "--rpc-url" ,
3759+ rpc. as_str( ) ,
3760+ ] )
3761+ . assert_success( ) ;
3762+ } ) ;
3763+
3764+ // Test negative numbers with multiple parameters
3765+ casttest ! ( cast_call_multiple_negative_numbers, |_prj, cmd| {
3766+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3767+ cmd. args( [
3768+ "call" ,
3769+ "--rpc-url" ,
3770+ rpc. as_str( ) ,
3771+ "0xDeaDBeeFcAfEbAbEfAcEfEeDcBaDbEeFcAfEbAbE" ,
3772+ "calculateDelta(int64,int32,uint16)" ,
3773+ "-987654321" ,
3774+ "-42" ,
3775+ "65535" ,
3776+ ] )
3777+ . assert_success( ) ;
3778+ } ) ;
3779+
3780+ // Test negative numbers mixed with flags
3781+ casttest ! ( cast_call_negative_with_flags, |_prj, cmd| {
3782+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3783+ cmd. args( [
3784+ "call" ,
3785+ "--trace" , // flag before
3786+ "0x9876543210FeDcBa9876543210FeDcBa98765432" ,
3787+ "updateBalance(int256)" ,
3788+ "-777888" ,
3789+ "--rpc-url" ,
3790+ rpc. as_str( ) , // flag after
3791+ ] )
3792+ . assert_success( ) ;
3793+ } ) ;
3794+
3795+ // Test that actual invalid flags are still caught
3796+ casttest ! ( cast_call_invalid_flag_still_caught, |_prj, cmd| {
3797+ cmd. args( [
3798+ "call" ,
3799+ "--invalid-flag" , // This should be caught as invalid
3800+ "0x5555555555555555555555555555555555555555" ,
3801+ ] )
3802+ . assert_failure( )
3803+ . stderr_eq( str ![ [ r#"
3804+ error: unexpected argument '--invalid-flag' found
3805+
3806+ tip: to pass '--invalid-flag' as a value, use '-- --invalid-flag'
3807+
3808+ Usage: cast[..] call [OPTIONS] [TO] [SIG] [ARGS]... [COMMAND]
3809+
3810+ For more information, try '--help'.
3811+
3812+ "# ] ] ) ;
3813+ } ) ;
3814+
3815+ // Test cast estimate with negative numbers
3816+ casttest ! ( cast_estimate_negative_numbers, |_prj, cmd| {
3817+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3818+ cmd. args( [
3819+ "estimate" ,
3820+ "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb" ,
3821+ "rebalance(int64)" ,
3822+ "-8888" ,
3823+ "--rpc-url" ,
3824+ rpc. as_str( ) ,
3825+ ] )
3826+ . assert_success( ) ;
3827+ } ) ;
3828+
3829+ // Test cast mktx with negative numbers
3830+ casttest ! ( cast_mktx_negative_numbers, |_prj, cmd| {
3831+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3832+ cmd. args( [
3833+ "mktx" ,
3834+ "0x1111111111111111111111111111111111111111" ,
3835+ "settleDebt(int256)" ,
3836+ "-15000" ,
3837+ "--private-key" ,
3838+ "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" , // anvil wallet #0
3839+ "--rpc-url" ,
3840+ rpc. as_str( ) ,
3841+ "--gas-limit" ,
3842+ "100000" ,
3843+ ] )
3844+ . assert_success( ) ;
3845+ } ) ;
3846+
3847+ // Test cast access-list with negative numbers
3848+ casttest ! ( cast_access_list_negative_numbers, |_prj, cmd| {
3849+ let rpc = next_rpc_endpoint( NamedChain :: Sepolia ) ;
3850+ cmd. args( [
3851+ "access-list" ,
3852+ "0x9999999999999999999999999999999999999999" ,
3853+ "adjustPosition(int128)" ,
3854+ "-33333" ,
3855+ "--rpc-url" ,
3856+ rpc. as_str( ) ,
3857+ ] )
3858+ . assert_success( ) ;
3859+ } ) ;
0 commit comments