use super::run_cmd;
use anyhow::Result;
fn build_argv(args: &[String]) -> Result<Vec<String>> {
if args.is_empty() {
anyhow::bail!("usage: moor keel [--project <name>] <keel-args...>");
}
let mut cmd = vec!["keel".to_string()];
cmd.extend(args.iter().cloned());
Ok(cmd)
}
pub fn run(project: &str, args: &[String]) -> Result<()> {
let cmd = build_argv(args)?;
run_cmd::run(project, &cmd)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn prepends_keel_to_the_given_args() {
let argv = build_argv(&["gate".into(), "g1".into(), "blast-radius".into()]).unwrap();
assert_eq!(argv, vec!["keel", "gate", "g1", "blast-radius"]);
}
#[test]
fn empty_args_is_an_error() {
let err = build_argv(&[]).unwrap_err();
assert!(err.to_string().contains("usage"));
}
#[test]
fn preserves_hyphenated_flags_in_order() {
let argv = build_argv(&[
"approve".into(),
"greet-name".into(),
"--stage".into(),
"spec".into(),
])
.unwrap();
assert_eq!(
argv,
vec!["keel", "approve", "greet-name", "--stage", "spec"]
);
}
}