#![allow(missing_docs)]
use predicates::prelude::*;
use std::io::Write;
use tempfile::NamedTempFile;
#[test]
fn test_repl_005_for_loop_no_unit_output() {
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("ruchy");
cmd.write_stdin("for i in [1,2] { println(i) }\n:quit\n")
.assert()
.success()
.stdout(predicate::str::contains("1\n2"))
.stdout(predicate::str::contains("nil").not())
.stdout(predicate::str::contains("()").not());
}
#[test]
fn test_repl_005_while_loop_no_unit_output() {
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("ruchy");
cmd.write_stdin("let mut i = 0\nwhile i < 3 { println(i); i = i + 1 }\n:quit\n")
.assert()
.success()
.stdout(predicate::str::contains("0\n1\n2"))
.stdout(predicate::str::contains("nil").not())
.stdout(predicate::str::contains("()").not());
}
#[test]
fn test_repl_005_if_statement_no_unit_output() {
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("ruchy");
cmd.write_stdin("if true { println(\"yes\") }\n:quit\n")
.assert()
.success()
.stdout(predicate::str::contains("yes"))
.stdout(predicate::str::contains("nil").not())
.stdout(predicate::str::contains("()").not());
}
#[test]
fn test_repl_005_let_binding_no_unit_output() {
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("ruchy");
cmd.write_stdin("let x = 42\n:quit\n")
.assert()
.success()
.stdout(predicate::str::contains("nil").not())
.stdout(predicate::str::contains("()").not());
}
#[test]
fn test_repl_005_value_expressions_do_print() {
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("ruchy");
cmd.write_stdin("2 + 2\n\"hello\"\ntrue\n:quit\n")
.assert()
.success()
.stdout(predicate::str::contains("4"))
.stdout(predicate::str::contains("hello"))
.stdout(predicate::str::contains("true"));
}
#[test]
fn test_repl_005_script_no_loop_output_baseline() -> Result<(), Box<dyn std::error::Error>> {
let mut temp_file = NamedTempFile::new()?;
writeln!(
temp_file,
"for i in [1,2] {{ println(i) }}\nprintln(\"done\")"
)?;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(temp_file.path())
.assert()
.success()
.stdout(predicate::str::contains("1\n2\ndone"))
.stdout(predicate::str::contains("nil").not())
.stdout(predicate::str::contains("()").not());
Ok(())
}