philiprehberger-assert-cmd 0.1.3

Ergonomic CLI binary integration testing with fluent assertions on stdout, stderr, and exit code
Documentation
  • Coverage
  • 100%
    34 out of 34 items documented2 out of 25 items with examples
  • Size
  • Source code size: 27.48 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.2 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 15s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • philiprehberger/rs-assert-cmd
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • philiprehberger

rs-assert-cmd

CI Crates.io GitHub release Last updated License Bug Reports Feature Requests Sponsor

Ergonomic CLI binary integration testing with fluent assertions on stdout, stderr, and exit code

Installation

[dependencies]
philiprehberger-assert-cmd = "0.1.3"

Usage

use philiprehberger_assert_cmd::cmd;

// Basic command assertion
cmd("echo")
    .arg("hello world")
    .run()
    .unwrap()
    .assert_success()
    .assert_stdout_contains("hello");

// Chain multiple assertions
cmd("rustc")
    .arg("--version")
    .run()
    .unwrap()
    .assert_success()
    .assert_exit_code(0)
    .assert_stdout_contains("rustc")
    .assert_stderr_is_empty();

// Environment variables and stdin
cmd("cat")
    .stdin("input data\n")
    .run()
    .unwrap()
    .assert_success()
    .assert_stdout_equals("input data\n");

// Glob pattern matching
cmd("echo")
    .arg("version 1.2.3")
    .run()
    .unwrap()
    .assert_stdout_matches("version *");

API

Builder

Method Description
cmd(program) Create a new command builder
Cmd::new(program) Create a new command builder
.arg(arg) Append a single argument
.args(&[args]) Append multiple arguments
.env(key, value) Set an environment variable
.stdin(data) Pipe data to stdin
.current_dir(dir) Set the working directory
.timeout(duration) Set a timeout for execution
.run() Execute and return Result<CmdOutput, CmdError>

Assertions

Method Description
.assert_success() Exit code is 0
.assert_failure() Exit code is non-zero
.assert_exit_code(code) Exit code matches exactly
.assert_stdout_contains(s) Stdout contains substring
.assert_stdout_equals(s) Stdout equals exactly
.assert_stdout_is_empty() Stdout is empty
.assert_stdout_line_count(n) Stdout has n lines
.assert_stdout_matches(pat) Stdout matches glob pattern (*, ?)
.assert_stderr_contains(s) Stderr contains substring
.assert_stderr_equals(s) Stderr equals exactly
.assert_stderr_is_empty() Stderr is empty
.stdout_lines() Split stdout into Vec<&str>

Development

cargo test
cargo clippy -- -D warnings

Support

If you find this package useful, consider giving it a star on GitHub — it helps motivate continued maintenance and development.

LinkedIn More packages

License

MIT