rink 0.9.0

Unit conversion tool, similar to frink
Documentation
use assert_cmd::Command;
use predicates::prelude::*;

#[test]
fn test_with_config() {
    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("tests/config_for_tests.toml")
        .arg("3 feet to meters")
        .assert()
        .success()
        .stdout(predicate::eq("> 3 feet to meters\n0.9144 meter (length)\n"));
}

#[test]
fn test_invalid_expr() {
    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("tests/config_for_tests.toml")
        .arg("doesnt_exist")
        .assert()
        .failure()
        .stdout(predicate::eq("> doesnt_exist\nNo such unit doesnt_exist\n"));
}

#[test]
fn test_invalid_config() {
    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("config_that_doesnt_exist.toml")
        .arg("3 feet to meters")
        .assert()
        .failure()
        .stderr(predicate::str::contains(
            "Failed to read provided config file `config_that_doesnt_exist.toml`",
        ));
}

#[test]
fn test_run_file() {
    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("tests/config_for_tests.toml")
        .arg("-f")
        .arg("tests/example.units")
        .assert()
        .success()
        .stdout(predicate::eq(
            "approx. 9.365338 meter / second^2 (acceleration)\n",
        ));
}

#[test]
fn test_run_stdin() {
    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("tests/config_for_tests.toml")
        .arg("-f")
        .arg("-")
        .write_stdin("3 feet to meters\n")
        .assert()
        .success()
        .stdout(predicate::eq("0.9144 meter (length)\n"));

    let mut cmd = Command::cargo_bin("rink").unwrap();
    cmd.arg("-c")
        .arg("tests/config_for_tests.toml")
        .arg("-f")
        .arg("-")
        .write_stdin("doesnt_exist\n")
        .assert()
        .success()
        .stdout(predicate::eq("No such unit doesnt_exist\n"));
}