#![allow(missing_docs)]
use predicates::prelude::*;
#[test]
fn test_debugger_014_phase_1_3_trace_outputs_function_calls() {
let code = r#"
fun fibonacci(n) {
if n <= 1 {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
fun main() {
println("Result: {}", fibonacci(3));
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("--trace")
.arg("-e")
.arg(code)
.timeout(std::time::Duration::from_secs(5))
.assert()
.success()
.stdout(predicate::str::contains("TRACE: → fibonacci"))
.stdout(predicate::str::contains("TRACE: ← fibonacci"));
}
#[test]
fn test_debugger_014_phase_1_3_trace_shows_nesting() {
let code = r#"
fun inner() {
return 42;
}
fun outer() {
return inner();
}
fun main() {
println("Result: {}", outer());
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("--trace")
.arg("-e")
.arg(code)
.timeout(std::time::Duration::from_secs(5))
.assert()
.success()
.stdout(predicate::str::contains("TRACE: → outer"))
.stdout(predicate::str::contains("TRACE: → inner"))
.stdout(predicate::str::contains("TRACE: ← inner"))
.stdout(predicate::str::contains("TRACE: ← outer"));
}
#[test]
fn test_debugger_014_phase_1_3_trace_disabled_by_default() {
let code = r#"
fun test_func() {
return 42;
}
fun main() {
println("Result: {}", test_func());
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(code)
.timeout(std::time::Duration::from_secs(5))
.assert()
.success()
.stdout(predicate::str::contains("TRACE:").not());
}