extern crate conch_parser;
use conch_parser::ast::Parameter::*;
use conch_parser::ast::ParameterSubstitution::*;
use conch_parser::parse::ParseError::*;
mod parse_support;
use parse_support::*;
#[test]
fn test_parameter_short() {
let words = vec!(
At,
Star,
Pound,
Question,
Dash,
Dollar,
Bang,
Positional(3),
);
let mut p = make_parser("$@$*$#$?$-$$$!$3$");
for param in words {
assert_eq!(p.parameter().unwrap(), word_param(param));
}
assert_eq!(word("$"), p.parameter().unwrap());
assert_eq!(Err(UnexpectedEOF), p.parameter()); }
#[test]
fn test_parameter_short_in_curlies() {
let words = vec!(
At,
Star,
Pound,
Question,
Dash,
Dollar,
Bang,
Var(String::from("foo")),
Positional(3),
Positional(1000),
);
let mut p = make_parser("${@}${*}${#}${?}${-}${$}${!}${foo}${3}${1000}");
for param in words {
assert_eq!(p.parameter().unwrap(), word_param(param));
}
assert_eq!(Err(UnexpectedEOF), p.parameter()); }
#[test]
fn test_parameter_command_substitution() {
let correct = word_subst(Command(vec!(
cmd_args("echo", &["hello"]),
cmd_args("echo", &["world"]),
)));
assert_eq!(correct, make_parser("$(echo hello; echo world)").parameter().unwrap());
}
#[test]
fn test_parameter_command_substitution_valid_empty_substitution() {
let correct = word_subst(Command(vec!()));
assert_eq!(correct, make_parser("$()").parameter().unwrap());
assert_eq!(correct, make_parser("$( )").parameter().unwrap());
assert_eq!(correct, make_parser("$(\n\n)").parameter().unwrap());
}
#[test]
fn test_parameter_literal_dollar_if_no_param() {
let mut p = make_parser("$%asdf");
assert_eq!(word("$"), p.parameter().unwrap());
assert_eq!(p.word().unwrap().unwrap(), word("%asdf"));
}