Feature proposal: Run examples as top level concept, with compilation profile #96
Description
Hiya, I really like assert_cli
, thanks for making such a useful crate!
Since I'm a fan of "automatically test everything, so I know when I break things", I have automated tests for my examples, and control them through arguments or stdin
. For example:
extern crate assert_cli;
#[test]
fn example_01_menu() {
assert_cli::Assert::command(&["cargo", "run", "--example", "01_menu", "--"])
.with_args(&["--timeout", "0"])
.unwrap();
}
Now, because cargo run --example example_name
always runs the example in the debug
profile, to make sure I don't double compile when I'm testing my release
profile build, I can do something like this:
extern crate assert_cli;
#[test]
fn example_01_menu() {
assert_cli::Assert::command(&(example_command("01_menu")))
.with_args(&["--timeout", "0"])
.unwrap();
}
fn example_command(example_name: &'static str) -> Vec<&str> {
let mut command = vec!["cargo", "run"];
if !cfg!(debug_assertions) {
command.push("--release");
}
command.extend(&["--example", example_name, "--"]);
command
}
Since I would be replicating this functionality across a number of crates, I was wondering whether you'd like this to go in assert_cli
(is it in line with what this crate is intended to cover), otherwise I can make an intermediate crate.
Edit: just noticed the conditional compilation for the profile is also mentioned in #86.