@@ -2581,4 +2581,110 @@ mod test {
2581
2581
) ;
2582
2582
assert ! ( result_json[ "error" ] [ "initialization" ] != json!( null) ) ;
2583
2583
}
2584
+
2585
+ #[ test]
2586
+ fn test_eval_clarity3_contract_passes_with_clarity3_flag ( ) {
2587
+ // Arrange
2588
+ let db_name = format ! ( "/tmp/db_{}" , rand:: thread_rng( ) . gen :: <i32 >( ) ) ;
2589
+ invoke_command ( "test" , & [ "initialize" . to_string ( ) , db_name. clone ( ) ] ) ;
2590
+
2591
+ // Launch minimal contract at target for eval context.
2592
+ let launch_src = format ! (
2593
+ "/tmp/version-flag-eval-launch-{}.clar" ,
2594
+ rand:: thread_rng( ) . gen :: <i32 >( )
2595
+ ) ;
2596
+ fs:: write ( & launch_src, "(define-read-only (dummy) true)" ) . unwrap ( ) ;
2597
+ let _ = invoke_command (
2598
+ "test" ,
2599
+ & [
2600
+ "launch" . to_string ( ) ,
2601
+ "S1G2081040G2081040G2081040G208105NK8PE5.tenure" . to_string ( ) ,
2602
+ launch_src,
2603
+ db_name. clone ( ) ,
2604
+ ] ,
2605
+ ) ;
2606
+
2607
+ // Use a Clarity3-only native expression.
2608
+ let clar_path = format ! (
2609
+ "/tmp/version-flag-eval-c3-{}.clar" ,
2610
+ rand:: thread_rng( ) . gen :: <i32 >( )
2611
+ ) ;
2612
+ fs:: write ( & clar_path, "(get-tenure-info? time u1)" ) . unwrap ( ) ;
2613
+
2614
+ // Act
2615
+ let invoked = invoke_command (
2616
+ "test" ,
2617
+ & [
2618
+ "eval" . to_string ( ) ,
2619
+ "S1G2081040G2081040G2081040G208105NK8PE5.tenure" . to_string ( ) ,
2620
+ clar_path,
2621
+ db_name,
2622
+ "--clarity_version" . to_string ( ) ,
2623
+ "clarity3" . to_string ( ) ,
2624
+ ] ,
2625
+ ) ;
2626
+
2627
+ // Assert
2628
+ let exit_code = invoked. 0 ;
2629
+ let result_json = invoked. 1 . unwrap ( ) ;
2630
+ assert_eq ! (
2631
+ exit_code, 0 ,
2632
+ "expected eval to pass under Clarity 3, got: {}" ,
2633
+ result_json
2634
+ ) ;
2635
+ assert ! ( result_json[ "success" ] . as_bool( ) . unwrap( ) ) ;
2636
+ }
2637
+
2638
+ #[ test]
2639
+ fn test_eval_clarity3_contract_fails_with_clarity2_flag ( ) {
2640
+ // Arrange
2641
+ let db_name = format ! ( "/tmp/db_{}" , rand:: thread_rng( ) . gen :: <i32 >( ) ) ;
2642
+ invoke_command ( "test" , & [ "initialize" . to_string ( ) , db_name. clone ( ) ] ) ;
2643
+
2644
+ // Launch minimal contract at target for eval context.
2645
+ let launch_src = format ! (
2646
+ "/tmp/version-flag-eval-launch-{}.clar" ,
2647
+ rand:: thread_rng( ) . gen :: <i32 >( )
2648
+ ) ;
2649
+ fs:: write ( & launch_src, "(define-read-only (dummy) true)" ) . unwrap ( ) ;
2650
+ let _ = invoke_command (
2651
+ "test" ,
2652
+ & [
2653
+ "launch" . to_string ( ) ,
2654
+ "S1G2081040G2081040G2081040G208105NK8PE5.tenure" . to_string ( ) ,
2655
+ launch_src,
2656
+ db_name. clone ( ) ,
2657
+ ] ,
2658
+ ) ;
2659
+
2660
+ // Use a Clarity3-only native expression.
2661
+ let clar_path = format ! (
2662
+ "/tmp/version-flag-eval-c2-{}.clar" ,
2663
+ rand:: thread_rng( ) . gen :: <i32 >( )
2664
+ ) ;
2665
+ fs:: write ( & clar_path, "(get-tenure-info? time u1)" ) . unwrap ( ) ;
2666
+
2667
+ // Act
2668
+ let invoked = invoke_command (
2669
+ "test" ,
2670
+ & [
2671
+ "eval" . to_string ( ) ,
2672
+ "S1G2081040G2081040G2081040G208105NK8PE5.tenure" . to_string ( ) ,
2673
+ clar_path,
2674
+ db_name,
2675
+ "--clarity_version" . to_string ( ) ,
2676
+ "clarity2" . to_string ( ) ,
2677
+ ] ,
2678
+ ) ;
2679
+
2680
+ // Assert
2681
+ let exit_code = invoked. 0 ;
2682
+ let result_json = invoked. 1 . unwrap ( ) ;
2683
+ assert_eq ! (
2684
+ exit_code, 1 ,
2685
+ "expected eval to fail under Clarity 2, got: {}" ,
2686
+ result_json
2687
+ ) ;
2688
+ assert ! ( result_json[ "error" ] [ "runtime" ] != json!( null) ) ;
2689
+ }
2584
2690
}
0 commit comments