conch-runtime 0.1.2

A library for evaluating/executing programs written in the shell programming language.
Documentation
#![cfg(feature = "conch-parser")]

extern crate conch_runtime;

use conch_runtime::env::VarEnv;
use conch_runtime::eval::{Fields, split};

#[macro_use]
mod support;
pub use self::support::*;

fn eval(do_split: bool, inner: MockWord) -> Result<Fields<String>, MockErr> {
    let env = VarEnv::<String, String>::new();
    split(do_split, inner)
        .pin_env(env)
        .wait()
}

#[test]
fn should_split_fields_as_requested() {
    let env = VarEnv::<String, String>::new();
    let fields = Fields::Split(vec!("foo".to_owned(), "bar".to_owned()));
    let split_fields = fields.clone().split(&env);

    assert_eq!(eval(true, MockWord::Fields(Some(fields.clone()))), Ok(split_fields));
    assert_eq!(eval(false, MockWord::Fields(Some(fields.clone()))), Ok(fields));
}

#[test]
fn should_propagate_errors() {
    eval(true, mock_word_error(false)).unwrap_err();
}

#[test]
fn should_propagate_cancel() {
    test_cancel!(split(true, mock_word_must_cancel()), VarEnv::<String, String>::new());
}