#![feature(proc_macro_hygiene)]
extern crate command_macros_plugin;
mod plugin {
use std::process::Command;
use command_macros_plugin::command;
fn quicktest(mut echocmd: Command, target: &str) {
let out = echocmd.output().expect("quicktest: can't echo").stdout;
assert_eq!(String::from_utf8_lossy(&out).trim(), target);
}
#[test]
fn good() {
let bar = false;
let option = Some(5);
quicktest(
command!(echo {} if bar {-=bar=-} else if let Some(a) = option {--number (a.to_string())} levano),
"{} --number 5 levano"
);
let bar = true;
quicktest(
command!(echo {} if bar {-=bar=-} else if let Some(a) = option {--number (a.to_string())} levano),
"{} -=bar=- levano"
);
}
#[test]
fn ffmpeg() {
let moreargs = ["-pix_fmt", "yuv420p"];
let file = "file.mp4".to_string();
let preset = "slow";
let tmpname = "tmp.mkv";
quicktest(
command!(
echo -i (file)
-c:v libx264 -preset (preset) [&moreargs]
-c:a copy
file:(tmpname)
),
"-i file.mp4 -c:v libx264 -preset slow -pix_fmt yuv420p -c:a copy file:tmp.mkv"
);
}
#[test]
fn strings() {
quicktest(command!("echo" r"a~\b"), "a~\\b");
}
#[test]
fn ugly() {
quicktest(command!(echo if {{}; false}{a}else{b}), "b");
}
#[test]
fn match_test() {
for &(x, target) in &[
(Ok(1), ". 0101 ."),
(Ok(5), ". small 5 ."),
(Ok(10), ". 10 ."),
(Err("bu"), ". err bu ."),
] {
quicktest(command!(
echo . match x {
Ok(0) | Ok(1) => { 0101 },
Ok(x) if x < 7 => { small (x.to_string()) },
Ok(x) => { (x.to_string()) }
Err(x) => { err (x) }
} .
),
target
);
}
}
#[test]
fn parenparen() {
quicktest(command!(echo ((2+2))), "4");
fn inc(x: i32) -> String { (x + 1).to_string() };
quicktest(command!(echo ((inc)(3))), "4");
}
#[test]
fn touching() {
quicktest(command![echo number((2+2))], "number4");
quicktest(command![("e")"ch"(('o')) number((2+2))], "number4");
quicktest(command![echo ("abc")-((5))-def.txt hij], "abc-5-def.txt hij");
}
#[test]
fn for_loop() {
quicktest(command![
echo
for (i, x) in ["a", "b"].iter().enumerate() {
--add ((i+1)).(x).txt
}
end
],
"--add 1.a.txt --add 2.b.txt end"
);
}
#[test]
fn not_moving() {
let s = String::new();
command!((s));
command!(((s)));
command!((s));
}
#[test]
fn hygiene() {
let cmd = 42;
quicktest(command![echo ((cmd))], "42");
}
#[test]
fn flags_warn() {
}
}