use std::fs;
use assert_cmd::Command;
#[test]
fn default_output_is_left_aligned_with_headings() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.write_stdin("one two\nthree\n")
.assert()
.success()
.stdout("lines bytes\n2 14\n");
}
#[test]
fn include_words_adds_a_left_aligned_word_column() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("--include-words")
.write_stdin("one two\nthree\n")
.assert()
.success()
.stdout("lines words bytes\n2 3 14\n");
}
#[test]
fn include_chars_adds_a_left_aligned_char_column() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("--include-chars")
.write_stdin("café\n")
.assert()
.success()
.stdout("lines chars bytes\n1 5 6\n");
}
#[test]
fn words_option_counts_words() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("--words")
.write_stdin("one two\nthree\n")
.assert()
.success()
.stdout("3\n");
}
#[test]
fn chars_option_counts_utf8_characters() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("--chars")
.write_stdin("café\n")
.assert()
.success()
.stdout("5\n");
}
#[test]
fn chars_and_bytes_can_be_counted_together() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("-mc")
.write_stdin("café\n")
.assert()
.success()
.stdout("5 6\n");
}
#[test]
fn human_readable_default_output_uses_size_heading() {
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("-h")
.write_stdin("one two\nthree\n")
.assert()
.success()
.stdout("lines size\n2 14B\n");
}
#[test]
fn glob_option_counts_matching_files() {
let directory = tempfile::tempdir().unwrap();
let path_b = directory.path().join("b.txt");
let path_a = directory.path().join("a.txt");
fs::write(&path_b, "one\n").unwrap();
fs::write(&path_a, "two\nthree\n").unwrap();
let pattern = directory
.path()
.join("*.txt")
.to_string_lossy()
.into_owned();
let path_a = path_a.to_string_lossy();
let path_b = path_b.to_string_lossy();
let expected = format!(
"lines bytes file\n2 10 {path_a}\n1 4 {path_b}\n3 14 total\n"
);
let mut cmd = Command::cargo_bin("xwc").unwrap();
cmd.arg("--glob")
.arg(pattern)
.assert()
.success()
.stdout(expected);
}