shelly-shell 0.4.0

A Rust based Unix style shell with a typed and structured language syntax.
let $fixture = $args[0]
for ($source, $message) in [
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; echo \$t + 1", "Terminals cannot be used in arithmetic"],
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; \$t", "Cannot execute a terminal"],
    ["open_terminal [\"__missing_terminal_program__\"] [:]", "No such file"],
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; terminal_read \$t -1", "nonnegative Integer"],
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; terminal_write \$t 1", "Expected a String"],
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; terminal_close \$t; terminal_read \$t 0", "Terminal is closed"],
    ["let \$t = open_terminal [\"/bin/sleep\", \"30\"] [:]; terminal_close \$t; terminal_write \$t \"x\"", "Terminal is closed"],
    ["let \$t = open_terminal [\"/bin/cat\", \"${fixture}/data/invalid-utf8\"] [:]; terminal_read \$t 1000", "not UTF-8"],
    ["let \$t = open_terminal [\"/usr/bin/printf\", \"\\\\303\"] [:]; terminal_read \$t 1000; terminal_read \$t 1000", "not UTF-8"],
]
{
    let $result = run_process [`$shelly, "-m", "-c", $source] [
        "timeout_ms": 2000, "stdout_file": "${fixture}/invalid.out", "stderr_file": "${fixture}/invalid.err",
    ]
    require (($result["exit_code"] == 1) && (!$result["timed_out"])) "invalid terminal operation accepted"
    let $error: String
    "${fixture}/invalid.err" -> $error
    require ($error.contains $message) "wrong terminal diagnostic"
}