mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-07 12:05:46 +00:00
crate dir-diff -> fn assert_same_directory
This commit is contained in:
parent
35df50857d
commit
253cedcf60
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -187,15 +187,6 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
|
checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "dir-diff"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b"
|
|
||||||
dependencies = [
|
|
||||||
"walkdir",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "doc-comment"
|
name = "doc-comment"
|
||||||
version = "0.3.3"
|
version = "0.3.3"
|
||||||
@ -415,7 +406,6 @@ dependencies = [
|
|||||||
"bzip2",
|
"bzip2",
|
||||||
"clap",
|
"clap",
|
||||||
"clap_generate",
|
"clap_generate",
|
||||||
"dir-diff",
|
|
||||||
"flate2",
|
"flate2",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"infer",
|
"infer",
|
||||||
|
@ -34,7 +34,6 @@ clap_generate = "=3.0.0-beta.5"
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "2.0.2"
|
assert_cmd = "2.0.2"
|
||||||
dir-diff = "0.3.2"
|
|
||||||
infer = "0.5.0"
|
infer = "0.5.0"
|
||||||
parse-display = "0.5.3"
|
parse-display = "0.5.3"
|
||||||
proptest = "1.0.0"
|
proptest = "1.0.0"
|
||||||
|
@ -10,7 +10,7 @@ use rand::{rngs::SmallRng, RngCore, SeedableRng};
|
|||||||
use tempfile::tempdir;
|
use tempfile::tempdir;
|
||||||
use test_strategy::{proptest, Arbitrary};
|
use test_strategy::{proptest, Arbitrary};
|
||||||
|
|
||||||
use crate::utils::create_file_random;
|
use crate::utils::{assert_same_directory, create_file_random};
|
||||||
|
|
||||||
#[derive(Arbitrary, Debug, Display)]
|
#[derive(Arbitrary, Debug, Display)]
|
||||||
#[display(style = "snake_case")]
|
#[display(style = "snake_case")]
|
||||||
@ -76,7 +76,7 @@ fn single_empty_file(ext: Extension, #[any(size_range(0..8).lift())] exts: Vec<F
|
|||||||
create_file_random(&mut fs::File::create(before_file).unwrap(), &mut SmallRng::from_entropy());
|
create_file_random(&mut fs::File::create(before_file).unwrap(), &mut SmallRng::from_entropy());
|
||||||
ouch!("c", before_file, archive);
|
ouch!("c", before_file, archive);
|
||||||
ouch!("d", archive, "-d", after);
|
ouch!("d", archive, "-d", after);
|
||||||
assert!(!dir_diff::is_different(before, after).unwrap());
|
assert_same_directory(before, after, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proptest(cases = 512)]
|
#[proptest(cases = 512)]
|
||||||
@ -91,7 +91,7 @@ fn single_file(ext: Extension, #[any(size_range(0..8).lift())] exts: Vec<FileExt
|
|||||||
fs::write(before_file, []).unwrap();
|
fs::write(before_file, []).unwrap();
|
||||||
ouch!("c", before_file, archive);
|
ouch!("c", before_file, archive);
|
||||||
ouch!("d", archive, "-d", after);
|
ouch!("d", archive, "-d", after);
|
||||||
assert!(!dir_diff::is_different(before, after).unwrap());
|
assert_same_directory(before, after, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proptest(cases = 512)]
|
#[proptest(cases = 512)]
|
||||||
@ -105,10 +105,10 @@ fn multiple_files(
|
|||||||
let before = &dir.join("before");
|
let before = &dir.join("before");
|
||||||
let before_dir = &before.join("dir");
|
let before_dir = &before.join("dir");
|
||||||
fs::create_dir_all(before_dir).unwrap();
|
fs::create_dir_all(before_dir).unwrap();
|
||||||
let archive = &dir.join(format!("archive.{}", merge_extensions(ext, exts)));
|
let archive = &dir.join(format!("archive.{}", merge_extensions(&ext, exts)));
|
||||||
let after = &dir.join("after");
|
let after = &dir.join("after");
|
||||||
create_random_files(before_dir, depth, &mut SmallRng::from_entropy());
|
create_random_files(before_dir, depth, &mut SmallRng::from_entropy());
|
||||||
ouch!("c", before_dir, archive);
|
ouch!("c", before_dir, archive);
|
||||||
ouch!("d", archive, "-d", after);
|
ouch!("d", archive, "-d", after);
|
||||||
assert!(!dir_diff::is_different(before, after).unwrap());
|
assert_same_directory(before, after, !matches!(ext, DirectoryExtension::Zip));
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use std::io::Write;
|
use std::{io::Write, path::PathBuf};
|
||||||
|
|
||||||
|
use fs_err as fs;
|
||||||
use rand::RngCore;
|
use rand::RngCore;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
@ -17,3 +18,66 @@ pub fn create_file_random(file: &mut impl Write, rng: &mut impl RngCore) {
|
|||||||
rng.fill_bytes(data);
|
rng.fill_bytes(data);
|
||||||
file.write_all(data).unwrap();
|
file.write_all(data).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn assert_same_directory(x: impl Into<PathBuf>, y: impl Into<PathBuf>, preserve_permissions: bool) {
|
||||||
|
fn read_dir(dir: impl Into<PathBuf>) -> impl Iterator<Item = fs::DirEntry> {
|
||||||
|
let mut dir: Vec<_> = fs::read_dir(dir).unwrap().map(|entry| entry.unwrap()).collect();
|
||||||
|
dir.sort_by_key(|x| x.file_name());
|
||||||
|
dir.into_iter()
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut x = read_dir(x);
|
||||||
|
let mut y = read_dir(y);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match (x.next(), y.next()) {
|
||||||
|
(Some(x), Some(y)) => {
|
||||||
|
assert_eq!(x.file_name(), y.file_name());
|
||||||
|
|
||||||
|
let meta_x = x.metadata().unwrap();
|
||||||
|
let meta_y = y.metadata().unwrap();
|
||||||
|
let ft_x = meta_x.file_type();
|
||||||
|
let ft_y = meta_y.file_type();
|
||||||
|
|
||||||
|
#[cfg(unix)]
|
||||||
|
if preserve_permissions {
|
||||||
|
assert_eq!(ft_x, ft_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ft_x.is_dir() && ft_y.is_dir() {
|
||||||
|
assert_same_directory(x.path(), y.path(), preserve_permissions);
|
||||||
|
} else if ft_x.is_file() && ft_y.is_file() {
|
||||||
|
assert_eq!(meta_x.len(), meta_y.len());
|
||||||
|
assert_eq!(fs::read(x.path()).unwrap(), fs::read(y.path()).unwrap());
|
||||||
|
} else {
|
||||||
|
panic!(
|
||||||
|
"entries should be both directories or both files\n left: `{:?}`,\n right: `{:?}`",
|
||||||
|
x.path(),
|
||||||
|
y.path()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(None, None) => break,
|
||||||
|
|
||||||
|
(x, y) => {
|
||||||
|
panic!(
|
||||||
|
"directories don't have the same number of entires\n left: `{:?}`,\n right: `{:?}`",
|
||||||
|
x.map(|x| x.path()),
|
||||||
|
y.map(|y| y.path()),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn src_is_src() {
|
||||||
|
assert_same_directory("src", "src", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn src_is_not_tests() {
|
||||||
|
assert_same_directory("src", "tests", false);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user