Skip to content
This repository was archived by the owner on Dec 29, 2021. It is now read-only.
This repository was archived by the owner on Dec 29, 2021. It is now read-only.

Feature proposal: Run examples as top level concept, with compilation profile #96

Closed
@azriel91

Description

@azriel91

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions