#![allow(deprecated)]
#![allow(clippy::unwrap_used)] #![allow(clippy::expect_used)]
use assert_cmd::Command;
use predicates::prelude::*;
fn bashrs_repl() -> Command {
let mut cmd = assert_cmd::cargo_bin_cmd!("bashrs");
cmd.arg("repl");
cmd
}
#[test]
fn test_repl_007_001_simple_assignment() {
bashrs_repl()
.write_stdin("x=5\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"));
}
#[test]
fn test_repl_007_001_assignment_double_quotes() {
bashrs_repl()
.write_stdin("name=\"hello world\"\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"));
}
#[test]
fn test_repl_007_001_assignment_single_quotes() {
bashrs_repl()
.write_stdin("path='/usr/bin'\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"));
}
#[test]
fn test_repl_007_001_multiple_assignments() {
bashrs_repl()
.write_stdin("x=5\ny=10\nz=15\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set").count(3));
}
#[test]
fn test_repl_007_001_expansion_normal_mode() {
bashrs_repl()
.write_stdin("x=42\necho $x\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("42"));
}
#[test]
fn test_repl_007_001_expansion_braced() {
bashrs_repl()
.write_stdin("name=Alice\necho ${name}\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Alice"));
}
#[test]
fn test_repl_007_001_multiple_expansion() {
bashrs_repl()
.write_stdin("x=1\ny=2\necho $x + $y\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("1"))
.stdout(predicate::str::contains("2"));
}
#[test]
fn test_repl_007_001_unknown_variable() {
bashrs_repl()
.write_stdin("echo $unknown\nquit\n")
.assert()
.success();
}
#[test]
fn test_repl_007_001_vars_shows_variables() {
bashrs_repl()
.write_stdin("x=5\ny=10\n:vars\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("x"))
.stdout(predicate::str::contains("5"))
.stdout(predicate::str::contains("y"))
.stdout(predicate::str::contains("10"));
}
#[test]
fn test_repl_007_001_vars_empty() {
bashrs_repl()
.write_stdin(":vars\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("No session variables"));
}
#[test]
fn test_repl_007_001_expansion_purify_mode() {
bashrs_repl()
.write_stdin(":mode purify\nx=test\nmkdir $x\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"))
.stdout(predicate::str::contains("Purified"));
}
#[test]
fn test_repl_007_001_expansion_lint_mode() {
bashrs_repl()
.write_stdin(":mode lint\nfilename=test.txt\ncat $filename\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"));
}
#[test]
fn test_repl_007_001_empty_value() {
bashrs_repl()
.write_stdin("empty=\n:vars\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("empty"));
}
#[test]
fn test_repl_007_001_underscore_name() {
bashrs_repl()
.write_stdin("_private=secret\n:vars\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("_private"));
}
#[test]
#[ignore] fn test_repl_007_001_assignment_not_command() {
bashrs_repl()
.write_stdin("test -f file=test.txt\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Would execute"))
.stdout(predicate::str::contains("Variable set").not());
}
#[test]
fn test_repl_007_001_complete_workflow() {
bashrs_repl()
.write_stdin("version=1.0.0\necho Release: $version\n:vars\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"))
.stdout(predicate::str::contains("1.0.0"))
.stdout(predicate::str::contains("version"));
}
#[test]
fn test_repl_007_001_variable_reassignment() {
bashrs_repl()
.write_stdin("x=old\nx=new\necho $x\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set").count(2))
.stdout(predicate::str::contains("new"));
}
#[test]
fn test_repl_007_001_variables_persist_across_modes() {
bashrs_repl()
.write_stdin(":mode normal\nx=test\n:mode purify\necho $x\nquit\n")
.assert()
.success()
.stdout(predicate::str::contains("Variable set"))
.stdout(predicate::str::contains("Switched to purify mode"));
}