Skip to content

Commit 34fad55

Browse files
committed
Verify --clarity_version flag takes effect for clarity-cli eval
NOTE: test_eval_clarity3_contract_fails_with_clarity2_flag fails.
1 parent 15b1ef5 commit 34fad55

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

stackslib/src/clarity_cli.rs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,4 +2581,110 @@ mod test {
25812581
);
25822582
assert!(result_json["error"]["initialization"] != json!(null));
25832583
}
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+
}
25842690
}

0 commit comments

Comments
 (0)