diff --git a/tests/examples/cycle.txt b/tests/examples/cycle.txt new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index ac11efb4..ad3ca9d0 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1,11 +1,14 @@ -use assert_cmd::Command; +use assert_cmd::assert::OutputAssertExt; +use assert_cmd::cargo::CommandCargoExt; use predicates::{prelude::predicate, str::PredicateStrExt}; +use std::fs::File; use std::path::Path; +use std::process::{Command, Stdio}; use std::str::from_utf8; const EXAMPLES_DIR: &str = "tests/examples"; -fn bat_with_config() -> Command { +fn bat_as_std() -> Command { let mut cmd = Command::cargo_bin("bat").unwrap(); cmd.current_dir("tests/examples"); cmd.env_remove("PAGER"); @@ -17,7 +20,11 @@ fn bat_with_config() -> Command { cmd } -fn bat() -> Command { +fn bat_with_config() -> assert_cmd::Command { + assert_cmd::Command::from_std(bat_as_std()) +} + +fn bat() -> assert_cmd::Command { let mut cmd = bat_with_config(); cmd.arg("--no-config"); cmd @@ -189,6 +196,30 @@ fn line_range_multiple() { .stdout("line 1\nline 2\nline 4\n"); } +#[test] +fn basic_io_cycle() { + let file_out = Stdio::from(File::open("tests/examples/cycle.txt").unwrap()); + bat_as_std() + .arg("test.txt") + .arg("cycle.txt") + .stdout(file_out) + .assert() + .failure(); +} + +#[test] +fn stdin_to_stdout_cycle() { + let file_out = Stdio::from(File::open("tests/examples/cycle.txt").unwrap()); + let file_in = Stdio::from(File::open("tests/examples/cycle.txt").unwrap()); + bat_as_std() + .stdin(file_in) + .arg("test.txt") + .arg("-") + .stdout(file_out) + .assert() + .failure(); +} + #[test] fn tabs_numbers() { bat()