test-exec 0.1.0

Test your command line applications comfortably
## test-exec - Test command line applications comfortably

[![travis-badge]][travis]
[![appveyor-badge]][appveyor]
[![crates.io-badge]][crates.io]
[![license-badge]][license]

[travis-badge]: https://img.shields.io/travis/com/Draphar/test-exec.svg?branch=master&style=flat-square
[travis]: https://travis-ci.com/Draphar/mkpasswd
[appveyor-badge]: https://img.shields.io/appveyor/ci/Draphar/test-exec.svg?style=flat-square
[appveyor]: https://ci.appveyor.com/project/Draphar/test-exec
[crates.io-badge]: https://img.shields.io/crates/v/test-exec.svg?style=flat-square
[crates.io]: https://crates.io/crates/test-exec
[license-badge]: https://img.shields.io/crates/l/test-exec.svg?style=flat-square
[license]: https://github.com/Draphar/test-exec/blob/master/LICENSE

*Cargo.toml*
```
[dev-dependencies]
test-exec = "0.1.0
```

`test-exec` is a Rust testing library to help you at testing the output of a command line application.
It aims for maximum comfort, and wants to prevent messing around with `Command`.

The main functionality is the [`exec`][exec-doc] macro:
it executes your command, verifies the output and is highly customizable.

A few previews, assuming you have a binary target called `my_bin`:

- minimum configuration:
    `exec!("my_bin");`
    
- (almost) maximum configuration:
```rust
let output = exec!{
    "my_bin",
    args: ["-p", "/"],
    cwd: "/tmp",
    env: {
        THREADS: "4"
    },
    stdin: b"show-hidden",
    timeout: 60000,
    log: true,

    code: 0,
    stdout: b"Started program...\nDone.\n",
    stderr: []
};

// `output` can be used here like a normal process::Output
```

If the program exits with any other code than `0`, a different `stdout` or `stderr`,
or is running longer than 60 seconds, a panic occurs.
    
As you might have noticed, the bin target is added to the PATH automatically.

See the [documentation][exec-doc] for more.

# Features

- set the arguments, current working directory, environment and `stdin` with one line each
- exit code, `stdout`, `stderr` and optionally termination signal comparison directly through the macro
- automatic availability of bin targets
- all output of the program is returned for additional use

# Installation and usage

As `test-exec` is a testing library, it should be added to the dev-dependencies:

```
[dev-dependencies]
test-exec = "0.1.0
```

And it can be used in code by doing

```
#[macro_use]
extern crate test_exec;
```

For instance in an integration test for a binary called `my_pwd`, whichs prints the current working directory

*tests/bin.rs*
```
#[macro_use]
extern crate test_exec;

#[test]
fn test_program_output() {
    exec!{
        "my_pwd",
        cwd: "/",
        log: true,
        
        code: 0,
        stdout: b"/\n",
        stderr: []
    };
}
```

[exec-doc]: https://docs.rs/test-exec/0.1.0/test-exec/exec