|
6 | 6 | use assert_cmd::cmd::Command;
|
7 | 7 | use diffutilslib::assert_diff_eq;
|
8 | 8 | use predicates::prelude::*;
|
| 9 | +use std::fs::File; |
9 | 10 | use std::io::Write;
|
10 |
| -use tempfile::NamedTempFile; |
| 11 | +use tempfile::{tempdir, NamedTempFile}; |
11 | 12 |
|
12 | 13 | // Integration tests for the diffutils command
|
13 | 14 |
|
@@ -238,3 +239,49 @@ fn read_from_stdin() -> Result<(), Box<dyn std::error::Error>> {
|
238 | 239 |
|
239 | 240 | Ok(())
|
240 | 241 | }
|
| 242 | + |
| 243 | +#[test] |
| 244 | +fn compare_file_to_directory() -> Result<(), Box<dyn std::error::Error>> { |
| 245 | + let tmp_dir = tempdir()?; |
| 246 | + |
| 247 | + let directory = tmp_dir.path().join("d"); |
| 248 | + let _ = std::fs::create_dir(&directory); |
| 249 | + |
| 250 | + let a_path = tmp_dir.path().join("a"); |
| 251 | + let mut a = File::create(&a_path).unwrap(); |
| 252 | + a.write_all(b"a\n").unwrap(); |
| 253 | + |
| 254 | + let da_path = directory.join("a"); |
| 255 | + let mut da = File::create(&da_path).unwrap(); |
| 256 | + da.write_all(b"da\n").unwrap(); |
| 257 | + |
| 258 | + let mut cmd = Command::cargo_bin("diffutils")?; |
| 259 | + cmd.arg("-u").arg(&directory).arg(&a_path); |
| 260 | + cmd.assert().code(predicate::eq(1)).failure(); |
| 261 | + |
| 262 | + let output = cmd.output().unwrap().stdout; |
| 263 | + assert_diff_eq!( |
| 264 | + output, |
| 265 | + format!( |
| 266 | + "--- {}\tTIMESTAMP\n+++ {}\tTIMESTAMP\n@@ -1 +1 @@\n-da\n+a\n", |
| 267 | + da_path.display(), |
| 268 | + a_path.display() |
| 269 | + ) |
| 270 | + ); |
| 271 | + |
| 272 | + let mut cmd = Command::cargo_bin("diffutils")?; |
| 273 | + cmd.arg("-u").arg(&a_path).arg(&directory); |
| 274 | + cmd.assert().code(predicate::eq(1)).failure(); |
| 275 | + |
| 276 | + let output = cmd.output().unwrap().stdout; |
| 277 | + assert_diff_eq!( |
| 278 | + output, |
| 279 | + format!( |
| 280 | + "--- {}\tTIMESTAMP\n+++ {}\tTIMESTAMP\n@@ -1 +1 @@\n-a\n+da\n", |
| 281 | + a_path.display(), |
| 282 | + da_path.display() |
| 283 | + ) |
| 284 | + ); |
| 285 | + |
| 286 | + Ok(()) |
| 287 | +} |
0 commit comments