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::eval::{Fields, len};

mod support;
pub use self::support::*;

fn assert_len(expected_len: usize, param: MockParam) {
    assert_eq!(len(&param, &()).to_string(), expected_len.to_string());
}

#[test]
fn none() {
    assert_len(0, MockParam::Fields(None));
}

#[test]
fn zero() {
    assert_len(0, MockParam::Fields(Some(Fields::Zero)));
}

#[test]
fn at() {
    let fields = vec!("foo".into(), "bar".into());
    assert_len(fields.len(), MockParam::Fields(Some(Fields::At(fields))));
    assert_len(0, MockParam::Fields(Some(Fields::At(vec!()))));
}

#[test]
fn star() {
    let fields = vec!("foo".into(), "bar".into());
    assert_len(fields.len(), MockParam::Fields(Some(Fields::Star(fields))));
    assert_len(0, MockParam::Fields(Some(Fields::Star(vec!()))));
}

#[test]
fn split() {
    let first = "foo";
    let second = "bar";
    let fields = vec!(first.into(), second.into());
    assert_len(first.len() + second.len(), MockParam::Split(false, Fields::Split(fields)));
    assert_len(0, MockParam::Split(false, Fields::Split(vec!())));
}