cargo-watch 7.2.2

Watches over your Cargo project’s source
Documentation
extern crate assert_cmd;
extern crate cargo_watch;
extern crate predicates;
extern crate wait_timeout;
extern crate watchexec;

use assert_cmd::prelude::*;
use predicates::str::is_match;
use std::{
    process::{Command, Stdio},
    time::Duration,
};
use wait_timeout::ChildExt;

#[test]
fn with_cargo() {
    let mut main = Command::new("cargo")
        .stderr(Stdio::piped())
        .stdout(Stdio::piped())
        .args(&["watch", "--version"])
        .spawn()
        .unwrap();

    if main.wait_timeout(Duration::from_secs(1)).unwrap().is_none() {
        main.kill().unwrap();
    }

    main.wait_with_output()
        .unwrap()
        .assert()
        .success()
        .stdout(is_match(r"cargo-watch \d+\.\d+\.\d+\n").unwrap());
}

#[test]
fn without_cargo() {
    let mut main = Command::cargo_bin("cargo-watch")
        .unwrap()
        .stderr(Stdio::piped())
        .stdout(Stdio::piped())
        .args(&["watch", "--version"])
        .spawn()
        .unwrap();

    if main.wait_timeout(Duration::from_secs(1)).unwrap().is_none() {
        main.kill().unwrap();
    }

    main.wait_with_output()
        .unwrap()
        .assert()
        .success()
        .stdout(is_match(r"cargo-watch \d+\.\d+\.\d+\n").unwrap());
}

#[test]
fn without_watch() {
    let mut main = Command::cargo_bin("cargo-watch")
        .unwrap()
        .stderr(Stdio::piped())
        .stdout(Stdio::piped())
        .args(&["--version"])
        .spawn()
        .unwrap();

    if main.wait_timeout(Duration::from_secs(1)).unwrap().is_none() {
        main.kill().unwrap();
    }

    main.wait_with_output()
        .unwrap()
        .assert()
        .success()
        .stdout(is_match(r"cargo-watch \d+\.\d+\.\d+\n").unwrap());
}