use assert_cmd::prelude::*;
use assert_fs::prelude::*;
use predicates::prelude::*;
use std::process::Command;
mod common;
use common::*;
mod force {
use super::*;
#[test]
fn refuses_overwrite_without_force() -> Result<(), Box<dyn std::error::Error>> {
let working_dir = create_working_dir()?;
let input = working_dir.child("input.txt");
input.write_str("the real payload")?;
let output = working_dir.child("output.gz");
output.write_str("sentinel — must not be clobbered")?;
let mut cmd = Command::cargo_bin("cmprss")?;
cmd.current_dir(&working_dir)
.args(["gzip", "-o", "output.gz", "input.txt"]);
cmd.assert()
.failure()
.stderr(predicate::str::contains("already exists"));
output.assert("sentinel — must not be clobbered");
Ok(())
}
#[test]
fn overwrites_with_force_explicit_output() -> Result<(), Box<dyn std::error::Error>> {
let working_dir = create_working_dir()?;
let input = working_dir.child("input.txt");
input.write_str("the real payload")?;
let output = working_dir.child("output.gz");
output.write_str("sentinel — should be clobbered")?;
let mut cmd = Command::cargo_bin("cmprss")?;
cmd.current_dir(&working_dir)
.args(["gzip", "--force", "-o", "output.gz", "input.txt"]);
cmd.assert().success();
let mut extract = Command::cargo_bin("cmprss")?;
extract
.current_dir(&working_dir)
.args(["gzip", "--extract", "output.gz", "output.txt"]);
extract.assert().success();
working_dir.child("output.txt").assert("the real payload");
Ok(())
}
#[test]
fn overwrites_with_force_positional_output() -> Result<(), Box<dyn std::error::Error>> {
let working_dir = create_working_dir()?;
let input = working_dir.child("input.txt");
input.write_str("the real payload")?;
let output = working_dir.child("input.txt.gz");
output.write_str("stale archive")?;
let mut cmd = Command::cargo_bin("cmprss")?;
cmd.current_dir(&working_dir)
.args(["gzip", "--force", "input.txt", "input.txt.gz"]);
cmd.assert().success();
let mut extract = Command::cargo_bin("cmprss")?;
extract.current_dir(&working_dir).args([
"gzip",
"--extract",
"input.txt.gz",
"roundtrip.txt",
]);
extract.assert().success();
working_dir
.child("roundtrip.txt")
.assert("the real payload");
Ok(())
}
}